package linea;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;

public class MenuPrincipal {

    private JFrame fenetre;
    private Jeu jeu;
    private JTextField champPseudo;

    public MenuPrincipal(JFrame fenetre, Jeu jeu) {
        this.fenetre = fenetre;
        this.jeu = jeu;
    }

    public void afficher(String pseudoActuel) {

        JPanel panneau = new JPanel(new GridLayout(9, 1, 10, 10));

        JLabel titre = new JLabel("LINEA", SwingConstants.CENTER);
        champPseudo = new JTextField(pseudoActuel, 15);

        JButton bouton1Joueur = new JButton("1 Joueur");
        JButton bouton2Joueurs = new JButton("2 Joueurs");
        JButton boutonClassement = new JButton("Classement");
        JButton boutonHistorique = new JButton("Historique");
        JButton boutonQuitter = new JButton("Quitter");
        JButton boutonCheat = new JButton("Cheat Mode : OFF");

        bouton1Joueur.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jeu.lancerPartie(champPseudo.getText(), false);
            }
        });

        bouton2Joueurs.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jeu.lancerPartie(champPseudo.getText(), true);
            }
        });

        boutonClassement.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String scores = jeu.getGestionnaireBDD().getTopScores();
                JOptionPane.showMessageDialog(fenetre, scores, "Meilleurs Scores", JOptionPane.INFORMATION_MESSAGE);
            }
        });

        boutonHistorique.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // pour le modele de tableau
                DefaultTableModel modele = jeu.getGestionnaireHistorique().getModeleTableau();

                JTable tableau = new JTable(modele);

                // pour ne pas pouvoir modifier le tableau
                tableau.setDefaultEditor(Object.class, null);
                // pour ne pas faire bouger les collones
                tableau.getTableHeader().setReorderingAllowed(false);

                // pour le scroll
                JScrollPane scrollPane = new JScrollPane(tableau);
                scrollPane.setPreferredSize(new Dimension(400, 300));

                // afficher la fenetre pop up
                JOptionPane.showMessageDialog(fenetre, scrollPane, "Historique des parties", JOptionPane.PLAIN_MESSAGE);
            }
        });

        boutonQuitter.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });

        boutonCheat.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jeu.cheatMode = !jeu.cheatMode;
                boutonCheat.setText(jeu.cheatMode ? "Cheat Mode : ON" : "Cheat Mode : OFF");
            }
        });

        panneau.add(titre);
        panneau.add(champPseudo);
        panneau.add(bouton1Joueur);
        panneau.add(bouton2Joueurs);
        panneau.add(boutonClassement);
        panneau.add(boutonHistorique);
        panneau.add(boutonCheat);
        panneau.add(boutonQuitter);

        JPanel conteneur = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 110));
        conteneur.add(panneau);

        fenetre.setContentPane(conteneur);
        fenetre.revalidate();
        fenetre.repaint();
    }
}