package Xchat::XPI::Events;

use strict;
use warnings;

use Xchat qw<:all>;

use lib get_info 'xchatdir';
use Xchat::XPI;

use constant {
 DEFAULT_DELAY => 1000
};

our $VERSION = '0.04';

sub _delay_cb {
 my ($cb, @args) = @{$_[0]};
 $cb->(@args);
 return REMOVE;
};

sub delay {
 my $d = shift;
 $d = (defined $d) ? int $d : DEFAULT_DELAY;
 return hook_timer $d, \&_delay_cb, { data => \@_ };
}

sub _filter_cb {
 my @args      = @{$_[0]};
 my ($cb, $to) = @{$_[1]};
 if ($cb->(@args)) {
  emit_print $to, @args;
  return EAT_ALL;
 } else {
  return EAT_NONE;
 }
}

sub filter {
 my $from = shift;
 return hook_print $from, \&_filter_cb, { data => \@_ };
}

use base qw<Exporter>;

our @EXPORT         = ();
our %EXPORT_TAGS    = (
 'funcs'  => [ qw<delay filter> ],
 'consts' => [ qw<DEFAULT_DELAY> ]
);
our @EXPORT_OK      = map { @$_ } values %EXPORT_TAGS;
$EXPORT_TAGS{'all'} = [ @EXPORT_OK ];

1;
