package linea;

import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.table.DefaultTableModel;

public class GestionnaireHistorique {

    private static final String URL = "jdbc:sqlite:linea_bdd.db";

    public GestionnaireHistorique() {
        try {
            Class.forName("org.sqlite.JDBC");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    // enregistre la partie peu importe si le joueur a mis un pseudo ou pas
    public void sauvegarderPartie(String nom, int points, int duree) {
        String pseudoFinal = (nom == null || nom.trim().isEmpty()) ? "Anonyme" : nom.trim();
        String dateActuelle = new SimpleDateFormat("dd/MM/yyyy HH:mm").format(new Date());
        String sql = "INSERT INTO historique(nom, points, date_partie, duree) VALUES(?, ?, ?, ?)";

        try (Connection conn = DriverManager.getConnection(URL);
                PreparedStatement pstmt = conn.prepareStatement(sql)) {

            pstmt.setString(1, pseudoFinal);
            pstmt.setInt(2, points);
            pstmt.setString(3, dateActuelle);
            pstmt.setInt(4, duree);
            pstmt.executeUpdate();

        } catch (SQLException e) {
            System.err.println("impossible de sauvegarder l historique");
        }
    }

    public DefaultTableModel getModeleTableau() {
        // colonnes affichées dans la popup historique du menu
        String[] nomsColonnes = { "Partie N°", "Date", "Pseudo", "Score", "Durée (s)" };
        DefaultTableModel modele = new DefaultTableModel(nomsColonnes, 0);
        // les plus récentes en haut
        String sql = "SELECT id, date_partie, nom, points, duree FROM historique ORDER BY id DESC";

        try (Connection conn = DriverManager.getConnection(URL);
                Statement stmt = conn.createStatement();
                ResultSet rs = stmt.executeQuery(sql)) {

            while (rs.next()) {
                String dateRecup = rs.getString("date_partie");
                if (dateRecup == null)
                    dateRecup = "Inconnue";

                Object[] ligne = {
                        rs.getInt("id"),
                        dateRecup,
                        rs.getString("nom"),
                        rs.getInt("points"),
                        rs.getInt("duree")
                };
                modele.addRow(ligne);
            }

        } catch (SQLException e) {
            System.err.println("erreur lecture historique");
        }

        return modele;
    }
}