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

# use the _zone_package method, kill the chicken
package Data::ICal::TimeZone::List;
$INC{'Data/ICal/TimeZone/List.pm'} = 1;
use base qw( Exporter );
our @EXPORT_OK = qw( zones );
sub zones {}

package main;

require Data::ICal::TimeZone;


# 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 $package = Data::ICal::TimeZone->_zone_package( $zone );
    my $outfile = "lib/$package.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 $package;
use strict;
use base qw( Data::ICal::TimeZone::Object );

my \$data = join '', <DATA>;
close DATA; # avoid leaking many many filehandles
__PACKAGE__->new->_load( \$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