use Irssi;
use strict;

use vars qw($VERSION %IRSSI);

$VERSION = "0.1";
%IRSSI = (
    authors     => 'Daniel Wiberg <danne@wiberg.nu>',
    name        => 'daway',
    contact     => 'danne@wiberg.nu',
    description => 'Automatically set away when no activity' .
           'has been seen in ANY of the users ttys for n seconds',
    license     => 'BSD',
    url         => 'http://www.wiberg.nu/software/irssi/',
    changed     => "2005-03-02"
);

# Global Variables
my $daway=0;
my $activity_time=time();
my $ttypath=getOS();

# Settings
Irssi::settings_add_int('daway', 'daway_timeout', "900");
Irssi::settings_add_str('daway', 'daway_reason', "Autoaway.");

# Commands
Irssi::command_bind("daway","daway_help");

# Timers
Irssi::timeout_add(5000, "periodic", "");

# Stuff executed at loadtime
print CLIENTCRAP '%B>>%n '.$IRSSI{name}.' '.$VERSION.' loaded: /daway help for help';

sub get_idle_time
{
  my $daway_timeout=Irssi::settings_get_int('daway_timeout');
  my @result;
  my $result;
  my @fields;
  my $atime;
  my $now;
  my $filename;
  my $idletime;
  my @result=`w 2>&1`;

  foreach $result(@result)
  {
    if($result=~$ENV{USER}) {
      @fields=split(/ +/,$result);
      $filename=$ttypath . @fields[1];
      $atime = (stat($filename))[8];
      if($atime gt $activity_time) {
        $activity_time = $atime;
      }
    }
  }
  $now=time();
  $idletime=$now-$activity_time;
  
  return $idletime;
}

sub set_daway
{
  if(!$daway) {
    my $daway_text=Irssi::settings_get_str('daway_reason');
    my (@servers) = Irssi::servers();
    my $server = $servers[0];
    $server->command("/AWAY $daway_text");
    $daway=1;
  }
}

sub unset_daway
{
  if($daway) {
    my (@servers) = Irssi::servers();
    my $server = $servers[0];
    $server->command("/AWAY");
    $daway=0;
  }
}

sub periodic
{
  my $daway_timeout=Irssi::settings_get_int('daway_timeout');
  my $idletime=get_idle_time();
  if($idletime > $daway_timeout && !$daway) {
    set_daway();
  }
  elsif($idletime < $daway_timeout && $daway) {
    unset_daway();
  }
}

sub getOS
{
  my $uname=`uname`;
  if($uname =~ "BSD") {
      return "/dev/tty"
  }
  else {
    return "/dev/"
  }
}

sub daway_help
{
  print("/set daway_timeout n to set the autoaway timeout in seconds");
  print("/set daway_reason to set the autoaway reason");
}