use Irssi;
use Irssi::TextUI;
use strict;
use vars qw($VERSION %IRSSI);

#Setting variables:

#first_away_message - The first /away messsage
#second_away_message - The second /away message
#first_away_timeout - Number of seconds to activate the first away state
#second_away_timeout - Number of seconds to activate the second away state
#away_servers - list of servertags seperated by spaces where auto_away will work. 
#               If empty (/set -clear away_servers, it will work on every network
#
# CHANGELOG:
# 21 DEC 2004:
# the timer is only being reset when pressing enter. and the away timer starts counting after the last time you pressed enter.
# this is less CPU consuming :-D

$VERSION = '0.2';
%IRSSI = (
    authors     => 'Tijmen Ruizendaal',
    contact     => 'tijmen@fokdat.nl',
    name        => 'auto_away.pl',
    description => 'server specific autoaway with two different away states at different intervals',
    license     => 'GPLv2',
    url         => 'http://the-timing.nl/stuff/irssi-bitlbee',
    changed     => '2004-12-21',
);


my $timer;

Irssi::settings_add_str('misc', 'first_away_message', undef);
Irssi::settings_add_str('misc', 'second_away_message', undef);
Irssi::settings_add_int('misc', 'first_away_timeout', undef);
Irssi::settings_add_int('misc', 'second_away_timeout', undef);
Irssi::settings_add_str('misc', 'away_servers', undef);

sub reset_timer{
  my $key=shift;
  if(($key == 10) or ($key == 13)) {
    my (@servers) = Irssi::servers();
    foreach my $server (@servers) {
      if($server->{usermode_away} == 1){
        $server->command("AWAY -one");
      }
    }
    Irssi::timeout_remove($timer); 
    my $timeout = Irssi::settings_get_int('first_away_timeout');
    if ($timeout){
      $timer = Irssi::timeout_add_once($timeout*1000, 'first_away', undef); ## activate first away state
    }
  }
}
sub first_away{
  away(1);
  my $timeout = Irssi::settings_get_int('second_away_timeout');
  if ($timeout){
    Irssi::timeout_remove($timer);
    $timer = Irssi::timeout_add_once($timeout*1000, 'away', 2); ## activate second away state
  }
}
sub away{
  my $state = shift;
  my $server_string = Irssi::settings_get_str('away_servers');
  my (@away_servers) = split (/ +/, $server_string);
  my (@servers) = Irssi::servers();
  my $message;

  if($state == 1){
    $message = Irssi::settings_get_str('first_away_message');
  }elsif($state == 2){
    $message = Irssi::settings_get_str('second_away_message');
  }
  if($server_string){
    foreach my $away_server (@away_servers) {
    #print "|$away_server|"; 
      foreach my $server (@servers) {
        if ($away_server eq $server->{tag} && ($server->{usermode_away} == 0 || $state == 2) ){
          $server->command("AWAY -one $message");
        }
      }
    }
  }else{
    my $server=$servers[0];
    $server->command("AWAY -all $message");
  }
}
Irssi::signal_add_last('gui key pressed', 'reset_timer');
