#!/usr/bin/perl
use Data::Dumper;
require "../pagelib.pl";
header();
init();
head();

@plist = sort { $players{$b}{games} <=> $players{$a}{games} ||
		$players{$b}{wins} <=> $players{$a}{wins} ||
		$players{$a}{losses} <=> $players{$b}{losses} ||
		$players{$a}{name} cmp $players{$b}{name} } (keys %players);
#print "USER_AGENT = $ENV{USER_AGENT}<br>\n";
print "<table border=1>\n";
print "<tr>\n";
print "<th>&nbsp;</th>\n";
print "<th>Name</th>\n";
print "<th>Date</th>\n";
print "<th>Location</th>\n";
print "<th>Tek Level</th>\n";
#style=\"layout-flow: vertical-ideographic;\"
print "<th>Winner</th>\n";
#print "<th>Teams</th>\n";
foreach my $player (@plist) {
    if($ENV{HTTP_USER_AGENT} =~ /microsoft|msie/i) {
	print "<th style=\"layout-flow: vertical-ideographic;\">$players{$player}{name}</th>\n";
#	print "<th style=\"writing-mode: tb-rl;\">$players{$player}{name}</th>\n";
    } else {
	print "<th><img src=\"/~ant/gdtest.pl?text=$players{$player}{name}\"></th>\n";
    }
}
print "</tr>\n";
$gid = 0;
foreach my $g (sort {$games{$a}{date} <=> $games{$b}{date}} (keys %games)) {
    $gid++;
    my($game) = $games{$g};
    print "<tr>\n";
    print "<th>$gid</th>\n";
    print "<td nowrap>$game->{name}</td>\n";
    print "<td nowrap>".trans_date($game->{date})."</td>\n";
    print "<td nowrap>$game->{loc}</td>\n";
    print "<td>$game->{tl}</td>\n";
    print "<td>$game->{winner}</td>\n";
    foreach my $player (@plist) {
	print "<td";
	if($game->{teams}{$game->{winner}}{$player}) {
	    if($game->{winner} eq "G") {
		print " bgcolor=#9090FF>$game->{winner}";
	    } else {
		print " bgcolor=#90C090>$game->{winner}";
	    }
	} else {
	    my($flag) = 0;
	    foreach my $t (keys %{$game->{teams}}) {
		if($game->{teams}{$t}{$player}) {
		    $flag = 1;
		    if($t eq "G") {
			print " bgcolor=#9090FF>$t";
		    } elsif($game->{winner} =~ /^(0|\s+|\-|\?)$/) {
			print ">$t";
		    } else {
			print " bgcolor=#FF9090>$t";
		    }
		}
	    }
	    if(!$flag) { print ">&nbsp;"; }
	}
	print "</td>\n";
    }
    print "</tr>\n";
}
print "<tr><th colspan=6 align=right>Total Games</th>";
foreach my $player (@plist) {
    print "<td>$players{$player}{games}</td>\n";
}
print "</tr>\n";
print "</tr>\n";
print "<tr><th colspan=6 align=right>Total Wins</th>";
foreach my $player (@plist) {
    print "<td>".sprintf("%d",$players{$player}{wins})."</td>\n";
}
print "</tr>\n";
print "<tr><th colspan=6 align=right>Total Losses</th>";
foreach my $player (@plist) {
    print "<td>".sprintf("%d",$players{$player}{losses})."</td>\n";
}
print "</tr>\n";
print "<tr><th colspan=6 align=right>Win Percentage</th>";
foreach my $player (@plist) {
    if($players{$player}{wins} || $players{$player}{losses}) {
	print "<td>".sprintf("%.1f",(100*($players{$player}{wins}/($players{$player}{wins}+$players{$player}{losses}))))."\%</td>\n";
    } else {
	print "<td>NA</td>\n";
    }
}
print "</tr>\n";

print "<tr><th colspan=6 align=right>\"Expected\" Wins</th>";
foreach my $player (@plist) {
    print "<td>".sprintf("%.2f",$players{$player}{expected_wins})."</td>\n";
}
print "</tr>\n";
print "<tr><th colspan=6 align=right>\"Expected\" Losses</th>";
foreach my $player (@plist) {
    print "<td>".sprintf("%.2f",$players{$player}{expected_losses})."</td>\n";
}
print "</tr>\n";
print "<tr><th colspan=6 align=right>\"Expected\" Win Percentage</th>";
foreach my $player (@plist) {
    if($players{$player}{expected_wins}) {
	print "<td>".sprintf("%.1f",(100*$players{$player}{expected_wins}/($players{$player}{expected_losses}+$players{$player}{expected_wins})))."\%</td>\n";
    } else {
	print "<td>NA</td>\n";
    }
}
print "</tr>\n";
print "<tr><th colspan=6 align=right>\% Expected</th>";
foreach my $player (@plist) {
    my($total_games) = $players{$player}{wins} + $players{$player}{losses};
    if(!$total_games) { print "<td>NA</td>\n"; next; }
    my($percent)  = $players{$player}{wins} / $total_games;
    my($expected) = $players{$player}{expected_wins} / $total_games;
    my($diff) = 100*($percent-$expected)/$expected;
    if($players{$player}{expected_wins} > $players{$player}{wins}) {
	print "<td bgcolor=FF9090>";
    } else {
	print "<td bgcolor=90C090>";
    }
    print sprintf("%.1f",$diff)."\%</td>\n";
}
print "</tr>\n";


print "</table>\n";
foot();

sub init {
    my $player_file = "players.txt";
    my $game_file = "games.txt";
    open(PF,$player_file);
    while(<PF>) {
	if(/^(\w+)\t+(.*\S)\s*$/) {
	    $players{$1}{name} = $2;
	}
    }
    close PF;
    open(GF,$game_file);
    while(<GF>) {
	next if(/^\#/);
	if(!@fields && /\|/) {
	    s/^\s+//;
	    @fields = map { s/\s+//g; $_ } (split /\|/);
	} elsif(/\|/) {
	    my @data = map { s/^\s+//; s/\s+$//; $_ } (split /\|/);
	    for(my $i=0;$i<@fields;$i++) {
		if($fields[$i] eq "teams") {
		    my(@teams) = split/;/,$data[$i];
		    my($num_teams) = scalar @teams;
		    if($data[$i] =~ /G/) { $num_teams--; }
		    if($num_teams < 2) { $num_teams = 2; } #always a 50/50 chance
		    foreach my $t (@teams) {
			if($t =~ /^([^:]+):(.*)$/) {
			    my $team = $1;
			    my @players = split /,/,$2;
			    foreach my $p (@players) {
				$games{$data[0]}{teams}{$team}{$p} = 1;
				$players{$p}{games}++;
				next if($team eq "G");
				if($games{$data[0]}{winner} !~ /^(0|\s+|\-|\?)$/) {
				    $players{$p}{expected_wins} += (1/$num_teams);
				    $players{$p}{expected_losses} += (($num_teams-1)/$num_teams);
				}
				if($games{$data[0]}{winner} eq $team) {
				    if($games{$data[0]}{winner} ne "G") {
					$players{$p}{wins}++;
				    }
				} elsif($games{$data[0]}{winner} !~ /^(0|\s+|\-|\?)$/) {
				    $players{$p}{losses}++;
				}
			    }
			}
		    }
		} else {
		    $games{$data[0]}{$fields[$i]} = $data[$i];
		}
	    }
	}
    }
    close GF;
}

sub trans_date {
    my($date) = @_;
    my($year,$mon,$day) = unpack("A4A2A2",$date);
    $mon--;
    $mon = ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec")[$mon];
    $day = int $day;
    if($day >= 4 && $day <= 20) { $day .= "th"; }
    elsif(substr($day,-1,1) eq "1") { $day .= "st"; }
    elsif(substr($day,-1,1) eq "2") { $day .= "nd"; }
    elsif(substr($day,-1,1) eq "3") { $day .= "rd"; }
    else {$day .= "th"; }
    return("$mon. $day $year");
}
