#!/usr/bin/perl

use strict;
use CGI::Carp qw(fatalsToBrowser);

use FindBin;
use Archive::Zip qw(:ERROR_CODES);
use CGI qw(:standard);
use ExtUtils::Manifest qw(maniread);
use File::Temp qw(tempfile);

my @l = localtime;
my $date = sprintf '%04d%02d%02d', $l[5]+1900, $l[4]+1, $l[3];

chdir "$FindBin::RealBin/.." or die "Can't chdir to bbbike root dir: $!";
my $manifest = maniread('MANIFEST');

my @datafiles;
for my $file (sort keys %$manifest) {
    push @datafiles, $file if $file =~ m{^data};
}

my $zip = Archive::Zip->new;
for my $datafile (@datafiles) {
    $zip->addFile($datafile);
}
my(undef, $filename) = tempfile(SUFFIX => ".zip",
				UNLINK => 1);
if ($zip->writeToFileNamed($filename) != AZ_OK) {
    die q{Can't write zip file $filename};
}

print header(-Content_Type => 'application/zip',
	     -Content_Disposition => "attachment; filename=bbbike_data_$date.zip",
	     -Content_Length => -s $filename,
	    );
open my $fh, $filename or die "Can't open $filename: $!";
binmode $fh;
seek $fh, 0, 0;
local $/ = \8192;
print <$fh>;