#!/usr/bin/perl

use strict;
use warnings;

use DateTime;
use DateTime::Set;
use Data::ICal::DateTime;
use DateTime::Event::Recurrence;
use LWP::Simple;
use Data::Dumper;
use DateTime::Event::ICal;

my $min = DateTime->now->truncate( to => 'year' )->subtract( years => 1 );
my $max = $min->clone->add( years => 3 );

my $weekends  = DateTime::Event::ICal->recur(
    freq    => 'weekly',
	byday   => [ "mo", "tu", "we", "th", "fr" ],
    dtstart => $min,
    dtend   => $max,
);

my $public_holiday_ical = Data::ICal->new(
	# Melbourne public holidays
	data => get('http://www.google.com/calendar/ical/5be1qvd6221bpn0jknc1210qe4%40group.calendar.google.com/public/basic.ics')
);
my @events = $public_holiday_ical->events();

my $public_holidays = DateTime::Set->from_datetimes(
	dates => [
		map { $_->start }
		# We only want those that are actually public holidays
		grep { $_->property('description')->[0]->value eq 'Public Holiday' }
		@events
	]
);

my $business_days = $weekends->complement( $public_holidays );

require DateTime::Format::ICal;
print "recurrence: ", 
    join( "\n", DateTime::Format::ICal->format_recurrence( $business_days ) ), 
    "\n";

my $iter = $business_days->iterator;
while ( my $dt = $iter->next ) {
    print $dt->ymd, "\n";
}

