#waarschuw toon|verwijder|wislijst <tijdstip> <bericht>
use utf8;
use Date::Format;
sub waarschuw
{
    my ($msg, $dbh) = @_, my ($server, $nick, $datum, $tijd, $bericht, $result, @result, $return, @results);
    ($server, $nick, $tijd, $bericht) = split(/ /, $msg, 4);

    if ($tijd eq 'toon')
    {
        @results = mysqlselect($dbh, sprintf('SELECT * FROM `waarschuw` WHERE server=%s AND nick=%s ORDER BY `wanneer`, `id`'
                                            ,$dbh->quote($server)
                                            ,$dbh->quote($nick)
                                            )
                              );
        foreach$result(@results)
        {
            $result->{wanneer} =~ s/^\d{4}-(\d{2})-(\d{2}) (\d{2}:\d{2}):\d{2}$/$2-$1\@$3/;
            $result->{wanneer} =~ s/(^|[^:\d])0+/$1/g;
            $return .= $result->{wanneer}.' '.$result->{bericht}."\n";
        }
        return $return eq '' ? "Geen berichten voor $nick." : $return."Je kunt deze berichten verwijderen met: waarschuw verwijder <tijd> <bericht>\n";
    }
    elsif ($tijd eq 'verwijder')
    {
        ($tijd, $bericht) = split(/ /, $bericht, 2);
        ($datum, $tijd) = parsedatum($tijd);
        if ($datum eq time2str('%Y-%m-%d', time) && $tijd eq time2str('%H:%M:%S', time))
        { return "Invoer is onduidelijk. Zie: help waarschuw"; }
        if ($bericht eq '')
        { return "Invoer is onduidelijk. Zie: help waarschuw"; }

        #UNIQUE zorgt dat bericht maar 1x voorkomt
        ($result) = mysqlselect($dbh, sprintf('SELECT id FROM `waarschuw` WHERE server=%s AND nick=%s AND wanneer=%s AND bericht=%s'
                                             ,$dbh->quote($server)
                                             ,$dbh->quote($nick)
                                             ,$dbh->quote("$datum $tijd")
                                             ,$dbh->quote($bericht)
                                             )
                               );
        if (!defined($result))
        { return "Bericht bestaat niet."; }
        else
        {
            mysqldo($dbh, "DELETE FROM `waarschuw` WHERE `id`=".$dbh->quote($result->{id}));
            return "Bericht verwijderd.";
        }
    }
    elsif ($tijd eq 'wislijst')
    {
        mysqldo($dbh, sprintf('DELETE FROM `waarschuw` WHERE server=%s AND nick=%s'
                             ,$dbh->quote($server)
                             ,$dbh->quote($nick)
                             )
               );
        return "Lijst gewist.";
    }
    elsif ($tijd =~ m/^(([a-z]{3,6}dag|\d{1,2}-\d{1,2})@)?(\d{1,2})[\.:](\d\d)$|^(\+(\d{1,2})[\.:](\d\d))$/i)
    {
        ($datum, $tijd) = parsedatum($tijd);
        if ($datum eq time2str('%Y-%m-%d', time) && $tijd eq time2str('%H:%M:00', time))
        { return "Invoer is onduidelijk. Zie: help waarschuw"; }
        if ($bericht eq '')
        { return "Invoer is onduidelijk. Zie: help waarschuw"; }

        #UNIQUE zorgt dat bericht maar 1x voorkomt
        mysqldo($dbh, sprintf('INSERT INTO waarschuw VALUES(0, %s, %s, %s, %s)'
                             ,$dbh->quote($server)
                             ,$dbh->quote($nick)
                             ,$dbh->quote("$datum $tijd")
                             ,$dbh->quote($bericht)
                             )
               );
        return "OK.";
    }
    else
    { return "Invoer is onduidelijk. Zie: help waarschuw"; }
}

#toont de waarschuwberichten
sub waarschuwcron
{
    my ($server, %servers, $dbh, @results, $result, @ids);

    #init
    foreach$server(Irssi::servers())
    { $servers{$server->{tag}} = $server; }
    $dbh = mysqlconnect();

    #toon berichten
    @results = mysqlselect($dbh, "SELECT * FROM `waarschuw` WHERE `wanneer`<=NOW() ORDER BY `wanneer`, `id`");
    foreach$result(@results)
    { output(''.$result->{bericht}.'', $servers{$result->{server}}, $result->{nick}, 'unix'); push(@ids, $result->{id}); }

    #verwijderen en afsluiten
    mysqldo($dbh, "DELETE FROM `waarschuw` WHERE `id` IN(".join(",", @ids).")") if (@ids);
    $dbh->disconnect();
}

sub waarschuw_help
{
    my $return;
    $return  = "Toon berichten op een later tijdstip: waarschuw toon|verwijder|wislijst <tijdstip> <bericht>\n";
    $return .= "Bv.: waarschuw toon -> toon de lijst met alle berichten\n";
    $return .= "Bv.: waarschuw 15:00 testbericht -> zeg 'testbericht' om 15:00\n";
    $return .= "Bv.: waarschuw +0:15 kwartiertje voorbij -> zeg 'kwartiertje voorbij' over 15 minuten\n";
    $return .= "Bv.: waarschuw verwijder 13-7\@15:00 testbericht -> verwijder dit bericht\n";
    $return .= "Bv.: waarschuw wislijst -> verwijder alle berichten\n";
    return $return;
}

1;
