/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package bdd;

import com.mysql.cj.xdevapi.Client;
import com.test.beans.Pompier;
import com.test.forms.MD5;
import jakarta.servlet.http.HttpServletRequest;
import java.net.http.HttpRequest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author thomas.millot
 */
public class PompierMysql {

    private Connection theConnection;
    private Pompier unPompier;

    public PompierMysql() {
        theConnection = Connexion.getConnect("localhost", "sdis29", "admin", "minda");
    }

    public ArrayList<Pompier> readAll() {
        ArrayList<Pompier> lesPompiers = new ArrayList<>();

        try {
            Statement stmt = theConnection.createStatement();
            ResultSet resultQ = null;
            resultQ = stmt.executeQuery("SELECT * FROM pompier");
            while (resultQ.next()) {
                unPompier = new Pompier(resultQ.getInt("id"),
                        resultQ.getString("nom"),
                        resultQ.getString("prenom"),
                        resultQ.getString("statut"),
                        resultQ.getString("typePers"),
                        resultQ.getString("mail"),
                        resultQ.getString("login"),
                        resultQ.getString("mdp"),
                        resultQ.getString("adresse"),
                        resultQ.getInt("cp"),
                        resultQ.getString("ville"),
                        resultQ.getInt("bip"),
                        resultQ.getInt("nbGardes"),
                        resultQ.getInt("grade"),
                        resultQ.getString("commentaire"),
                        resultQ.getString("dateEnreg"),
                        resultQ.getString("dateModif"));
                lesPompiers.add(unPompier);
            }
            resultQ.close();
            stmt.close();
            //theConnection.close();
        } catch (SQLException ex) {
            System.out.println("SQLException : " + ex.getMessage());
            System.out.println("SQLState : " + ex.getSQLState());
            System.out.println("Code erreur : " + ex.getErrorCode());
        }

        return lesPompiers;
    }

    /**
     * Creation du client passé en paramètre dans la table client Requête non
     * préparée
     *
     * @param c objet de type Client (sans identifiant)
     * @return int : id du client créé
     */
    public int create(Pompier p) {
        int id = -1;
        try {
            Statement stmt = theConnection.createStatement();
            int status = stmt.executeUpdate(
                    "INSERT INTO pompier (nom, prenom, statut, mail, login, mdp, adresse, cp, ville, bip, nbGardes, grade, commentaire, dateEnreg, dateModif) "
                    + "VALUES ('" + p.getNom() + "', '"
                    + p.getPrenom() + "', '"
                    + p.getStatut() + "', "
                    + p.getMail() + ", '"
                    + p.getLogin() + "', '"
                    + p.getMdp() + "', '"
                    + p.getAdresse() + "', '"
                    + p.getVille() + "', '"
                    + p.getBip() + "', '"
                    + p.getNbGardes() + "', '"
                    + p.getGrade() + "', '"
                    + p.getCommentaire() + "', '"
                    + p.getDateEnreg() + "', '"
                    + p.getDateModif() + "');",
                    Statement.RETURN_GENERATED_KEYS);

            // Recherche de l'identifiant du client créé            
            if (status > 0) {
                ResultSet result = stmt.getGeneratedKeys();
                if (result.first()) {
                    id = result.getInt(1);
                }
            }
        } catch (SQLException ex) {
            System.out.println("SQLException : " + ex.getMessage());
            System.out.println("SQLState : " + ex.getSQLState());
            System.out.println("Code erreur : " + ex.getErrorCode());
        }
        return id;
    }

    /**
     * Creation du client passé en paramètre dans la table client Requête
     * préparée
     *
     * @param c objet de type Client (sans identifiant)
     * @return int : id du client créé
     */
    public int createRP(Pompier p) {
        int id = -1;
        try {
            PreparedStatement stmt = null;
            String sql = "INSERT INTO pompier (nom, prenom, statut, mail, login, mdp, adresse, cp, ville, bip, nbGardes, grade, commentaire, dateEnreg, dateModif) "
                    + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
            stmt = theConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
            stmt.setString(1, p.getNom());
            stmt.setString(2, p.getPrenom());
            stmt.setString(3, p.getStatut());
            stmt.setString(4, p.getMail());
            stmt.setString(5, p.getLogin());
            stmt.setString(6, p.getMdp());
            stmt.setString(7, p.getAdresse());
            stmt.setString(8, p.getVille());
            stmt.setInt(9, p.getBip());
            stmt.setInt(10, p.getNbGardes());
            stmt.setInt(11, p.getGrade());
            stmt.setString(12, p.getCommentaire());
            stmt.setString(13, p.getDateEnreg());
            stmt.setString(14, p.getDateModif());
            System.out.println("Requête : " + stmt.toString());
            int status = stmt.executeUpdate();

            // Recherche de l'identifiant du client créé            
            if (status > 0) {
                ResultSet result = stmt.getGeneratedKeys();
                if (result.first()) {
                    id = result.getInt(1);
                }
            }
        } catch (SQLException ex) {
            System.out.println("SQLException : " + ex.getMessage());
            System.out.println("SQLState : " + ex.getSQLState());
            System.out.println("Code erreur : " + ex.getErrorCode());
        }
        return id;
    }

    public boolean readPompier(HttpServletRequest request) {
        boolean reponse = false;
        Statement stmt;
        String userSaisi = request.getParameter("ztPseudo");
        String mdpSaisi = request.getParameter("ztMDP");
        String mdpChiffre = MD5.encode(mdpSaisi);
        System.out.println("userSaisi : "+ userSaisi);
        System.out.println("mdpSaisi : "+ mdpChiffre);
        try {
            System.out.println("Select * FROM pompier WHERE login = '"+userSaisi+"' AND mdp = '"+mdpChiffre+"';");
            stmt = theConnection.createStatement();
            ResultSet resultQ = null;
            resultQ = stmt.executeQuery("Select * FROM pompier WHERE login = '"+userSaisi+"' AND mdp = '"+mdpChiffre+"';");
            reponse = resultQ.next();            
        } catch (SQLException ex) {
            Logger.getLogger(PompierMysql.class.getName()).log(Level.SEVERE, null, ex);
        }

        return reponse;

    }

}
