import java.awt.*;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;

// ★★★ CLASSE CREEE PAR L'UTILISATEUR ★★★
// Fichier : MenuPrincipal.java (nouveau fichier)
// Objectif : afficher un menu d'accueil APRES la connexion réussie
// Remplace : l'ancien démarrage direct du jeu après connexion
// Fonctionnalités : 2 boutons (Lancer le jeu / Voir mes scores)

// Fenêtre du menu principal affichée après la connexion
public class MenuPrincipal extends JFrame {

    // ID de l'utilisateur connecté
    private final int utilisateurId;

    // Constructeur du menu principal
    // Affiche un écran d'accueil avec deux options : "Lancer le jeu" et "Voir mes scores"
    // ★★★ CONSTRUCTEUR CREE PAR L'UTILISATEUR ★★★
    // Nouveau : il n'existait pas avant, crée le menu principal
    public MenuPrincipal(int utilisateurId, String userName) {
        // Sauvegarde l'ID pour l'utiliser lors des appels à la base de données
        this.utilisateurId = utilisateurId;

        // Charge la même icône que les autres fenêtres de l'application.
        try {
            URL urlIcone = getClass().getResource("/images/icone.png");
            if (urlIcone != null) {
                setIconImage(ImageIO.read(urlIcone));
            }
        } catch (Exception e) {
            System.err.println("Impossible de charger l'icône du menu principal : " + e.getMessage());
        }

        // Configuration de la fenêtre
        setTitle("ZENITH FLUX");  // Titre de la fenêtre
        setSize(800, 600);  // Dimensions de la fenêtre
        setDefaultCloseOperation(EXIT_ON_CLOSE);  // Quitter l'app à la fermeture
        setLocationRelativeTo(null);  // Centre la fenêtre

        // Crée le panneau principal avec un fond sombre
        JPanel panel = new JPanel(new GridBagLayout());  // GridBagLayout pour centrage
        panel.setBackground(new Color(30, 30, 30));  // Fond gris très foncé
        add(panel);

        // Crée une boîte verticale pour disposer les éléments de haut en bas
        Box box = Box.createVerticalBox();  // Disposition verticale
        box.setAlignmentX(Component.CENTER_ALIGNMENT);  // Centré horizontalement

        // Crée un titre de bienvenue personalisé avec le nom de l'utilisateur
        JLabel titre = new JLabel("Bienvenue, " + userName + " !");
        titre.setForeground(Color.WHITE);  // Texte blanc
        titre.setFont(new Font("Arial", Font.BOLD, 26));  // Police Arial gras 26pt
        titre.setAlignmentX(Component.CENTER_ALIGNMENT);  // Centré

        // Crée le bouton "Lancer le jeu" pour démarrer une partie
        JButton demarrer = new JButton("Lancer le jeu");
        demarrer.setBackground(new Color(70, 130, 180));  // Couleur bleu acier
        demarrer.setForeground(Color.WHITE);  // Texte blanc
        demarrer.setFocusPainted(false);  // Pas de bordure au focus
        demarrer.setMaximumSize(new Dimension(220, 40));  // Dimension du bouton
        demarrer.setAlignmentX(Component.CENTER_ALIGNMENT);  // Centré horizontalement

        
        // Au clic, ferme ce menu et lance le jeu
        // ★★★ ACTION MODIFIEE PAR L'UTILISATEUR ★★★
        // Lance le jeu APRES fermeture du menu (ajout du menu principal)
        demarrer.addActionListener(e -> {
            // Ferme la fenêtre de menu
            dispose();
            // Crée une instance du jeu avec l'ID utilisateur (authentifié)
            Jeu jeu = new Jeu(utilisateurId);
            // Démarre l'affichage et l'initialisation du jeu
            jeu.demarrer();
        });

        // Crée le bouton "Voir mes scores" pour afficher l'historique
        // ★★★ NOUVEAU BOUTON PAR L'UTILISATEUR ★★★
        // Nouvelle fonctionnalité : permet de voir les scores AVANT de lancer le jeu
        // Utilise les méthodes : GestionBDD.recupererScoresUtilisateur()
        //                         GestionBDD.recupererMeilleurScoreUtilisateur()
        JButton scores = new JButton("Voir mes scores");
        scores.setBackground(new Color(70, 130, 180));  // Couleur bleu acier (même que demarrer)
        scores.setForeground(Color.WHITE);  // Texte blanc
        scores.setFocusPainted(false);  // Pas de bordure au focus
        scores.setMaximumSize(new Dimension(220, 40));  // Dimension du bouton
        scores.setAlignmentX(Component.CENTER_ALIGNMENT);  // Centré horizontalement

        
        // Au clic, récupère et affiche les scores depuis la base de données
        // ★★★ ACTION PAR L'UTILISATEUR ★★★
        // Nouvelle action : afficher les scores historiques du joueur dans une popup
        // Récupère : tous les scores + le meilleur score
        scores.addActionListener(e -> {
            // Récupère la liste de tous les scores de l'utilisateur depuis la BD
            java.util.List<Integer> scoreList = GestionBDD.recupererScoresUtilisateur(utilisateurId);
            // Récupère aussi le meilleur score (score maximum) depuis la BD
            int meilleurScore = GestionBDD.recupererMeilleurScoreUtilisateur(utilisateurId);

            // Construit un message texte avec tous les scores à afficher
            StringBuilder message = new StringBuilder();
            message.append("Meilleur score : ").append(meilleurScore).append("\n\n");
            message.append("Tous les scores :\n");
            
            // Ajoute chaque score à la liste, un par un
            for (int s : scoreList) {
                message.append(s).append("\n");
            }

            // Affiche les scores dans une boîte de dialogue popup
            JOptionPane.showMessageDialog(this, message.toString(), "Mes Scores", JOptionPane.INFORMATION_MESSAGE);
        });

        // Ajoute tous les éléments dans la boîte
        box.add(titre);
        box.add(Box.createVerticalStrut(40));  // Espace de 40 pixels après le titre
        box.add(demarrer);
        box.add(Box.createVerticalStrut(15));  // Espace de 15 pixels entre les deux boutons
        box.add(scores);

        // Ajoute la boîte au panneau principal
        panel.add(box);

        setVisible(true);
    }
}
