$startFlight = $ARGV[0] || 1;
$endFlight = $ARGV[1] || 9999;

print "Logbook stats from flight $startFlight to $endFlight\n";

sub getFile ($) {
    my %data;
    my $fname = shift;
    open F,"<$fname";
    $_ = <F>;
    chomp;
    my @headers = split("\t", $_);
    while (<F>){
	chomp;
	my @fields = split("\t", $_);
	for my $i (0..$#fields){
	    $data{$fields[0]}{$headers[$i]} = $fields[$i];
	}
    }
    close F;
    \%data;
}

sub head {
    print "\n\n",join("\t",@_),"\n";
    foreach (@_){
	print "="x length($_),"\t";
    }
    print "\n";
}

sub hhmm ($){
    my $m = shift;
    my $hh = int($m/60);
    my $mm = $m - (60*$hh);
    $hh = " $hh" if $hh < 100;
    $hh = " $hh" if $hh < 10;
    $mm = "0$mm" if $mm < 10;
    "$hh:$mm";
}

my $flights = getFile("flights");
my $gliders = getFile("gliders");

my $last_serial = 0;
for my $f (values %$flights){
    my $serial = $f->{serial};
    my $time = $f->{hours}*60 + $f->{minutes};
    next if $serial < $startFlight or $serial > $endFlight;

    my $crew = $f->{crew};
    my $PICtime = $crew ne "P2" ? $time : 0;
    my $rego = $f->{rego};
    my $glider = $gliders->{$rego};
    my $type = $glider->{type};
    my $launch = $f->{launch};

    $totalFlights++;
    $totalTime+=$time;
    $totalTimePIC+=$PICtime;

    $byGlider{$rego}{flights}++;
    $byGlider{$rego}{time}+=$time;
    $byGlider{$rego}{timePIC}+=$PICtime;

    $byType{$type}{flights}++;
    $byType{$type}{time}+=$time;
    $byType{$type}{timePIC}+=$PICtime;

    $byCrew{$f->{crew}}{flights}++;
    $byCrew{$f->{crew}}{time}+=$time;

    $byLaunch{$launch}++;
}

head("Glider", "Flights", " Total", "   PIC");
for (sort {$byGlider{$b}{time} <=> $byGlider{$a}{time}} keys %byGlider){
    print $_,"\t",$byGlider{$_}{flights},"\t",
      hhmm($byGlider{$_}{time}),"\t",
      hhmm($byGlider{$_}{timePIC}),"\n";
}

head("Glider Type    ", "Flights", " Total", "   PIC", "Avg");
for (sort {$byType{$b}{time} <=> $byType{$a}{time}} keys %byType){
    my $avg = int($byType{$_}{time}/$byType{$_}{flights} + 0.5);
    print $_," "x(15-length($_)),"\t",$byType{$_}{flights},"\t",
      hhmm($byType{$_}{time}),"\t",
      hhmm($byType{$_}{timePIC}),"\t$avg\n";
}

head("Crew", "Flights", "  Time", "Avg");
for (sort keys %byCrew){
    my $avg = int($byCrew{$_}{time}/$byCrew{$_}{flights} + 0.5);
    print $_,"\t",$byCrew{$_}{flights},"\t",
      hhmm($byCrew{$_}{time}),"\t$avg\n";
}

head("Launch", "flights");
for (sort keys %byLaunch){
    print $_,"\t",$byLaunch{$_},"\n";
}

print "\nTotal flights: ",$totalFlights;
print "\nTotal Time   : ",hhmm($totalTime);
print "\nTotal PIC    : ",hhmm($totalTimePIC);
print "\n";
