#!/usr/bin/perl

use Date::Format;
use Env;

#----------------
# SETTINGS
# ---------------
$MENINY_DAT="/usr/share/meniny/meniny.dat";

$ALERT_FILE="$HOME/.meniny_alert";
$DAYS_AHEAD=8;

#-------------------
# CODE
#-------------------


open DATA, $MENINY_DAT or die $!;

my @data=<DATA>;
close DATA;

$lt=time2str("%d %m",time);
#$lt="28 02";
$day=time2str("%d",time);
$month=time2str("%m",time);

$start=0;
for (@data){
    if(/$lt/)
    {
        last;
    }
    $start++;
}
$_=@data[$start];
@dnes=split;
$year=time2str("%Y",time);
if(($year) %4 == 0 && (($year) %100 != 0 || ($year) %400 == 0) && $day!=28 && $month!=2)
{
    $year=0;
}
else{
    $year=1;
}
$_=@data[($start+1)%@data];
@zajtra=split;

$tx=time2str("%w",time);

# fixes leading zero when day < 10
$day=sprintf("%d",$day);
@DoW=qw(pondelok utorok streda štvrtok piatok sobota nedeľa);
@MoY=qw(januára februára marca apríla mája júna júla augusta septembra októbra novembra decembra);

print "Dnes je @DoW[$tx-1] $day. @MoY[$month-1], meniny má @dnes[2..@dnes], zajtra @zajtra[2..@zajtra]\n";

open ALERTS, $ALERT_FILE or exit 0;

my @alerts=<ALERTS>;
close ALERTS;

for($i=0;$i<$DAYS_AHEAD;$i++)
{
    $lt=time2str("%d %m",time+86400*$i);

    for($j=0;$j<@alerts;$j++)
    {
        $_=@alerts[$j];
        @line=split;
        if(@line>1) # date alert
        {
            $_=@data[$start+$i];
            if(/@line[0] @line[1]/)
            {
                print "@line[2..@line] o " ,$i, " dní\n";
            }
        }
        else{ # name alert
            $_=@data[$start+$i];
            if(/@line[0]/i)
            {
                print "@line[0] ma meniny o ",$i, " dní\n";
            }
        }
    }
}
