use utf8;
use Date::Parse;
#FUNCTIONS
#kanaal binnengaan bij invite
sub furbie_invite
{
    my ($server, $channel, $nick) = @_;
    if ($server->{tag} eq 'ircnet' && ($channel eq '#snt' || $channel eq '#utwente'))
    { $server->command("/msg $nick Sorry, mag niet van Rienzilla."); }
    else
    { $server->command("/join $channel") if ($server); }
}

#blok gebruiker
sub furbie_blok
{
    my ($a, $b, @other) = @_; my ($server, $nick, $dbh, $result, $wait) = '';
    # Channel flood, ignore
    if ($other[2] =~ m#^&#)
    { return; }
    my %bericht = ('nogniet' => 'Gelieve niet te flooden, uit te schelden, doen alsof ik van jou ben, etc. Of: hoepel \'s op met je virus! Je bent 60 seconden geblokt.'
                  ,'bijna' => 'Niet flooden, uitschelden, doen alsof ik van jou ben, etc.! Of: hoepel \'s op met je virus! Laatste waarschuwing. Je bent 60 seconden geblokt.'
                  ,'ja' => 'Geblokt...');

    if (ref($a) eq 'Irssi::Irc::Server') #is server -> flood signaal
    { ($server, $nick) = ($a, $b); $wait = 30; }
    else                                 #geen server -> /f_blok commando
    { ($nick, $server) = ($a, $b); $wait = 0; }
    $nick =~ s/^\s*(.*?)\s*$/$1/;

    #haal gebruikersinfo op
    $dbh = mysqlconnect();
    ($result) = mysqlselect($dbh, sprintf('SELECT * FROM gebruiker WHERE server=%s AND nick=%s AND geblokt<>%s'
                                         ,$dbh->quote($server->{tag})
                                         ,$dbh->quote($nick)
                                         ,$dbh->quote('ja')
                                         )
                           );
    #niet-bestaande of al geblokte gebruiker -> negeren
    if (ref($result) ne 'HASH')
    { $dbh->disconnect(); return; }

    #nog niks doen als flood nog niet lang geleden is (30 seconden)
    if (str2time($result->{wanneer})+$wait > time)
    { $dbh->disconnect(); return; }

    #blokkering stapje opschuiven
    if ($result->{geblokt} eq 'nee') { $result->{geblokt} = 'nogniet'; }
    elsif ($result->{geblokt} eq 'nogniet') { $result->{geblokt} = 'bijna'; }
    elsif ($result->{geblokt} eq 'bijna') { $result->{geblokt} = 'ja'; }

    mysqldo($dbh, sprintf('UPDATE gebruiker SET geblokt=%s, wanneer=NOW() WHERE server=%s AND nick=%s'
                         ,$dbh->quote($result->{geblokt})
                         ,$dbh->quote($server->{tag})
                         ,$dbh->quote($nick)
                         )
           );
    output($bericht{$result->{geblokt}}, $server, $nick, undef);

    #waarschuw-berichten verwijderen
    if ($result->{geblokt} eq 'ja')
    {
        mysqldo($dbh, sprintf('DELETE FROM waarschuw WHERE server=%s AND nick=%s'
                             ,$dbh->quote($server->{tag})
                             ,$dbh->quote($nick)
                             )
               );
    }
    printf("Gebruiker %-24s op server %-9s geblokt, nieuwe status: '%s'"
          ,$nick
          ,$server->{tag}
          ,$result->{geblokt}
          );

    $dbh->disconnect();
}

#unblok gebruiker
sub furbie_unblok
{
    my ($nick, $server) = @_; my ($dbh, $result) = '';
    $nick =~ s/^\s*(.*?)\s*$/$1/;

    #haal gebruikersinfo op
    $dbh = mysqlconnect();
    ($result) = mysqlselect($dbh, sprintf('SELECT * FROM gebruiker WHERE server=%s AND nick=%s AND geblokt<>%s'
                                         ,$dbh->quote($server->{tag})
                                         ,$dbh->quote($nick)
                                         ,$dbh->quote('nee')
                                         )
                           );
    #niet-bestaande of nog nooti geblokte gebruiker -> negeren
    if (ref($result) ne 'HASH')
    { $dbh->disconnect(); return; }

    #blokkering stapje terugschuiven
    if ($result->{geblokt} eq 'ja') { $result->{geblokt} = 'bijna'; }
    elsif ($result->{geblokt} eq 'bijna') { $result->{geblokt} = 'nogniet'; }
    elsif ($result->{geblokt} eq 'nogniet') { $result->{geblokt} = 'nee'; }

    mysqldo($dbh, sprintf('UPDATE gebruiker SET geblokt=%s, wanneer=NOW() WHERE server=%s AND nick=%s'
                         ,$dbh->quote($result->{geblokt})
                         ,$dbh->quote($server->{tag})
                         ,$dbh->quote($nick)
                         )
           );

    printf("Gebruiker %-24s op server %-9s ge-unblokt, nieuwe status: '%s'"
          ,$nick
          ,$server->{tag}
          ,$result->{geblokt}
          );
    $dbh->disconnect();
}

#showblok
sub furbie_showblok
{
    my ($nick, $server) = @_; my ($dbh, $result, @results) = '';

    #haal gebruikersinfo op
    $dbh = mysqlconnect();
    @results = mysqlselect($dbh, sprintf('SELECT * FROM gebruiker WHERE server=%s %s AND geblokt<>%s ORDER BY geblokt,server,nick'
                                        ,$dbh->quote($server->{tag})
                                        ,$nick eq '' ? '' : "AND nick=".$dbh->quote($nick)
                                        ,$dbh->quote('nee')
                                        )
                          );
    if (!@results)
    { print "Geen mensen geblokkeerd..."; }
    else
    {
        foreach$result(@results)
        {
            printf('Gebruiker %-24s op server %-9s heeft status \'%s\''
                  ,$result->{nick}
                  ,$result->{server}
                  ,$result->{geblokt}
                  );
        }
    }
    $dbh->disconnect();
}

#ban gebruiker
sub furbie_ban
{
    my ($nick, $server) = @_; my ($dbh, $result) = '';
    $nick =~ s/^\s*(.*?)\s*$/$1/;

    #haal gebruikersinfo op
    $dbh = mysqlconnect();
    ($result) = mysqlselect($dbh, sprintf('SELECT * FROM gebruiker WHERE server=%s AND nick=%s AND geblokt<>%s'
                                         ,$dbh->quote($server->{tag})
                                         ,$dbh->quote($nick)
                                         ,$dbh->quote('ja')
                                         )
                           );
    #niet-bestaande of al geblokte gebruiker -> negeren
    if (ref($result) ne 'HASH')
    { $dbh->disconnect(); return; }

    #bannen
    mysqldo($dbh, sprintf('UPDATE gebruiker SET geblokt=%s, wanneer=NOW() WHERE server=%s AND nick=%s'
                         ,$dbh->quote('ja')
                         ,$dbh->quote($server->{tag})
                         ,$dbh->quote($nick)
                         )
           );
    output('Geblokt...', $server, $nick, undef);

    #waarschuw-berichten verwijderen
    if ($result->{geblokt} eq 'ja')
    {
        mysqldo($dbh, sprintf('DELETE FROM waarschuw WHERE server=%s AND nick=%s'
                             ,$dbh->quote($server->{tag})
                             ,$dbh->quote($nick)
                             )
               );
    }
    printf("Gebruiker %-24s op server %-9s geband, nieuwe status: 'ja'"
          ,$nick
          ,$server->{tag}
          );
    $dbh->disconnect();
}
#stuur een bericht
sub furbie_bericht
{
    my ($nick, $server) = @_; my ($dbh, $bericht, $result);

    ($nick, $bericht) = split(/ /, $nick, 2);
    $dbh = mysqlconnect();

    ($result) = mysqlselect($dbh, sprintf('SELECT * FROM gebruiker WHERE server=%s AND nick=%s'
                                         ,$dbh->quote($server->{tag})
                                         ,$dbh->quote($nick)
                                         )
                           );
    #niet-bestaande of al geblokte gebruiker -> negeren
    if (ref($result) ne 'HASH')
    { $dbh->disconnect(); return; }

    #bericht toevoegen
    mysqldo($dbh, sprintf('INSERT INTO bericht VALUES(0, %s, %s, %s)'
                         ,$dbh->quote($server->{tag})
                         ,$dbh->quote($nick)
                         ,$dbh->quote($bericht)
                         )
           );
    printf("Bericht toegevoegd voor %-24s: %s"
          ,$nick
          ,$bericht
          );
    $dbh->disconnect();
}

#showbericht
sub furbie_showbericht
{
    my ($nick, $server) = @_; my ($dbh, $result, @results) = '';

    #haal berichten op
    $dbh = mysqlconnect();
    @results = mysqlselect($dbh, 'SELECT * FROM bericht ORDER BY server,nick');

    if (!@results)
    { print "Geen berichten..."; }
    else
    {
        foreach$result(@results)
        {
            printf('Gebruiker %-24s (%4d) op server %-9s: %s'
            ,$result->{nick}
            ,$result->{id}
            ,$result->{server}
            ,$result->{bericht}
            );
        }
    }
    $dbh->disconnect();
}

#whois
sub furbie_whois
{
    my ($nick, $server) = @_; my ($dbh, $result, @results) = '';

    #haal info op
    $dbh = mysqlconnect();
    ($result) = mysqlselect($dbh, sprintf('SELECT * FROM gebruiker WHERE server=%s AND nick=%s'
                                         ,$dbh->quote($server->{tag})
                                         ,$dbh->quote($nick)
                                         )
                           );

    #niet-bestaande of al geblokte gebruiker -> negeren
    if (ref($result) ne 'HASH')
    { print "Gebruiker niet gevonden..."; }
    else
    {
        printf('Server: %-9s, Username: %-24s, Id: %4d, Datum, %s, Geblokt: %-7s, Wanneer: %s'
              ,$server->{tag}
              ,$result->{nick}
              ,$result->{id}
              ,$result->{datum}
              ,$result->{geblokt}
              ,$result->{wanneer}
              );
    }
    $dbh->disconnect();
}

1;
