use strict;
use Irssi;
use Irssi::Irc;
use LWP::Simple;

use vars qw($VERSION %IRSSI);

my $VERSION = "2.42";

my %IRSSI = (authors => 'Jonas Häggqvist <rasher@rasher.dk>',
		name => 'beek',
		description => 'w/e',
		created => 'Thu,  5 Jan 2005 23:24:53 +0100',
		license => 'BSD w/o advertising clause');

my @colours = ('white', 'black', 'navy', 'green', 'red', 'maroon', 'purple', 'olive', 'yellow', 'lime', 'teal', 'aqua', 'blue', 'fuchsia', 'gray', 'silver');
my %timers;
my $debug = 0;

sub colour {
	my $beek;
	$beek = get('http://lemons.plus.com/number.status');
	if (!defined($beek)) {
		Irssi::print("Using fallback random beek.") if $debug;
		$beek = int(rand(@colours));
	}
	else {
		$beek--;
		Irssi::print('Beek status is: '.$beek.' according to lemons.plus.com') if $debug;
	}
	return $beek;
}

sub beek_status {
	my ($witem) = @_;
	my $colour = colour();
	$witem->command("MSG ".$witem->{name}." Owl beek status: ".chr(3).$colour.@colours[$colour]);
}

sub manual_beek_status {
	my ($data, $server, $witem) = @_;
	if (!$server || !$server->{connected}) {
		Irssi::print("Not connected to server") if $debug;
		return;
	}
	if ($witem && ($witem->{type} eq "CHANNEL" || $witem->{type} eq "QUERY")) {
		# there's query/channel active in window
		beek_status($witem);
	}
}

sub auto_beek_status {
	my ($server, $channel, $witem);
	if ($server = Irssi::server_find_chatnet(Irssi::settings_get_str('beek_ircnet'))) {
		if ($channel = $server->channel_find(Irssi::settings_get_str('beek_channel'))) {
			Irssi::print('channel: ' . $channel->{name}) if $debug;
			if ($witem = $server->channel_find($channel->{name})) {
				Irssi::print('window: ' . $witem->{name}) if $debug;
				beek_status($witem);
			}
			else {
				Irssi::print("Window with " . $channel->{name} . " not found.") if $debug;
			}
		}
		else {
			Irssi::print("Channel " . Irssi::settings_get_str('beek_channel') . " not found.") if $debug;
		}
	}
	else {
		Irssi::print("Ircnet " .Irssi::settings_get_str('beek_ircnet') . " not found.") if $debug;
	}
	set_beek_timer();
}

sub ctcp_beek_status {
	my ($server, $msg, $nick, $address, $target) = @_;
	Irssi::signal_emit('message irc ctcp', $server, 'BEEK', $msg, $nick, $address, $target);
	$server->send_raw("NOTICE $nick :Owl beek status: ".@colours[colour()].".");			
}

sub set_beek_timer() {
	my $seconds = 0;
	my ($max, $min) = (Irssi::settings_get_int('beek_hours_max'), Irssi::settings_get_int('beek_hours_min'));
	my $hours = rand($max - $min) + $min;
	Irssi::print('Next status in ' . $hours . ' hours.') if $debug;
	$seconds = $hours * 3600;
	Irssi::print('Next status in '.$seconds.' seconds') if $debug;
	$timers{"beek_timer"} = Irssi::timeout_add_once(int($seconds * 1000), 'auto_beek_status', '');
}

Irssi::command_bind('beek', 'manual_beek_status');
Irssi::ctcp_register("BEEK");
Irssi::signal_add_last("ctcp msg beek", "ctcp_beek_status");
Irssi::settings_add_str('misc', 'beek_channel', '#nowhere');
Irssi::settings_add_str('misc', 'beek_ircnet', 'nettag');
Irssi::settings_add_int('misc', 'beek_hours_min', 2);
Irssi::settings_add_int('misc', 'beek_hours_max', 4);
Irssi::settings_add_int('misc', 'beek_lines_min', 100);
auto_beek_status();

