package Plugin::Log;

use strict;
use warnings;

use Term::ANSIColor;

my $config;
my $root_config;

# FIXME turn theme into config parms?
my %t = (
	bracket => color("white"),
	nick => color("cyan"),
	info => color("yellow"),
	kick => color("red"),
	host => color("magenta"),
	channel => color("blue"),
	message => color("reset"),
	private => color("magenta"),
	misc => color("bright_black"),
	reset => color("reset")
);

sub configure {
	my $self = shift;
	shift; # cmdref
	shift; # run_command
	$config = shift;
	$root_config = shift;

	return $self;
}

# IRC 001
sub on_001_welcome {
	my ($self, $logger, $server, $message, $irc) = @_;
	$logger->("$t{info}Connected to $t{host}$server$t{info} --- \"$t{message}$message$t{info}\"$t{reset}");
}

# IRC 002
sub on_002_your_host {
	my ($self, $logger, $message, $irc) = @_;
	$logger->("$t{info} --- \"$t{message}$message$t{info}\"$t{reset}");
}

# IRC 003
sub on_003_created {
	my ($self, $logger, $message, $irc) = @_;
	$logger->("$t{info} --- \"$t{message}$message$t{info}\"$t{reset}");
}

# IRC 004
sub on_004_my_info {
	my ($self, $logger, $message, $irc) = @_;
	$logger->("$t{info} --- \"$t{message}$message$t{info}\"$t{reset}");
}

# IRC 251
sub on_251_user_client {
	my ($self, $logger, $message, $irc) = @_;
	$logger->("$t{info}Online: \"$t{message}$message$t{info}\"$t{reset}");
}

# IRC 252
sub on_252_user_op {
	my ($self, $logger, $count, $message, $irc) = @_;
	$logger->("$t{info}Online: \"$t{message}$count $message$t{info}\"$t{reset}");
}

# IRC 253
sub on_253_user_unknown {
	my ($self, $logger, $count, $message, $irc) = @_;
	$logger->("$t{info}Online: \"$t{message}$count $message$t{info}\"$t{reset}");
}

# IRC 254
sub on_254_user_channels {
	my ($self, $logger, $count, $message, $irc) = @_;
	$logger->("$t{info}Online: \"$t{message}$count $message$t{info}\"$t{reset}");
}

# IRC 255
sub on_255_user_me {
	my ($self, $logger, $message, $irc) = @_;
	$logger->("$t{info}Online: \"$t{message}$message$t{info}\"$t{reset}");
}

sub on_message {
	my ($self, $logger, $who, $where, $raw_what, $what, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where->[0]$t{bracket}\] $t{nick}$who: $t{message}$what$t{reset}");
	return;
}

sub on_privmsg {
	my ($self, $logger, $who, $to, $raw_what, $what, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}private$t{bracket}\] $t{nick}$who$t{bracket}: $t{private}$what$t{reset}");
	return;
}

sub on_action {
	my ($self, $logger, $who, $where, $raw_what, $what, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where->[0]$t{bracket}\] $t{message}* $t{nick}$who $t{message}$raw_what$t{reset}");
	return;
}

sub on_part {
	my ($self, $logger, $who, $where, $why, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- $t{nick}$who $t{info}left ($why)$t{reset}");
	return;
}

sub on_join {
	my ($self, $logger, $who, $where, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- $t{nick}$who $t{info}joined$t{reset}");
	return;
}

sub on_kick {
	my ($self, $logger, $kicker, $where, $kickee, $why, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{kick} !!! $t{nick}$kicker $t{kick}kicked $t{nick}$kickee $t{kick}($why)$t{reset}");
	return;
}

sub on_nick {
	my ($self, $logger, $who, $new_nick, $irc) = @_;
	$logger->("$t{nick}$who $t{info}changed nick to $t{nick}$new_nick$t{reset}");
	return;
}

sub on_invite {
	my ($self, $logger, $who, $where, $irc) = @_;
	$logger->("$t{nick}$who $t{info}invited me to join $t{channel}$where$t{reset}");
	return;
}

sub on_notice {
	my ($self, $logger, $who, $where, $message, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- Notice: $t{nick}$who$t{info}: $t{message}$message$t{reset}");
	return;
}

sub on_topic {
	my ($self, $logger, $who, $where, $topic, $irc) = @_;
	if ($topic) {
		$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- $t{nick}$who $t{info}set topic to $t{message}$topic$t{reset}");
	} else {
		$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- $t{nick}$who $t{info}unset the topic$t{reset}");
	}
	return;
}

sub on_ping {
	my ($self, $logger, $server, $irc) = @_;
	$logger->("$t{misc}IRC ping from $server$t{reset}");
	return;
}

sub on_331_rpl_notopic {
	my ($self, $logger, $where, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- topic is not set$t{reset}");
	return;
}

sub on_332_rpl_topic {
	my ($self, $logger, $where, $topic, $irc) = @_;
	$logger->("$t{bracket}\[$t{channel}$where$t{bracket}\]$t{info} --- topic is $t{message}$topic$t{reset}");
	return;
}

sub on_372_motd_content {
	my ($self, $logger, $server, $motd, $irc) = @_;
	$logger->("$t{info}MOTD: $t{message}$motd$t{reset}");
	return;
}

sub on_375_motd_begin {
	my ($self, $logger, $server, $message, $irc) = @_;
	$logger->("$t{info}$message$t{reset}");
	return;
}

sub on_376_motd_end {
	my ($self, $logger, $server, $message, $irc) = @_;
	$logger->("$t{info}$message$t{reset}");
	return;
}
1;