use Irssi;

my $clr = "\\[0m";
my @fg = ("\\[0m\\[30m", "\\[0m\\[31m", "\\[0m\\[32m", "\\[0m\\[33m", "\\[0m\\[34m", "\\[0m\\[35m", "\\[0m\\[36m", "\\[0m\\[37m", "\\[1m\\[30m", "\\[1m\\[31m", "\\[1m\\[32m", "\\[1m\\[33m", "\\[1m\\[34m", "\\[1m\\[35m", "\\[1m\\[36m", "\\[1m\\[37m");
my @bg = ("\\[40m", "\\[41m", "\\[42m", "\\[43m", "\\[44m", "\\[45m", "\\[46m", "\\[47m");
my $fgidx = 7;
my $bgidx = 4;
my $yn = 0;
my $vague = 0;
my $yneato = "\(\\[1m\\[37m\\[44mY\\[0m/n\)";

my @buttons = (
    [qw/YES NO/],
    [qw/PROBABLY MAYBE/],
    [qw/HI BYE/],
    [qw/:) :(/],
    [qw/:D D:/],
    [qw/HUGS (x_X)Q-('.'Q-)/],
    [('8==e', '( . v . )')],
);

$yesnoby = "$clr$fg[$fgidx]$bg[$bgidx] YES $clr / no ";
$yesnobn = "$clr yes / $fg[$fgidx]$bg[$bgidx] NO $clr";
$yesnobp = "$clr$fg[$fgidx]$bg[$bgidx] PROBABLY $clr / maybe ";
$yesnobm = "$clr probably / $fg[$fgidx]$bg[$bgidx] MAYBE $clr";
$yesnostr = "$yesnoby";
sub ynsetprompts {
    my ($wordA, $wordB) = @{@buttons[$vague]};
    my $phraseA = sprintf("$clr$fg[$fgidx] $bg[$bgidx] %s $clr / %s ", $wordA, $wordB);
    my $phraseB = sprintf("$clr %s / $fg[$fgidx] $bg[$bgidx] %s $clr", $wordA, $wordB);
    if ($yn == 0) {
        $yesnostr = $phraseA;
    } else {
        $yesnostr = $phraseB;
    }
}
sub yntoggle
{
    my ($data, $server, $witem) = @_;
    if ($value == 0)
    {
        if ($yn == 0) 
        {
            $yn = 1;
            $yesnostr = "$yesnobn";
        }
        else 
        {
            $yn = 0;
            $yesnostr = "$yesnoby";
        }
    }
    else
    {
        if ($yn == 0) 
        {
            $yn = 1;
            $yesnostr = "$yesnobp";
        }
        else 
        {
            $yn = 0;
            $yesnostr = "$yesnobm";
        }
    }
    ynsetprompts;
    if  ($witem)
    {
        $witem->print("Current Default: $yesnostr");
    }
    else
    {
        Irssi::print("Current Default: $yesnostr");
    }
}
sub yntogglevague {
    my ($data, $server, $witem) = @_;
    $vague = ($vague + 1) % @buttons;
    ynsetprompts();
    if ($witem) {
        $witem->print("Current Default: $yesnostr");
    } else {
        Irssi::print("Current Default: $yesnostr");
    }
}
sub yncyclefg
{
    my ($data, $server, $witem) = @_;
    $fgidx++;
    if ($fgidx > 15)
    {
        $fgidx = 0;
    }
    ynsetprompts;
    if  ($witem)
    {
        $witem->print("Current Default: $yesnostr");
    }
    else
    {
        Irssi::print("Current Default: $yesnostr");
    }
}
sub yncyclebg {
    my ($data, $server, $witem) = @_;
    $bgidx++;
    if ($bgidx > 7) {
        $bgidx = 0;
    }
    ynsetprompts;
    if  ($witem) {
        $witem->print("Current Default: $yesnostr");
    }
    else
    {
        Irssi::print("Current Default: $yesnostr");
    }
}
sub ynsay {
    my ($data, $server, $witem) = @_;
    return unless $witem;
    return unless $server;
    return unless ($witem->{active}->{type} ne 'CHANNEL');
    $witem->command('say '.$data.'  '.$yesnostr);
}
sub ynecho {
    my ($format) = @_;
    Irssi::print("$format");
}
sub ynmenu {
    my ($data, $server, $witem) = @_;
    if ($witem) {
        Irssi::print("YESNOBARS $VERSION                      -vcx[hvk]");
        Irssi::print("");
        Irssi::print("SPECIAL HOTKEYS:");
        Irssi::print("CTRL-N = toggle yes/no for default answer");
        Irssi::print("CTRL-D = toggle VAGUE MODE: yes/no vs probably/maybe");
        Irssi::print("CTRL-F = cycle foreground color");
        Irssi::print("CTRL-G = cycle background color");
        Irssi::print("");
        Irssi::print("/ynmenu                      - display this menu");
        Irssi::print("/ynsay     <prompt text> - to public channel");
    } else {
        ynecho("YESNOBARS $VERSION                             -vnc[hvk]");
        ynecho("");
        ynecho("SPECIAL HOTKEYS:");
        ynecho("CTRL-N = toggle yes/no for default answer");
        ynecho("CTRL-D = toggle VAGUE MODE: yes/no vs probably/maybe");
        ynecho("CTRL-F = cycle foreground color");
        ynecho("CTRL-G = cycle background color");
        ynecho("");
        ynecho("/ynmenu                      - display this menu");
        ynecho("/ynsay     <prompt text> - to public channel");
    }
}
ynsetprompts;
ynmenu();
ynecho("Current Default: $yesnostr (hit CTRL-N to toggle)");
Irssi::command('bind ^N command yntoggle');
Irssi::command('bind ^D command yntogglevague');
Irssi::command('bind ^F command yncyclefg');
Irssi::command('bind ^G command yncyclebg');
Irssi::command_bind('yntoggle', 'yntoggle');
Irssi::command_bind('yntogglevague', 'yntogglevague');
Irssi::command_bind('yncyclefg', 'yncyclefg');
Irssi::command_bind('yncyclebg', 'yncyclebg');
Irssi::command_bind('ynmenu', 'ynmenu');
Irssi::command_bind('ynsay', 'ynsay');
Irssi::command_set_options('ynsay', 'full');
Irssi::command_bind('ynmsg', 'ynmsg');
Irssi::command_bind('ynnotice', 'ynnotice');
Irssi::command_bind('ynkick', 'ynkick');
