#!/usr/local/bin/perl  -w

use strict;

do 'config.pl';

sub load_division ($);
sub Main ();

Main;

sub Main () {
  my $divfn = shift @::ARGV;
  my $div = uc $divfn; $div =~ s/\.T$//;
  open(PIPE, "|tee $div-tuff.txt") && select PIPE;
  load_division $divfn;
  close PIPE;
  }

sub load_division ($) {
  my $fn = shift;

  open(DIV, "<$fn") || die "Can't open $fn: $!\n";
  my $number = 0;
  my @active = ();
  my @players;

  while (<DIV>) {
    s/\s*#.*//;
    next unless /\S/;
    $number++;
    next if /No Player/;

    my ($name, $rating, $opps, $scores) = /^(\D+[^\s\d])\s+(\d+)\s+(\d[\d\s]*\d)\s*;\s*([-\d][-\d\s]*\d)\s*(?:;.*)?$/;
    die "Can't parse: $_\n" unless defined $scores;
    $name =~ s/^([^,]+), *(.*)$/$2 $1/;
    $players[$number] = {
      name => $name,
      rating => $rating,
      opps => [split(/\s+/, $opps)],
      scores => [split(/\s+/, $scores)],
      };
    push(@active, $number);
    }
  close(DIV);

  my @data;
  my $longest = 1;
  for my $meid (@active) {
    my $me = $players[$meid];
#   print "$div-$meid: $me->{name}\n";
    my $oppsp = $me->{opps};
    my $scoresp = $me->{scores};
    my @losses;
    for my $r (0..$#$oppsp) {
      my $oppid = $oppsp->[$r];
      next unless defined $oppid;
      my $opp = $players[$oppid];
      my $ms = $scoresp->[$r];
      my $os = $opp->{scores}[$r];
      if (defined $os) {
        if ($ms < $os) {
	  push(@losses, $os-$ms);
          }
        }
      }
    next if @losses < 6;
    (@losses) = sort { $a <=> $b } @losses;
    my $tuffness = 0;
    splice(@losses, 6);
    for my $loss (@losses) { $tuffness += $loss; }
    push(@data, [$tuffness, $me->{'name'}, \@losses]);
    $longest = length($me->{'name'}) if $longest < length($me->{'name'});
    }

  for my $data (sort {
    $a->[0] <=> $b->[0]
    || $a->[2][0] <=> $b->[2][0]
    || $a->[2][1] <=> $b->[2][1]
    || $a->[2][2] <=> $b->[2][2]
    || $a->[2][3] <=> $b->[2][3]
    || $a->[2][4] <=> $b->[2][4]
    || $a->[2][5] <=> $b->[2][5]
    } @data) {
    printf "%4d %-$longest.${longest}s %s\n",
      $data->[0], $data->[1], "@{$data->[2]}";
    }

  }

