# This is a widget that handles a go game
# It needs a goban object, and handles it from beginning to end

import goban
import gtk
import lib.options


class GoGame(gtk.HBox):
    """
    This class draws a board and some information about the game (turn, captures, etc).
    It also handles moves and other operations on the goban.
    """

    _img_res = None

    def __init__(self, goban):
        self.HBox.__init__(self)

        if GoGame._img_res is None:
            GoGame._img_res = _build_img_res()
        
        self.goban = goban

        self._init_widgets()


    def _init_widgets(self):
        self.board_area = gtk.DrawingArea()

        info_box = gtk.VBox()
        info_rows = [gtk.VBox()] * 3
        to_move_label = gtk.Label('To Move:')
        black_cap_label = gtk.Label('Black Captures:')
        white_cap_label = gtk.Label('White Captures:')

        self.to_move_value = gtk.Label()
        self.black_cap_value = gtk.Label()
        self.white_cap_value = gtk.Label()

        info_rows[0].pack_start(to_move_label)
        info_rows[1].pack_start(black_cap_label)
        info_rows[2].pack_start(white_cap_label)
        info_rows[0].pack_end(self.to_move_value)
        info_rows[1].pack_end(self.black_cap_value)
        info_rows[2].pack_end(self.white_cap_value)

        for row in info_rows:
            info_box.pack_start(row)

        self.pass_button = gtk.Button('Pass')
        self.resign_button = gtk.Button('Resign')

        info_box.pack_end(self.pass_button)
        info_box.pack_end(self.resign_button)

        self.pack_start(self.board_area)
        self.pack_end(info_box)


    def _draw_board(self):
        gc = self.board_area.get_style().fg_gc[gtk.STATE_NORMAL]
        
        # gtk.gdk.gdk_pixbuf_scale_simple(img, new_width, new_height, GDK_INTERP_BILINEAR)

        
     
        
# pixmap.draw_pixbuf(None, pixbuf, 0, 0, x, y, -1, -1, gtk.gdk.RGB_DITHER_NONE, 0, 0)



def _magnitude(vector):
    x,y = vector
    return math.sqrt(x*x + y*y)


def _build_img_res():
    ret = {}
    
    triangle = _load_png('go_t.png')
    
    ret['w'] = _load_png('go_w.png')
    ret['wT'] = _load_png('go_w.png')
    # ret['wT'].blit(triangle, (0,0))
    ret['wH'] = _load_png('go_w.png', 128)

    ret['b'] = _load_png('go_b.png')
    ret['bT'] = _load_png('go_b.png')
    # ret['bT'].blit(triangle, (0,0))
    ret['bH'] = _load_png('go_b.png', 128)

    circle = _load_png('go_c.png')

    for d in ('u', 'd', 'l', 'r', 'm', 'dl', 'dr', 'ul', 'ur', 'h'):
        ret[d] = _load_png('go_' + d + '.png')
        ret[d + 'C'] = _load_png('go_' + d + '.png')
        # ret[d + 'C'].blit(circle, (0,0))
        
    return ret


def _load_png(name, alpha=None):
    """ Load image and return image object"""
    fullname = os.path.join('ui/res/', name)
    image = gtk.gdk.pixbuf_new_from_file(fullname)

    # if alpha is not None:
    #     image.set_alpha(alpha)

    return image