#!/usr/bin/perl -w -T
use strict;

use CGI qw(param);

delete @ENV{"PATH"};

my $numboxes = 5;
my %games;
my %gamelinks;

sub addgame {
    my $game = shift;
    my $user = shift;
    if ($games{$game}) {
        $games{$game}->[@{$games{$game}}]=$user;
    }
    else {
        $games{$game}=[$user];
    }
}

sub printunique {
    my $user = shift;
    my $game;
    print "$user owns unique games:<br>";
    foreach $game (sort keys %gamelinks) {
        my @owners = @{$games{$game}};
        if ((@owners==1)&&($owners[0] eq $user)) {
            print "$gamelinks{$game}<br>";
        }
    }    
}

if (param("data")) {
  my $arg;
  foreach $arg (param()) {
    if ($arg=~/(^id\d)/) {
      if (param($arg)=~/([\w ]+)/) {
	my $user = $1;
	my $line;
	open(COLLECTION,"/usr/bin/wget -q -O - \"http://www.boardgamegeek.com/viewcollection.php3?username=$user&dir=&orderby=&startletter=&own=1&rated=both&comment=both&trade=both&want=both&rating=\"|") or die "Can't get $user"."'s collection!";
	while ($line=<COLLECTION>) {
	  if ($line=~/(<A href="\/game\/\d+"><b>.*<\/b><\/A>)/i) {
	    my $game = $1;
	    $game =~s/<A href="/<A href="http:\/\/www.boardgamegeek.com/;
	    $game =~s/<\/?b>//;
	    if ($line=~/<A href="\/game\/\d+"><b>(.*)<\/b><\/A>/) {
	      my $gamename = $1;
	      addgame($gamename,$user);
	      $gamelinks{$gamename}=$game;
	    }
	  }
	}
	close(COLLECTION);
      }
    }
  }
  print "Content-type: text/html\r\n\r\n<html><head></head><body>";
  foreach $arg (param()) {
    if ($arg=~/(^id\d)/) {
      if (param("unique$arg")) {
	if (param($arg)=~/([\w ]+)/) {
	  printunique($1);
	}
      }
    }
  }
  if (param("collection") eq "on") {
    my $game;
    print "Unified collection:<br>";
    foreach $game (sort keys %games) {
      my @owners = @{$games{$game}};
      print "$gamelinks{$game} [";
      print join(",",@owners);
      print "]<br>";
    }
  }
  print "</body></html>";
}
else {
  if (param("numboxes")=~/(\d+)/) {
    $numboxes=$1;
  }

  print "Content-type: text/html\r\n\r\n<html><head></head><body>";
  print "<FORM action=\"test.pl\" method=\"get\">";
  print "<table>";
  print "<tr><td>BoardGameGeek ID</td><td>Show unique games?</td>";
  my $i;
  for ($i=0;$i<$numboxes;$i++) {
    print "<tr>";
    print "<td>";
    if (param("id$i")) {
      my $olddata = param("id$i");
      print "<INPUT type=\"text\" name=\"id$i\" value=\"$olddata\">";
    }
    else {
      print "<INPUT type=\"text\" name=\"id$i\">";
    }
    print "</td>";
    print "<td>";
    if (param("uniqueid$i")) {
      print "<INPUT type=\"checkbox\" name=\"uniqueid$i\" checked=\"on\">";
    }
    else {
      print "<INPUT type=\"checkbox\" name=\"uniqueid$i\">";
    }
    print "</td>";
    print "</tr>";
  }
  print "</table>";
  print "<LABEL for=\"collection\">Show unified collection?</LABEL>";
  print "<INPUT type=\"checkbox\" name=\"collection\" checked=\"on\"><br>";
  print "<LABEL for=\"numboxes\">Change number of boxes?</LABEL>";
  print "<INPUT type=\"text\" name=\"numboxes\" size=\"2\" value=\"$numboxes\"><br>";
  print "<INPUT type=\"submit\" name=\"data\" value=\"Submit\"><INPUT type=\"reset\">";
  print "<INPUT type=\"submit\" name=\"boxes\"value=\"Change box number\">";
  print "</FORM>";
  print "</body></html>";
}
