import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.event.ActionEvent;
import javafx.scene.control.Label;
import javafx.scene.layout.GridPane;
import logic.*;

import java.util.ArrayList;
import java.util.List;

public class SceneController {
    private Board board;
    private Actor player;
    private Actor enemy;

    public int playerTurn = 1;

    public void initData(Board board, Actor player, Actor enemy) {
        this.board = board;
        this.player = player;
        this.enemy = enemy;
    }

    public void playerTurn(){
        this.playerTurn = 1;
        turnlabel.setText("Your Turn");
    }

    @FXML
    private GridPane gridPane;

    @FXML
    private Label turnlabel;

    @FXML
    private Button button1, button2, button3, button4, button5, button6, button7, button8, button9;

    @FXML
    private List<Button> buttonList;

    @FXML
    public void initialize() {
        // Liste der Buttons erstellen und Buttons hinzufügen
        buttonList = new ArrayList<>();
        buttonList.add(button1);
        buttonList.add(button2);
        buttonList.add(button3);
        buttonList.add(button4);
        buttonList.add(button5);
        buttonList.add(button6);
        buttonList.add(button7);
        buttonList.add(button8);
        buttonList.add(button9);
    }

    public void aiTurn(){
        // AI's Turn
        playerTurn = 0;
        turnlabel.setText("AI's Turn");
        int[] coordinates = enemy.makeMove(board);
        // DEBUG
        System.out.println("Enemy: " + coordinates[0] + ", " + coordinates[1]);
        initialize();


        buttonList.get(coordinates[0] + coordinates[1] * 3).setText("o");


        playerTurn();
    }

    public void over(){
        if(board.checkForWin()){
            System.out.println("Game is over!");
            if(playerTurn == 0){
                turnlabel.setText("You win!");
            }else if(playerTurn == 1){
                turnlabel.setText("You lose!");
            }

            playerTurn = -1;
        }
    }

    // Diese Funktion wird beim Button-Click aufgerufen
    @FXML
    private void handleButtonClick(ActionEvent event) {

        Button pressedButton = (Button) event.getSource();  // Das gedrückte Button-Objekt wird extrahiert
        String buttonText = pressedButton.getText();  // Der Text des gedrückten Buttons wird extrahiert

        // Zugriff auf die Koordinaten des Buttons:
        int row = GridPane.getRowIndex(pressedButton);  // Zeilen-Koordinate
        int col = GridPane.getColumnIndex(pressedButton);  // Spalten-Koordinate



        if(buttonText.equals(" ") && playerTurn == 1) {
            // Setze X
            pressedButton.setText("X");

            player.makeMove(board, col, row);
            over();

            aiTurn();
            over();
            board.printBoard();
        }

    }
}