/*
 * 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 Models.Categorie;


import Models.connexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 *
 * @author PC-Maher
 */
public class CategorieDB {
    
    connexion cnx = new connexion();
    
    public boolean addCategorie(Categorie categorie){
        String req = "INSERT INTO `categorie` (`nomcategorie`, `unitemesure`) VALUES ('"+categorie.getNomcategorie()+"', '"+categorie.getUnitemesure()+"');";
        if(cnx.ouverture()){
            try{
               int nbr = cnx.executionupdate(req);
               return true;
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
                return false ;
            }
        }
        else{
            return false ;
        }
    }
    
    
    
    public boolean verifyCategorie(String cat){
        boolean result = false ;
        
        if(cnx.ouverture()){
            String sql="SELECT * FROM `categorie` WHERE `nomcategorie` LIKE '"+cat+"' ORDER BY `categorie`.`nomcategorie` ASC ;";
            
            try {
               ResultSet resultat = cnx.excutionquery(sql);
               resultat.last(); //on place le curseur sur le dernier tuple
               if(resultat.getRow()>0){
                  result= true ;
               }
            } 
            catch (SQLException ex) {
                result= false ;
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
            }
        }
        return result ;
    }
    
    
    public ArrayList<String> getListCategorie(){
        ArrayList<String> listcategorie = new  ArrayList<>();
        String req = "SELECT `nomcategorie` FROM `categorie` ;";
        if(cnx.ouverture()){
            try{
               /* Exécution d'une requête de lecture */
                ResultSet resultat = cnx.excutionquery(req);
                //on place le curseur sur le dernier tuple
                resultat.last();
                //on récupère le numéro de la ligne
                int nombreLignes = resultat.getRow();
                if(nombreLignes>0){
                    //on repace le curseur avant la première ligne
                    resultat.beforeFirst();
                    
                    while ( resultat.next() ) {
                       
                        String nomcategorie=resultat.getString("nomcategorie");
                        listcategorie.add(nomcategorie);
                    }
                }
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
            }
        }
        return listcategorie ;
    }
    
    public  ObservableList<CategorieListe> GetCategorie(String Local, String NomCategorie){
        
        ObservableList<CategorieListe> DataCategorieListe = FXCollections.observableArrayList();
        
        NomCategorie = NomCategorie.replaceAll("'","\\\\'");
        
        String Query =  " SELECT P.nomcategorie_cate AS category, COUNT(S.produit_reference) AS quantity " +
                        " FROM `stock` S, `produit` P " +
                        " WHERE (S.local_nom = '"+Local+"') AND (P.reference = S.produit_reference) AND (P.nomcategorie_cate LIKE '%"+NomCategorie+"%') " +
                        " GROUP BY P.nomcategorie_cate " +
                        " ORDER BY quantity DESC; ";
        
        if(cnx.ouverture()){
            try{
                ResultSet resultat= cnx.FetchALL(Query);
                
                while ( resultat.next() ) { 
                    
                    String category = resultat.getString("category");
                    String quantity =  resultat.getString("quantity");
                    
                    DataCategorieListe.add(new CategorieListe(category, quantity));
                }
            }catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
            }
        }
        return DataCategorieListe;
    }
}
