#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use DateTime;
use DateTime::Format::ICal;
use Data::ICal;
use Data::ICal::Entry::Event;
use Digest::MD5 qw(md5_hex);
use LWP::Simple qw(get);
use XML::Simple;
use Text::vFile::asData;

my $url = "http://superpop.co.uk/events/ics-source/";
my $title = "gig guide";

my $xml = get( $url );
$xml =~ s/\n//; # pesky leading newline confused XML::Parser
my $events = XMLin(
    $xml, #;"foo.xml",
    KeyAttr    => [],
    ForceArray => ['event'],
   );

my $cal = Data::ICal->new;
$cal->add_properties(
    'X-WR-CALNAME' => $title,
   );

for my $date (@{ $events->{event} }) {
    #use YAML; print Dump $date;
    my ($y, $m, $d) = $date->{date} =~ m{(....)(..)(..)};
    my ($h, $min) = $date->{'start-time'} =~ m{(\d+)(?:[:.](\d+))?};
    $min ||= 0;
    $h += 12 if $date->{'start-time'} =~ 'pm';
    my $start_dt = DateTime->new( year => $y, month => $m, day => $d,
                                  hour => $h, minute => $min,
                                  time_zone => 'UTC' );
    #die scalar localtime $start_dt->epoch;
    my $start = DateTime::Format::ICal->format_datetime( $start_dt );
    my $event = Data::ICal::Entry::Event->new;
    $event->add_properties(
        summary     => $date->{summary},
        description => $date->{description},
        dtstart     => $start,
        uid         => md5_hex( $date->{summary} . $date->{description} . $start ),
    );
    $cal->add_entry( $event );
}

print CGI->header('text/calendar');
print $cal->as_string;
