#!/usr/bin/perl -n
#
# Process screen scrape of MapRun ScoreResults display for Street-O event

BEGIN {
    $runPaceMax = 10.0;		# max pace value used to assume running
    $cnt = 0;
    $title = "";
}

chomp $_;
# check for some special cases
if ($_ =~ m|^\s*$|) { next; }	# skip blank lines
if ($_ =~ m|^Columns|) { next; }	# skip misc label

# find title field and check course is PXAS
if ($_ =~ m|^CombinedResults_|) {
    $title = $_;
    $title =~ s| : .*$||;
    print "WARNING - can't process non-score course - $title\n";
    exit;
}
if ($_ =~ m|^ScoreResults_|) {
    $title = $_;
    $title =~ s| : .*$||;
    print "$title\n";
    next;
}

# split up results lines into fields (and swallow trailing white space)
@fields = split('\s*\t', "$_");
$num_fields = @fields;

# debug print
# $line = join("_", @fields); print "DBG: $line\t$num_fields\n";

# note number of fields in heading line, check & pad other lines if needed
if ($fields[0] =~ m|^Pos|) { $std_num_fields = @fields; }
else { if ($num_fields < $std_num_fields) { splice @fields, 7, 0, '', ''; } }

# split controls count:list into 2 elements in both heading & result values
if ($fields[2] =~ m|^Controls Visited|) {
    splice @fields, 2, 1, 'Count', 'Controls';
} else {
    @bits = split(':', $fields[2]);
    splice @fields, 2, 1, @bits;
}

# fix time value so hr:min:sec
if ($fields[5] =~ m|^\d+:\d+$|) {
    $fields[5] = "0:$fields[5]";
}

# extract M/F class from "AgeCat"
if ($fields[9] =~ m|^AgeCat Position|) {
    $fields[9] = "Class";
} elsif ($fields[9] =~ m|^$|) {
    $fields[9] = "X";
} else {
    $fields[9] = substr $fields[9], 0, 1;
}

# separate score and penalty
if ($fields[10] =~ m|^Points|) {
    splice @fields, 11, 0, 'Penalty'
} elsif ($fields[10] =~ m|^(\d+) \(incl\s*-\s*(\d+)\)|) {
    splice @fields, 10, 1, $1, "-$2";
} else {
    splice @fields, 11, 0, ''
}
$fields[10] =~ s| \(incl\s*-\s*\d+\)||;

# guess at which course from control count and pace
$type = "PW";
if ($fields[2] == "Count") { $type = "Type"; }
elsif ($fields[2] >= "18" && $fields[7] < $runPaceMax) { $type = "A"; }
elsif ($fields[2] >= "15" && $fields[7] < $runPaceMax) { $type = "B"; }
elsif ($fields[2] >= "12" && $fields[7] < $runPaceMax) { $type = "C"; }
elsif ($fields[2] == "*" && $fields[7] < $runPaceMax) { $type = "D"; }
splice @fields, 9, 0, $type;

# drop unwanted fields
splice @fields, 8,1;
splice @fields, 4,1;
splice @fields, 0,1;

$num_fields = @fields;
$line = join("\t", @fields);
print "$line\n";

