#!/usr/bin/perl

use Glib;
use Gtk2;

use KGS::Protocol;
use KGS::Listener::Debug;

use Audio::Data;
use Audio::Play;

use IO::Socket::INET;
use List::Util;
use Errno;

use Storable;
use Carp;

init Gtk2;

$SIG{QUIT} = sub { Carp::confess "SIGQUIT" };

our $HACK = 1; # do NEVER enable. ;)
our $DEBUG_EXPOSE = 0;

if ($HACK) {
   $KGS::debug = 1;
}

BEGIN {
   our $VERSION = "0.1";

   our $config;
   our $LIBDIR = ".";

   use KGS::Constants;

   for (qw(util.pl gtk.pl chat.pl superchat.pl sound.pl user.pl gamelist.pl userlist.pl challenge.pl
           game.pl room.pl roomlist.pl app.pl)) {
      require (KGS::Constants::findfile "KGS/kgsueme/$_");
      die if $@;
   }
}

if ($ENV{KGSUEME_DEBUG}) {
   my $window = new Gtk2::Window 'toplevel';
   my $chat = new superchat;

   $window->add ($chat);
   show_all $window;

   $chat->append_text ("A\n");
   $chat->append_text ("B\n");
   $chat->append_text ("C\n");
   $chat->append_text ("D\n");

   $chat->{full}->clear;

   $chat->append_text ("F\n");
   $chat->append_text ("G\n");

   main Gtk2;
   
   use KGS::Constants;

   for (19) {
      my $game = new game size => $_;
      
      if (1) {
         my $data = Storable::retrieve "board2.dat";
         while (my ($k, $v) = each %$data) {
            $game->{$k} = $v;
         }
         $game->event_update_tree;
      }

      if (0) {
         $game->{cur_board} = new KGS::Game::Board;
         my @x = (
               #MARK_B,
               #MARK_W,
               #MARK_GRAY_B | MARK_SMALL_W,
               #MARK_GRAY_W | MARK_SMALL_B,
               #MARK_W | MARK_TRIANGLE,
               0, 0, 0,
               );
         for $x (0..18) {
            for $y (0..18) {
               $game->{cur_board}{board}[$x][$y] =
                  $x[rand @x];
            }
         }

         $game->{cur_board}{board}[0][0] = MARK_B;
         $game->{cur_board}{board}[1][1] = MARK_GRAY_B | MARK_SMALL_W;
         $game->{cur_board}{board}[2][2] = MARK_W | MARK_TRIANGLE;
         $game->{cur_board}{board}[1][2] = MARK_B | MARK_LABEL;
         $game->{cur_board}{label}[1][2] = "198";
         $game->{cur_board}{board}[0][2] = MARK_W | MARK_LABEL;
         $game->{cur_board}{label}[0][2] = "AWA";
         $game->{board}->set_board ($game->{cur_board});
      }
      $game->{window}->show_all;
   }
}

our $app = new app;

main Gtk2;

$app->destroy;

Gtk2->main_iteration while Gtk2->events_pending;

1;


