#!/usr/bin/env perl

use strict;
use warnings;

$| ++;

use Vulcan::OptConf;
use Cronos::Policy;

$Vulcan::OptConf::THIS = 'cronos';
$Vulcan::OptConf::ARGC = 1;

=head1 SYNOPSIS

 $0 name [--begin date] [--days number] [--zone timezone] [--level number]

=cut
my $today = DateTime->now()->ymd();
my %o = Vulcan::OptConf->load()
    ->get( qw( begin=s zone=s level=i days=s ) )->dump();

my $zone = DateTime::TimeZone->new( name => $o{zone} || 'local' );
my $begin = Cronos->epoch( $o{begin} || $today, $zone ) - Cronos::DAY;
my $end = Cronos::DAY * ( $o{days} || 7 ) + $begin;
my $policy = Cronos::Policy->new( "$o{data}/$ARGV[0]" )->set( $begin, $end );

my $null = { item => Cronos::NULL };
my %list = map { %$_ }
my @list = map { { $policy->list( $_ ) } } 1 .. ( $o{level} || 3 );

for my $time ( sort { $a <=> $b } keys %list )
{
    my $dt = DateTime->from_epoch( epoch => $time, time_zone => $zone );
    printf " %s %02d:%02d\n%s", map { $dt->$_ } qw( day_abbr hour minute ymd );
    map { printf " %15s", $_->{item} } map { $_->{$time} || $null } @list;
    print "\n";
}
exit 0;
