class GamePlay(object):
    
    def __init__(self):
        self.board = Board()
        self.current_turn = Turn(self)
        self.state = State(self.board)
        
    def is_current_turn(self, origin):
        return self.current_turn.origin == origin
        
    def make_move(self, move):
        for position_change in move:
            self.move_piece(position_change.from_loc, position_change.to_loc)
        
    def move_piece(self, from_loc, to_loc):
        self.current_turn.handle_movement(from_loc, to_loc)
        
        if self.current_turn.is_over():
            self.current_turn.handle_jumps()
            self.king_piece_if_necessary(to_loc)
            self.current_turn = Turn(self, self.current_turn.origin)
            self.pass_if_needed()
                
    def pass_if_needed(self):
        if len(OriginMoves(self.board, self.current_turn.origin).get_moves()) == 0:
            self.current_turn = Turn(self, self.current_turn.origin)
            if len(OriginMoves(self.board, self.current_turn.origin).get_moves()) == 0:
                self.state.set_draw()
            
    def king_piece_if_necessary(self, king_loc):
        piece = self.board.get_piece(king_loc[0], king_loc[1])
        piece.set_king(self._should_piece_be_king(piece, king_loc[0]))
        
    def get_piece(self, row, col):
        return self.board.get_piece(row, col)
    
    def _should_piece_be_king(self, piece, row):
        if piece.is_king():
            return True
        if piece.is_from_top() and row == self.board.DEFAULT_HEIGHT - 1:
            return True
        if piece.is_from_bottom() and row == 0:
            return True
        return False
    
    def set_piece(self, row, col, piece):
        if self.board.invalid_position(row, col):
            return
        self.state.update_state_for_insertion(row, col, piece)
        self.board.set_piece(row, col, piece)
    
    def is_game_over(self):
        return self.state.is_game_over()
    
    def get_score(self, origin):
        return self.state.get_score(origin)
 def move_piece(self, from_loc, to_loc):
     self.current_turn.handle_movement(from_loc, to_loc)
     
     if self.current_turn.is_over():
         self.current_turn.handle_jumps()
         self.king_piece_if_necessary(to_loc)
         self.current_turn = Turn(self, self.current_turn.origin)
         self.pass_if_needed()
 def pass_if_needed(self):
     if len(OriginMoves(self.board, self.current_turn.origin).get_moves()) == 0:
         self.current_turn = Turn(self, self.current_turn.origin)
         if len(OriginMoves(self.board, self.current_turn.origin).get_moves()) == 0:
             self.state.set_draw()
 def __init__(self):
     self.board = Board()
     self.current_turn = Turn(self)
     self.state = State(self.board)