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

import Controllers.Traitement.Adaptateur;
import Controllers.Traitement.contro;
import Models.connexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

/**
 *
 * @author Maher
 */
public class FournisseurDB {
    
    connexion cnx = new connexion();
    contro clt = new contro();
    
    //methode qui permet de récupére la liste des locals souf le local qui appartin l'utilisateur
    public ArrayList<String> getAllFournisseur(String colonne){
        ArrayList<String> listFournisseur = new  ArrayList<>();
        String req = "SELECT "+colonne+" FROM `fournisseur` ORDER BY `id_fourisseur` DESC;";  //local avec la quel appartient l'utilisateur
        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() ) {
                        listFournisseur.add(resultat.getString(colonne));
                    }
                }
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
                System.out.println("req "+req);
            }
        }
        return listFournisseur ;
    }
    
    
    public Fournisseur GetFournisseurDB(String CodeFrs)
    {
        Fournisseur fournisseur= new Fournisseur();
        
        String Query = "SELECT * FROM fournisseur WHERE (id_fourisseur = "+CodeFrs+");";
        
        if(cnx.ouverture()){
            try{
                ResultSet resultat = cnx.excutionquery(Query);
                
                resultat.last();//on place le curseur sur le dernier tuple
               
                if(resultat.getRow()>0){ //on récupère le numéro de la ligne
                    fournisseur.setCode(CodeFrs);
                    fournisseur.setNom(resultat.getString("nom"));
                    fournisseur.setAdresse(resultat.getString("adresse"));
                    fournisseur.setFormes(resultat.getString("formes"));
                    fournisseur.setTele1(resultat.getString("tele1"));
                    fournisseur.setTele2(resultat.getString("tele2"));
                    fournisseur.setFax(resultat.getString("fax"));
                    fournisseur.setMail(resultat.getString("mail"));
                    fournisseur.setSiteWeb(resultat.getString("site_web"));
                    fournisseur.setSpecialite(resultat.getString("specialite"));
                    
                    FournisseurContactDB FournisseurContact = new FournisseurContactDB();
                    fournisseur.setContactFrs(FournisseurContact.GetListFournisseurContact(CodeFrs));
                }
            }catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
            }
        }
        return fournisseur;
    }
    
    public Fournisseur SetFournisseurDB(Fournisseur Frs)
    {
        contro clt= new contro();
        String Tele2 = "NULL"; if(!clt.isStringNull(Frs.getTele2())){ Tele2 = Frs.getTele2();}
        String Fax = "NULL";if(!clt.isStringNull(Frs.getFax())){ Fax = Frs.getFax();}      
        String Mail = "NULL"; if(!clt.isStringNull(Frs.getMail())){ Mail = "'"+Frs.getMail().replace("'", "\\'")+"'";}
        String SiteWeb = "NULL"; if(!clt.isStringNull(Frs.getSiteWeb())){ SiteWeb = "'"+Frs.getSiteWeb()+"'";}     
        String Specialite = "NULL";  if(!clt.isStringNull(Frs.getSpecialite())){ Specialite = "'"+Frs.getSpecialite().replace("'", "\\'")+"'";}    
        
        String Query = "INSERT INTO `fournisseur` (`nom`, `adresse`, `formes`, `tele1`, `tele2`, `fax`, `mail`, `site_web`, `specialite`) VALUES ('"+Frs.getNom().replace("'", "\\'")+"', '"+Frs.getAdresse().replace("'", "\\'")+"', '"+Frs.getFormes().replace("'", "\\'")+"', "+Frs.getTele1()+", "+Tele2+", "+Fax+", "+Mail+", "+SiteWeb+", "+Specialite+");";
        String CodeFrs = cnx.InsertGetLastId(Query);
        Frs.setCode(CodeFrs);
        
        int SizeContactFrs = Frs.getContactFrs().size();
        if(SizeContactFrs > 0){
            FournisseurContactDB FrsContactDB= new FournisseurContactDB();
            FrsContactDB.SetListFournisseurContact(Frs.getContactFrs(), CodeFrs);
        }
             
        return Frs;
    }
    
    
    public boolean UpdFournisseurDB(Fournisseur Frs)
    {
        contro clt= new contro();
        String Tele2 = "NULL"; if(!clt.isStringNull(Frs.getTele2())){ Tele2 = Frs.getTele2();}
        String Fax = "NULL";if(!clt.isStringNull(Frs.getFax())){ Fax = Frs.getFax();}      
        String Mail = "NULL"; if(!clt.isStringNull(Frs.getMail())){ Mail = "'"+Frs.getMail().replace("'", "\\'")+"'";}
        String SiteWeb = "NULL"; if(!clt.isStringNull(Frs.getSiteWeb())){ SiteWeb = "'"+Frs.getSiteWeb()+"'";}     
        String Specialite = "NULL";  if(!clt.isStringNull(Frs.getSpecialite())){ Specialite = "'"+Frs.getSpecialite().replace("'", "\\'")+"'";}    
        
        String Query = "UPDATE `fournisseur` SET `nom` = '"+Frs.getNom().replace("'", "\\'")+"', `adresse` = '"+Frs.getAdresse().replace("'", "\\'")+"', `formes` = '"+Frs.getFormes().replace("'", "\\'")+"', `Tele1` = '"+Frs.getTele1()+"', `Tele2` = "+Tele2+", `fax` = "+Fax+", `mail` = "+Mail+", `site_web` = "+SiteWeb+", `specialite` = "+Specialite+" WHERE `id_fourisseur` = "+Frs.getCode()+" ;";
        boolean Result = false;
        if(cnx.ouverture()){
            try{
               int nbr = cnx.executionupdate(Query);
               if(nbr >= 1){
                   Result =  true;
               }
            }catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
            }
        }
        
        return Result;
    }
    
    
    
    /********************************** Initial *******************************/
    
    
    public ObservableList<FournisseurGestionList> SearchFournisseurGestion(Integer debut, Integer nbr, String CodeFournisseur, String NomFournisseur, String AdresseFournisseur, String  TeleFournisseur, String FaxFournisseur, String MailFournisseur)
    {
        ObservableList<FournisseurGestionList> data =FXCollections.observableArrayList();
        
        String Where = "";
        
        if(!clt.isStringNull(CodeFournisseur)){
            Where += " (`id_fourisseur` = \""+CodeFournisseur+"\") AND ";
        }
        
        if(!clt.isStringNull(NomFournisseur)){
            Where += " (`nom` LIKE \"%"+Adaptateur.addSlashes(NomFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(AdresseFournisseur)){
            Where += " (`adresse` LIKE \"%"+Adaptateur.addSlashes(AdresseFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(TeleFournisseur)){
            Where += " (`tele1` LIKE \"%"+Adaptateur.addSlashes(TeleFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(FaxFournisseur)){
            Where += " (`fax` LIKE \"%"+Adaptateur.addSlashes(FaxFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(MailFournisseur)){
            Where += " (`mail` LIKE \"%"+Adaptateur.addSlashes(MailFournisseur)+"%\") AND ";
        }
        
        if(!Where.equals("")){
            Where = Where.substring(0, Where.length() - 4);
            Where = "WHERE  " + Where;
        }
        
        String req="SELECT `id_fourisseur`, `nom`, `adresse`, `formes`, `tele1`, `tele2`, `fax`, `mail`, `site_web`, `specialite`  "
                + "FROM `fournisseur` "
                + Where
                + "ORDER BY id_fourisseur DESC "
                + "LIMIT "+debut+" , "+nbr+" ;";
        
        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 id_fourisseur = resultat.getString("id_fourisseur");
                        String nom = resultat.getString("nom");
                        String adresse = resultat.getString("adresse");
                        String type_organisation = resultat.getString("formes");
                        String tele1 = resultat.getString("tele1");
                        String tele2 = resultat.getString("tele2");
                        String fax = resultat.getString("fax");
                        String mail = resultat.getString("mail");
                        String site_web = resultat.getString("site_web");
                        String specialite = resultat.getString("specialite");
                        
                        data.add(new FournisseurGestionList(id_fourisseur,  nom,  adresse,  type_organisation,  tele1, tele2,  fax,  mail,  site_web,  specialite));
                    }
                }
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
                System.out.println(req);
            }
        }
        return data ;
    }
    
    public Integer nbrFournisseurGestion(String CodeFournisseur, String NomFournisseur, String AdresseFournisseur, String  TeleFournisseur, String FaxFournisseur, String MailFournisseur)
    {
        String Where = "";
        
        if(!clt.isStringNull(CodeFournisseur)){
            Where += " (`id_fourisseur` = \""+CodeFournisseur+"\") AND ";
        }
        
        if(!clt.isStringNull(NomFournisseur)){
            Where += " (`nom` LIKE \"%"+Adaptateur.addSlashes(NomFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(AdresseFournisseur)){
            Where += " (`adresse` LIKE \"%"+Adaptateur.addSlashes(AdresseFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(TeleFournisseur)){
            Where += " (`tele1` LIKE \"%"+Adaptateur.addSlashes(TeleFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(FaxFournisseur)){
            Where += " (`fax` LIKE \"%"+Adaptateur.addSlashes(FaxFournisseur)+"%\") AND ";
        }
        
        if(!clt.isStringNull(MailFournisseur)){
            Where += " (`mail` LIKE \"%"+Adaptateur.addSlashes(MailFournisseur)+"%\") AND ";
        }
        
        if(!Where.equals("")){
            Where = Where.substring(0, Where.length() - 4);
            Where = "WHERE  " + Where;
        }
        
        String req=" SELECT COUNT(`id_fourisseur`) " 
                    + " FROM `fournisseur`  "
                    + Where+ " ;"; 
        
        int sommme =0;
        
        if(cnx.ouverture()){
            try{
               /* Exécution d'une requête de lecture */
                ResultSet resultat = cnx.excutionquery(req);
                resultat.next();    // get the number of rows from the result set
                sommme = resultat.getInt(1);
            }
            catch(SQLException ex){
                System.err.println("Erreur SQL ! \n"+ex.getMessage());
                System.out.println(req);
            }
        }
        return sommme ;
    }
    
    
    
}
