import time
import tkinter as tk
from tkinter import messagebox
import threading
import random

class TicTacToe:
    def __init__(self, parent):
        """
        Inicializa el juego de Tic Tac Toe.

        Args:
            parent (tk.Frame): Frame donde se colocará el juego.
        """
        self.parent = parent
        self.board = [""] * 9  # Representación del tablero 3x3
        self.current_player = "X"  # Jugador que inicia la partida
        self.vs_computer = False  # Modo jugador vs máquina

        # Título del juego
        title = tk.Label(self.parent, text="Tic Tac Toe", font=("Helvetica", 16, "bold"))
        title.pack(pady=10)

        # Botón para alternar entre modos de juego
        self.mode_button = tk.Button(self.parent, text="Modo: Jugador vs Jugador", command=self.toggle_mode)
        self.mode_button.pack(pady=5)

        # Crear la cuadrícula del tablero
        self.buttons = []
        self.board_frame = tk.Frame(self.parent)
        self.board_frame.pack()

        for i in range(9):
            button = tk.Button(
                self.board_frame,
                text="",
                font=("Helvetica", 20),
                width=5,
                height=2,
                command=self.create_button_command(i)
            )
            button.grid(row=i // 3, column=i % 3)
            self.buttons.append(button)

        # Mensaje que indica el turno del jugador
        self.status_label = tk.Label(self.parent, text="Turno: X", font=("Helvetica", 12))
        self.status_label.pack(pady=5)

    def toggle_mode(self):
        """Alterna entre los modos Jugador vs Jugador y Jugador vs Máquina."""
        self.vs_computer = not self.vs_computer
        mode_text = "Modo: Jugador vs Máquina" if self.vs_computer else "Modo: Jugador vs Jugador"
        self.mode_button.config(text=mode_text)
        self.reset_game()

    def reset_game(self):
        """Reinicia el juego a su estado inicial."""
        self.board = [""] * 9
        self.current_player = "X"
        for button in self.buttons:
            button.config(text="", state=tk.NORMAL)
        self.status_label.config(text="Turno: X")

    def make_move(self, index):
        """Registra un movimiento y actualiza el tablero."""
        if self.board[index] == "":
            self.board[index] = self.current_player
            self.buttons[index].config(text=self.current_player)

            winner = self.check_winner()
            if winner:
                self.end_game(f"¡Ganador: {winner}!")
                return
            elif "" not in self.board:
                self.end_game("¡Empate!")
                return

            self.current_player = "O" if self.current_player == "X" else "X"
            self.status_label.config(text=f"Turno: {self.current_player}")

    def check_winner(self):
        """Verifica si hay un ganador en el juego."""
        winning_combinations = [
            (0, 1, 2), (3, 4, 5), (6, 7, 8),  # Filas
            (0, 3, 6), (1, 4, 7), (2, 5, 8),  # Columnas
            (0, 4, 8), (2, 4, 6)  # Diagonales
        ]
        for a, b, c in winning_combinations:
            if self.board[a] == self.board[b] == self.board[c] and self.board[a] != "":
                return self.board[a]
        return None
