from display_base import DisplayBase
from input_sensehat import InputSenseHat, Keys
from player_base import PlayerBase
from game_state import GameState
from game_token import GameToken
from display_sensehat import DisplaySenseHat
from ansi import Ansi

class PlayerSenseHat(PlayerBase):  # Renamed from PlayerConsole
    def __init__(self, player: GameToken):
        super().__init__(player)
        self._display = DisplaySenseHat()
        self._input = InputSenseHat()
        self._current_column = 0

    def play_turn(self) -> int:
        self._current_column = 0
        self._display.draw_token(self._current_column, -1, self._player)

        while True:
            key = self._input.read_key()
            
            if key == Keys.RIGHT and self._current_column > 0:
                self._display.draw_token(self._current_column, -1, GameToken.EMPTY)
                self._current_column -= 1
                self._display.draw_token(self._current_column, -1, self._player)
            
            elif key == Keys.LEFT and self._current_column < 6:
                self._display.draw_token(self._current_column, -1, GameToken.EMPTY)
                self._current_column += 1
                self._display.draw_token(self._current_column, -1, self._player)
            
            elif key == Keys.SELECT:  # Changed from ENTER
                self._display.draw_token(self._current_column, -1, GameToken.EMPTY)
                return self._current_column

    def draw_board(self, board: list, state: GameState):
        self._display.draw_grid()
        for y in range(6):
            for x in range(7):
                if board[y][x] != ' ':
                    self._display.draw_token(x, y, board[y][x])

if __name__ == '__main__':

    board = [[' ' for _ in range(7)] for _ in range(6)]
    board[5][0] = GameToken.RED  # [Y][X]
    p = PlayerSenseHat(GameToken.YELLOW)

    Ansi.clear_screen()
    Ansi.reset()
    p.draw_board(board, GameState.TURN_YELLOW)
    pos = p.play_turn()
    Ansi.reset()
    Ansi.gotoXY(1, 20)
    print(f"Position: {pos}")