import pygame
from .constants import RED, WHITE, BLUE, SQUARE_SIZE
from .board import Board

class Game:
	def __init__(self, win):
		self._init()
		self.win = win

	def update(self):
		self.board.draw(self.win)
		self.draw_valid_moves(self.valid_moves)
		pygame.display.update()

	def _init(self):
		self.selected = None
		self.board = Board()
		self.turn = RED
		self.valid_moves = {}

	def winner(self):
		return self.board.winner()

	def reset(self):
		self._init()

	def select(self, row, col):
		if self.selected:
			result = self._move(row, col)
			if not result:
				self.selected = None
				self.valid_moves = {}
				self.select(row, col)
		
		piece = self.board.get_piece(row, col)
		if piece != 0 and piece.color == self.turn:
			self.selected = piece
			self.valid_moves = self.board.get_valid_moves(piece)
			return True

		return False

	def _move(self, row, col):
		piece = self.board.get_piece(row, col)
		if self.selected and piece == 0 and (row, col) in self.valid_moves:
			self.board.move(self.selected, row, col)
			skipped = self.valid_moves[(row, col)]
			if skipped:
				self.board.remove(skipped)
			self.change_turn()
		else:
			return False

		return True

	def draw_valid_moves(self, moves):
		for move in moves:
			row, col = move
			pygame.draw.circle(self.win, BLUE, (col * SQUARE_SIZE + SQUARE_SIZE//2, row * SQUARE_SIZE + SQUARE_SIZE//2), 15)

	def change_turn(self):
		self.valid_moves = {}
		if self.turn == RED:
			self.turn = WHITE
		else:
			self.turn = RED
