#!/opt/perl/bin/perl
use strict;
use Glib;
use Gtk2 -init;
use Games::Go::SimpleBoard;
use Gtk2::GoBoard;
use Games::Go::SGF::Grove;

sub read_sgf {
   my ($file) = @_;

   open my $sgff, $file or die "$!";

   my $c = do { local $/; <$sgff> };

   my $sgp = Games::Go::SGF::Grove::Parser->new;
   my $tree = $sgp->parse ($c);

   use Data::Dumper;
   print "TREE:".Data::Dumper::Dumper ([$tree])."\n";

   $tree
}

my $tree = read_sgf $ARGV[0];

my $w = Gtk2::Window->new;

$w->add (my $vb = Gtk2::VBox->new);

$vb->pack_start (my $hb = Gtk2::HBox->new, 0, 1, 0);
$vb->pack_start (my $brd = Gtk2::GoBoard->new (19), 1, 1, 3);

$hb->pack_start (my $nb = Gtk2::Button->new_with_label ("next"), 1, 1, 0);

my $chlds = shift @{$tree->[0]->[0]->{children}};
my $aw = $tree->[0]->[0]->{AW};
my $ab = $tree->[0]->[0]->{AW};

my @upds;
$nb->signal_connect (clicked => sub {
   my $cur = shift @$chlds;
   my $sbrd = Games::Go::SimpleBoard->new (19);

   if ($cur->{W}) {
      warn "WHITE $cur->{W}->[0] $cur->{W}->[1]\n";
      push @upds, [$cur->{W}->[0], $cur->{W}->[1], -1, MARK_W|MARK_MOVE];
   } elsif ($cur->{B}) {
      warn "BLACK $cur->{B}->[0], $cur->{B}->[1]\n";
      push @upds, [$cur->{B}->[0], $cur->{B}->[1], -1, MARK_B|MARK_MOVE];
   }
   $sbrd->update ([@upds]);
   $brd->set_board ($sbrd);
});

$w->set_default_size (600, 800);

$w->show_all;
$brd->show_all;

Gtk2->main;
