#!/usr/bin/perl
use Time::Local;
require "../cgi-lib.pl";
ReadParse(*params);
my($dir) = '/home/dave/lego/top_sellers';
print "Content-Type: text/html\n\n";
print "<html><body>\n";

my($min) = 0;
if($params{min_time}) { $usrmint = $params{min_time}; }
if($params{max_time}) { $usrmaxt = $params{max_time}; }
# First, pull the raw data, and assign it in %data.
opendir(D,$dir);
my(@files) = readdir(D);
foreach my $f (@files) {
    next unless($f =~ /^top\.(\d+)$/);
    my($time) = $1;
    if(!$min || $time < $min) { $min = $time; }
    if($time > $max) { $max = $time; }
    my($timestamp) = tstamp($time);
    $valid_times{$timestamp}++;
    open(F,"$dir/$f");
    while(<F>) {
        chomp;
        my($pos,$id,$name) = split /\t/;
        $data{$id}{place}{$timestamp} = $pos;
        $data{$id}{name} = $name;
    }
    close F;
}

print "<form>\n";
print "<b>LEGO<font size=-1><sup>&reg;</sup></font> Top 25 Sellers List</b><br>\n";
print qq`
<table width=640><tr><td><hr><font size=-1>Data below is compiled from the LEGO website's published Top Sellers page, which
lists the top selling LEGO sets as purchased via the LEGO website. Information on
the LEGO website is usually updated on an hourly basis, with some minor anomolies.
We request (and try to enforce) that you view a maximum of a 2-week interval to
avoid unnecessary load on our server. This data is displayed without express
permission from the LEGO Company.</font></td></tr></table>`;
print "<table border=0>\n";
print "<tr><th>Highlight a set:</th><th>Start Date</th><th>End Date</th><th>Raw</th></tr>\n";
print "<tr><td>\n";
print "<select name=\"highlight\">\n";
print "<option value=\"\">No Highlight</option>\n";
foreach my $id (sort {$data{$a}{name} cmp $data{$b}{name}} (keys %data)) {
    print "<option value=\"$id\"";
    print " selected" if($params{highlight} eq $id);
    print " style=\"font-size:10;\"";
    print ">$id - $data{$id}{name}</option>\n";
}
print "</select>\n";

my(@nt1) = localtime($min);
my(@xt1) = localtime($max);
$ntt = timelocal(0,0,0,$nt1[3],$nt1[4],$nt1[5]);
$xtt = timelocal(59,59,23,$xt1[3],$xt1[4],$xt1[5]);
print "</td><td>\n";
print "<select name=\"min_time\">\n";
while($ntt <= $max) {
    print "<option value=\"".(($ntt<$min)?$min:$ntt)."\"";
    print " selected" if($params{min_time} eq $ntt);
    $test = $ntt+12*60*60;
    print ">".pdate($test)."</option>\n";
    $ntt += 24*60*60;
}
print "</select>\n";
print "</td><td>\n";
print "<select name=\"max_time\">\n";
while($xtt >= $min) {
    print "<option value=\"".(($xtt>$max)?$max:$xtt)."\"";
    print " selected" if($params{max_time} eq $xtt);
    $test = $xtt-12*60*60;
    print ">".pdate($test)."</option>\n";
    $xtt -= 24*60*60;
}
print "</select>\n";
print "</td><td>\n";
print "<input type=checkbox name=\"raw\" value=\"1\"".(($params{raw})?" checked":"").">\n";
print "</td><td>\n";

print "<input type=hidden name=\"view\" value=\"1\">\n";
print "<input type=submit value=\"View\">\n";
print "</td></tr>\n";
print "</table>\n";
print "</form>\n";
if($params{view}) {
    if(($params{max_time} - $params{min_time}) > (14*24*60*60)) {
	$params{min_time} = $params{max_time}-(14*24*60*60);
	@lt = localtime($params{min_time});
	$params{min_time} = timelocal(0,0,0,$lt[3],$lt[4],$lt[5]);
	if($params{min_time} < $min) { $params{min_time} = $min; }
    }
    print "<img src=\"tps3.cgi?";
    foreach('highlight','min_time','max_time','raw') {
	if(defined($params{$_})) { print "$_=$params{$_}&"; }
    }
    #widen if need be!
    my($days) = ($params{max_time}-$params{min_time})/(24*60*60);
    $width = int(42/$days);
    $width = 3 if($width<3);
    print "hscale=$width";
    print "\"><br>\n";
}
print "\n</body></html>";


sub pdate {
    my($t) = @_;
    my(@lt) = localtime($t);
    my $month = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")[$lt[4]];
    my $day = ("Sun","Mon","Tue","Wed","Thu","Fri","Sat")[$lt[6]];
    $lt[4]++;
    $lt[5]+=1900;
    return "$day, $month $lt[3] $lt[5]";
}

sub tstamp {
    my($time) = @_;
    my(@lt) = localtime($time);
    $lt[5]+=1900;
    $lt[4]++;
    return sprintf("%04d%02d%02d%02d",$lt[5],$lt[4],$lt[3],$lt[2]); #Don't care about minutes/seconds
}



