package Models.Caisse;

import Controllers.Dialog.ShowDialog;
import Controllers.Traitement.ParametreSystem;
import Controllers.Traitement.contro;
import Models.H2JDBC;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.log4j.Logger;

/**
 * @author Maher Ben Tili
 */
public class CarteBancaireCltDB {
    
    H2JDBC h2jdbc = new H2JDBC();
    ShowDialog SD = new ShowDialog();
    Logger logger = Logger.getLogger(CarteBancaireCltDB.class.getName());
    contro clt = new contro();
    
    public CarteBancaireClt SetCarteBancaire(CarteBancaireClt CarteBancaire)
    {
        String NumeroCarte = "null";
        if(!clt.isStringNull(CarteBancaire.getNumeroCarte())){
            NumeroCarte = "'"+CarteBancaire.getNumeroCarte()+"'";
        }
        String NomComplet = "null";
        if(!clt.isStringNull(CarteBancaire.getNomComplet())){
            NomComplet = "'"+CarteBancaire.getNomComplet()+"'";
        }
        String NomBanque = "null";
        if(!clt.isStringNull(CarteBancaire.getNomBanque())){
            NomBanque = "'"+CarteBancaire.getNomBanque()+"'";
        }
        
        String IdFactureClt = "null";
        if(!clt.isStringNull(CarteBancaire.getIdFactureClt())){
            IdFactureClt = "'"+CarteBancaire.getIdFactureClt()+"'";
        }
        String req = "INSERT INTO carte_bancaire_clt (num_transation, nom_banque, num_carte, nom_complet, date_transation, montant, id_factureclt, local_nom, id_profile) VALUES ('"+CarteBancaire.getNumeroTransation()+"', "+NomBanque+", "+NumeroCarte+", "+NomComplet+", now(), '"+CarteBancaire.getMontant()+"', "+IdFactureClt+" ,'"+CarteBancaire.getLocalNom()+"', '"+CarteBancaire.getIdProfile()+"')";
        
        String IdCarteBancaire = null;
        try {
            IdCarteBancaire = h2jdbc.InsertGetLastId(req);
            CarteBancaire.setIdCarteBancaire(IdCarteBancaire);
        }catch(SQLException ex){
            System.err.println("SetCarteBancaire Erreur SQL ! \n"+ex.getMessage());
            System.out.println(req);
            if(ParametreSystem.ErrorShowLogger)
            {
                logger.error("CarteBancaireCltDB  : SetCarteBancaire :" + ex.getMessage());
            }
            if(ParametreSystem.ErrorShowDialog)
            {
                ShowDialog.setTitre("Erreur SQL !");
                ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState());
                SD.ShowAletDialog();
            }
        }
        return CarteBancaire;
    }
    
    public CarteBancaireClt getCarteBancaireClt(String IdCarteBancaire)
    {
        CarteBancaireClt CarteBancaire = new CarteBancaireClt();
        
        String req = "SELECT *, to_char(date_transation, 'dd/mm/yyyy hh:ii:ss') as date_time_transation FROM carte_bancaire_clt WHERE id_carte_bancaire = "+IdCarteBancaire+";";
        try {
            ResultSet resultat = h2jdbc.selectFromDB(req);
            while (resultat.next()){
                CarteBancaire.setIdCarteBancaire(resultat.getString("id_carte_bancaire"));
                CarteBancaire.setDateTransation(resultat.getString("date_time_transation"));
                
                CarteBancaire.setMontant(resultat.getString("montant"));
                CarteBancaire.setFMontant(resultat.getFloat("montant"));
                
                CarteBancaire.setNomBanque(resultat.getString("nom_banque"));
                CarteBancaire.setNumeroCarte(resultat.getString("num_carte"));
                CarteBancaire.setNumeroTransation(resultat.getString("num_transation"));
                
                CarteBancaire.setIdProfile(resultat.getInt("id_profile"));
                CarteBancaire.setLocalNom(resultat.getString("local_nom"));
            }
        } catch(SQLException ex){
            System.err.println("getCarteBancaireClt Erreur SQL ! \n"+ex.getMessage());
            System.out.println(req);
            if(ParametreSystem.ErrorShowLogger)
            {
                logger.error("CarteBancaireCltDB  : getCarteBancaireClt :" + ex.getMessage());
            }
            if(ParametreSystem.ErrorShowDialog)
            {
                ShowDialog.setTitre("Erreur SQL !");
                ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState());
                SD.ShowAletDialog();
            }
        }
        return CarteBancaire;
    }
    
    public CarteBancaireClt getCarteBancaireByFactureClt(String IdFactureClt)
    {
        CarteBancaireClt CarteBancaire = new CarteBancaireClt();
        
        String req = "SELECT *, to_char(date_transation, 'dd/mm/yyyy hh:ii:ss') as date_time_transation FROM carte_bancaire_clt WHERE id_factureclt = "+IdFactureClt+";";
        try {
            ResultSet resultat = h2jdbc.selectFromDB(req);
            while (resultat.next()){
                CarteBancaire.setIdCarteBancaire(resultat.getString("id_carte_bancaire"));
                CarteBancaire.setDateTransation(resultat.getString("date_time_transation"));
                    
                CarteBancaire.setMontant(resultat.getString("montant"));
                CarteBancaire.setFMontant(resultat.getFloat("montant"));
                
                CarteBancaire.setNomBanque(resultat.getString("nom_banque"));
                CarteBancaire.setNumeroCarte(resultat.getString("num_carte"));
                CarteBancaire.setNumeroTransation(resultat.getString("num_transation"));
                
                CarteBancaire.setNomComplet(resultat.getString("nom_complet"));
                CarteBancaire.setIdFactureClt(resultat.getString("id_factureclt"));
                
                CarteBancaire.setIdProfile(resultat.getInt("id_profile"));
                CarteBancaire.setLocalNom(resultat.getString("local_nom"));
            }
        } catch(SQLException ex){
            System.err.println("Erreur SQL ! \n"+ex.getMessage());
            System.out.println(req);
            if(ParametreSystem.ErrorShowLogger)
            {
                logger.error("CarteBancaireCltDB  : getCarteBancaireByFactureClt :" + ex.getMessage());
            }
            if(ParametreSystem.ErrorShowDialog)
            {
                ShowDialog.setTitre("Erreur SQL !");
                ShowDialog.setDetail(ex.getMessage()+"\n"+ex.getSQLState());
                SD.ShowAletDialog();
            }
        }
        return CarteBancaire;
    }
}
