#!/usr/bin/perl
use strict;
use File::Find::Rule;
use File::Basename ;
use File::Path;
use Carp;

# we expect that you've generated the zone as .ics files into a
# directory called zoneinfo using Vzic
# http://dialspace.dial.pipex.com/prod/dialspace/town/pipexdsl/s/asbm26/vzic/

my @zones;
for my $infile (find( file => name => '*.ics', in => 'zoneinfo' )) {
    my $zone = $infile;
    $zone =~ s{^zoneinfo/}{};
    $zone =~ s{\.ics$}{};
    push @zones, $zone;
    my $module = "Data::ICal::TimeZone::Object::$zone";
    $module =~ s{/}{::}g;
    my $outfile = "lib/$module.pm";
    $outfile =~ s{::}{/}g;
    #print "$zone => $module => $outfile\n";
    mkpath [ dirname $outfile ];
    open my $out, '>',  $outfile or croak "open $outfile $!";
    open my $in, '<', $infile or croak "open $infile $1";
    print {$out} <<"END";
# this class is autogenerated.  use make_zones to regenerate
package $module;
use strict;
use base qw( Data::ICal::TimeZone::Object );

__PACKAGE__->new->_load( join '', <DATA> );

1;
__DATA__
END

    my @ics = <$in>;
    for (@ics) {
       s{^TZID:/myorganization.org/.*?/}{TZID:}; # fixup bizarro TZID
    }
    print {$out} @ics;
}

open my $fh, '>', 'lib/Data/ICal/TimeZone/List.pm' or die "can't open List.pm $!";
print {$fh} <<'END';
# this is autogenerated. use make_zones to regenerate
package Data::ICal::TimeZone::List;
use strict;
use base qw( Exporter );
our @EXPORT_OK = qw( zones );
sub zones {
    return (
END

print {$fh} map "        '$_',\n", sort @zones;

print {$fh} <<'END';
    );
}

1;
__END__
END
