package fr.monkhanny.dorfromantik.controller;

import fr.monkhanny.dorfromantik.Options;
import fr.monkhanny.dorfromantik.gui.SettingsPanel;
import fr.monkhanny.dorfromantik.gui.MainMenu;
import fr.monkhanny.dorfromantik.gui.ButtonPanel;
import fr.monkhanny.dorfromantik.listeners.SettingsWindowListener;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.Dimension;
import java.awt.Point;

public class MainMenuButtonController implements ActionListener {

    private MainMenu mainMenu;

    private JFrame settingsFrame;
    private JFrame howToPlayFrame;

    public MainMenuButtonController(MainMenu mainMenu, JFrame settingsFrame, JFrame howToPlayFrame) {
        this.mainMenu = mainMenu;
        // Ajouter les écouteurs d'événements sur les boutons
        ButtonPanel buttonPanel = mainMenu.getButtonPanel();
        
        // Attacher les actions aux boutons
        buttonPanel.getNewGameButton().addActionListener(this);
        buttonPanel.getContinueGameButton().addActionListener(this);
        buttonPanel.getHowToPlayButton().addActionListener(this);
        buttonPanel.getSettingsButton().addActionListener(this);
        buttonPanel.getExitButton().addActionListener(this);

        // Créer la fenêtre des paramètres
        this.settingsFrame = settingsFrame;
        this.settingsFrame.setLocationRelativeTo(null);
        this.settingsFrame.setVisible(false);

        // Créer la fenêtre du tutoriel
        this.howToPlayFrame = howToPlayFrame;
        this.howToPlayFrame.setLocationRelativeTo(null);
        this.howToPlayFrame.setVisible(false);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();
        
        switch (command) {
            case "Nouvelle partie":
                startNewGame();
                break;
            case "Continuer une partie":
                continueGame();
                break;
            case "Comment jouer ?":
                showHowToPlay();
                break;
            case "Paramètres":
                openSettings();
                break;
            case "Quitter":
                exitGame();
                break;
            default:
                System.out.println("Commande inconnue: " + command);
                break;
        }
    }

    private void startNewGame() {
        System.out.println("Démarrer une nouvelle partie...");
        // Logic to start a new game
    }

    private void continueGame() {
        System.out.println("Continuer une partie...");
        // Logic to continue the game
    }

    public void showHowToPlay() {
        // Récupérer la taille et la position de la fenêtre du menu principal
        Dimension mainMenuSize = this.mainMenu.getSize();
        Point mainMenuLocation = this.mainMenu.getLocation();

        // Ajuster la fenêtre des paramètres pour qu'elle ait la même taille et position
        this.howToPlayFrame.setSize(mainMenuSize);
        this.howToPlayFrame.setLocation(mainMenuLocation);

        // Cacher la fenêtre du menu principal
        this.mainMenu.setVisible(false);

        // Afficher la fenêtre des paramètres
        this.howToPlayFrame.setVisible(true);
    }


    private void exitGame() {
        System.exit(0); // Fermer l'application
    }

    private void openSettings() {
        // Récupérer la taille et la position de la fenêtre du menu principal
        Dimension mainMenuSize = this.mainMenu.getSize();
        Point mainMenuLocation = this.mainMenu.getLocation();

        // Ajuster la fenêtre des paramètres pour qu'elle ait la même taille et position
        this.settingsFrame.setSize(mainMenuSize);
        this.settingsFrame.setLocation(mainMenuLocation);

        // Cacher la fenêtre du menu principal
        this.mainMenu.setVisible(false);

        // Afficher la fenêtre des paramètres
        this.settingsFrame.setVisible(true);
    }
}
