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

import Controllers.Traitement.Adaptateur;
import Controllers.Traitement.contro;
import Models.Client.Client;
import Models.Client.ClientDB;
import Models.Client.ClientEntreprise;
import Models.Client.ClientEntrepriseContact;
import Models.Client.ClientEntrepriseDB;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.animation.FadeTransition;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.DatePicker;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.util.Duration;


/**
 * FXML Controller class
 * @author PC-Maher
 */
public class DetailClientController implements Initializable {
    
    @FXML private StackPane StackPaneSucessCltPersonne;
    @FXML private AnchorPane AnchorPaneModifierCltPersonne;
    @FXML private AnchorPane AnchorPaneModifierCltEntreprise;
    
    @FXML public Text Nomclt ;
    @FXML public Text Codeclt ;
    
    @FXML private TextField AjouterClientCode;
    @FXML private TextField AjouterClientCIN;
    @FXML private TextField AjouterClientNomComplet;
    @FXML private TextField AjouterClientNom;
    @FXML private TextField AjouterClientPrenom;
    @FXML private DatePicker AjouterClientNaissance;
    @FXML private TextField AjouterClientTeleFixe;
    @FXML private TextField AjouterClientTeleMobile;
    @FXML private TextField AjouterClientAdresse;
    @FXML private TextField AjouterClientCodePostal;
    @FXML private TextField AjouterClientMail;
    @FXML public ToggleGroup groupesexe;
    @FXML private RadioButton RadioButtonSexeHomme;
    @FXML private RadioButton RadioButtonSexeFemme;
    
    @FXML private Text ErreurCode ;
    @FXML private Text ErreurCIN ;
    @FXML private Text ErreurNomComplet ;
    @FXML private Text ErreurNom ;
    @FXML private Text ErreurPrenom ;
    @FXML private Text ErreurNaissance ;
    @FXML private Text ErreurTeleFixe ;
    @FXML private Text ErreurTeleMobile ;
    @FXML private Text ErreurAdresse ;
    @FXML private Text ErreurCodePostal ;
    @FXML private Text ErreurMail ;
    @FXML private Text ErreurSexe ;

    @FXML private Text ErreurClientEntrepriseNom ;
    @FXML private Text ErreurClientEntrepriseGerant ;
    @FXML private Text ErreurClientEntrepriseMatricule ;
    @FXML private Text ErreurClientEntrepriseAdresse ;
    @FXML private Text ErreurClientEntreprisePostale ;
    @FXML private Text ErreurClientEntrepriseTele1 ;
    @FXML private Text ErreurClientEntrepriseTele2 ;
    @FXML private Text ErreurClientEntrepriseMail ;
    @FXML private Text ErreurClientEntrepriseFax ;
    @FXML private Text ErreurClientEntrepriseContactNom ;
    @FXML private Text ErreurClientEntrepriseContactPrenom ;
    @FXML private Text ErreurClientEntrepriseContactCIN ;
    @FXML private Text ErreurClientEntrepriseContactMail ;
    @FXML private Text ErreurClientEntrepriseContactTele1 ;
    @FXML private Text ErreurClientEntrepriseContactTele2 ;
    
    @FXML private TextField ChampClientEntrepriseNom;
    @FXML private TextField ChampClientEntrepriseGerant ;
    @FXML private TextField ChampClientEntrepriseMatricule;
    @FXML private TextField ChampClientEntrepriseAdresse;
    @FXML private TextField ChampClientEntreprisePostale;
    @FXML private TextField ChampClientEntrepriseTele1;
    @FXML private TextField ChampClientEntrepriseTele2;
    @FXML private TextField ChampClientEntrepriseMail;
    @FXML private TextField ChampClientEntrepriseFax;
    @FXML private TextField ChampClientEntrepriseContactNom;
    @FXML private TextField ChampClientEntrepriseContactPrenom;
    @FXML private TextField ChampClientEntrepriseContactCIN;
    @FXML private TextField ChampClientEntrepriseContactMail;
    @FXML private TextField ChampClientEntrepriseContactTele1;
    @FXML private TextField ChampClientEntrepriseContactTele2;
    
    
    ClientDB clientDB = new ClientDB();
    ClientEntrepriseDB EntrepriseCltDB = new ClientEntrepriseDB();
    
    ClientEntreprise entreprise = new ClientEntreprise();
    ClientEntrepriseContact contactEtr = new ClientEntrepriseContact();
    
    contro ctl= new contro() ;
    
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        RadioButtonSexeFemme.setUserData("0");
        RadioButtonSexeHomme.setUserData("1");
        
    }
    
    
    public void setDataClient(String codeclt)
    {
        AnchorPaneModifierCltEntreprise.setVisible(false);
        AnchorPaneModifierCltPersonne.setVisible(true);
        
        Client client = clientDB.getClient(codeclt);
        
        Codeclt.setText(codeclt);
        Nomclt.setText(client.getNom()+" "+client.getPrenom());
        
        AjouterClientCode.setText(client.getCodeclient());
        AjouterClientCIN.setText(client.getCinString());
        AjouterClientNomComplet.setText(client.getNomcomplet());
        AjouterClientNom.setText(client.getNom());
        AjouterClientPrenom.setText(client.getPrenom());
        AjouterClientNaissance.setValue(Adaptateur.StringToLocalDate(client.getNaissance().toString()));
        AjouterClientTeleFixe.setText(client.getTelefixString());
        AjouterClientTeleMobile.setText(client.getTelemobileString());
        AjouterClientAdresse.setText(client.getAdresse());
        AjouterClientCodePostal.setText(client.getCodepostal());
        AjouterClientMail.setText(client.getMail());
        if(client.getSexe() == 1){ RadioButtonSexeHomme.setSelected(true); }
        if(client.getSexe() == 0){ RadioButtonSexeFemme.setSelected(true); }
    }
    
    
    
    @FXML
    private void UpdateClientButtonAction(ActionEvent event) throws IOException 
    {
        Client client = new Client();
        if(!this.ControlesClient())
        {
            client.setCinString(AjouterClientCIN.getText());
            client.setCodeclientString(AjouterClientCode.getText());
            client.setNomcomplet(AjouterClientNomComplet.getText());
            client.setNom(AjouterClientNom.getText());
            client.setPrenom(AjouterClientPrenom.getText());
            client.setNaissanceDatePicker(AjouterClientNaissance.getValue());
            client.setTelefixString(AjouterClientTeleFixe.getText());
            client.setTelemobileString(AjouterClientTeleMobile.getText());
            client.setSexeString(groupesexe.getSelectedToggle().getUserData().toString());
            client.setAdresse(AjouterClientAdresse.getText());
            client.setCodepostal(AjouterClientCodePostal.getText());
            client.setMail(AjouterClientMail.getText());
            
            if(clientDB.updateClient(client))
            {
                
                FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneModifierCltPersonne);
                ft.setFromValue(1.0);
                ft.setToValue(0.0);
                ft.play();
                ft.setOnFinished(new EventHandler<ActionEvent>() {
                    //message de succés    
                    @Override
                    public void handle(ActionEvent event) {
                        StackPaneSucessCltPersonne.setVisible(true);
                    }
                });
                
            }
            
        }
    
    }
    
    private boolean ControlesClient()
    {
        boolean result ;
        
       AjouterClientCode.setStyle("-fx-border-color:transparent;");
       ErreurCode.setText("");
       if((AjouterClientCIN.getText().length()!= 8) || (ctl.isNumericNotnull(AjouterClientCIN.getText()))){
          ErreurCIN.setText("CIN doit être 8 numéro");
          AjouterClientCIN.setStyle("-fx-border-color:#f20606;");
          result= true ; 
       }
       else{
           
            ErreurCIN.setText("");
            AjouterClientCIN.setStyle("-fx-border-color: transparent;");
            if(AjouterClientNomComplet.getText().length()<10){
                ErreurNomComplet.setText("Client doit dépasser 10 catactaire");
                AjouterClientNomComplet.setStyle("-fx-border-color:#f20606;");
                result= true ; 
            }
            else{
                ErreurNomComplet.setText("");
                AjouterClientNomComplet.setStyle("-fx-border-color: transparent;");
                if(AjouterClientPrenom.getText().length()<3){
                    AjouterClientPrenom.setStyle("-fx-border-color:#f20606;");
                    ErreurPrenom.setText("le prénom doit dépasser 3 caractaire");
                    result= true ; 
                }
                else{
                    ErreurPrenom.setText("");
                    AjouterClientPrenom.setStyle("-fx-border-color: transparent;");
                    if(AjouterClientNom.getText().length()<3){
                        AjouterClientNom.setStyle("-fx-border-color:#f20606;");
                        ErreurNom.setText("Prénom doit dépasser 3 caractaire");
                        result= true ; 
                    }
                    else{
                        AjouterClientNom.setStyle("-fx-border-color: transparent;");
                        ErreurNom.setText("");
                        if(AjouterClientNaissance.getValue()==null){
                            AjouterClientNaissance.setStyle("-fx-border-color:#f20606;");
                            ErreurNaissance.setText("Date de naissance vide");
                            result= true ; 
                        }
                        else{
                            AjouterClientNaissance.setStyle("-fx-border-color: transparent;");
                            ErreurNaissance.setText("");
                            if(ctl.isNumericNotnull(AjouterClientTeleFixe.getText())){
                                AjouterClientTeleFixe.setStyle("-fx-border-color:#f20606;");
                                ErreurTeleFixe.setText("tele doit être numéro");
                                result= true ;
                            }
                            else{
                                AjouterClientTeleFixe.setStyle("-fx-border-color: transparent;");
                                ErreurTeleFixe.setText("");
                                if(AjouterClientTeleMobile.getText() != ""){
                                    if(ctl.isNumeric(AjouterClientTeleMobile.getText())){
                                        AjouterClientTeleMobile.setStyle("-fx-border-color:#f20606;");
                                        ErreurTeleMobile.setText("tele doit être numéro");
                                        result= true ;
                                    }
                                    else{
                                        AjouterClientTeleMobile.setStyle("-fx-border-color: transparent;");
                                        ErreurTeleMobile.setText("");
                                    }
                                }
                                if(groupesexe.getSelectedToggle()== null){
                                        ErreurSexe.setText("Veuillez sélectionner le sexe");
                                        result= true ;
                                    }
                                    else{
                                        ErreurSexe.setText("");
                                            if(AjouterClientAdresse.getText().length()<4){
                                                AjouterClientAdresse.setStyle("-fx-border-color: #f20606;");
                                                ErreurAdresse.setText("Adresse doit dépasser 4 caractaire");
                                                result= true ;
                                            }
                                            else{
                                                AjouterClientAdresse.setStyle("-fx-border-color: transparent;");
                                                ErreurAdresse.setText("");
                                                if(ctl.isNumeric(AjouterClientCodePostal.getText())){
                                                    AjouterClientCodePostal.setStyle("-fx-border-color: #f20606;");
                                                    ErreurCodePostal.setText("code doit être numéro");
                                                    result= true ;
                                                }
                                                else{
                                                    AjouterClientCodePostal.setStyle("-fx-border-color: transparent;");
                                                    ErreurCodePostal.setText("");
                                                    if(AjouterClientMail.getText().length()> 0){
                                                        if(AjouterClientMail.getText().indexOf("@")< 0){
                                                            AjouterClientMail.setStyle("-fx-border-color: #f20606;");
                                                            ErreurMail.setText("invalide mail");
                                                            result= true ;
                                                        }
                                                        else{
                                                            AjouterClientMail.setStyle("-fx-border-color: transparent;");
                                                            ErreurMail.setText("");
                                                            result= false ;
                                                        }
                                                    }
                                                    else{
                                                         result= false ;
                                                    }
                                                }
                                                
                                            }
                                        }
                                    }
                            }
                        }
                    }
                }
               
           }
       
        return result ; 
    }
    
    /**********************Clt Entreprise******************************/
    
    public void setDataEntreprise(String codeEtr)
    {
        
        AnchorPaneModifierCltPersonne.setVisible(false);
        AnchorPaneModifierCltEntreprise.setVisible(true);
        entreprise = EntrepriseCltDB.GetClientEtr(codeEtr);
        
        Codeclt.setText(codeEtr);
        Nomclt.setText(entreprise.getNom());
        
        ChampClientEntrepriseNom.setText(entreprise.getNom());
        ChampClientEntrepriseGerant.setText(entreprise.getGerant()) ;
        ChampClientEntrepriseMatricule.setText(entreprise.getMatricule());
        ChampClientEntrepriseAdresse.setText(entreprise.getAdresse());
        ChampClientEntreprisePostale.setText(entreprise.getPostalString());
        ChampClientEntrepriseTele1.setText(entreprise.getTele1String());
        ChampClientEntrepriseTele2.setText(entreprise.getTele2String());
        ChampClientEntrepriseMail.setText(entreprise.getMail());
        ChampClientEntrepriseFax.setText(entreprise.getFaxString());
        
        contactEtr = entreprise.getContact();
        ChampClientEntrepriseContactNom.setText(contactEtr.getNom());
        ChampClientEntrepriseContactPrenom.setText(contactEtr.getPrenom());
        ChampClientEntrepriseContactCIN.setText(contactEtr.getCINString());
        ChampClientEntrepriseContactMail.setText(contactEtr.getMail());
        ChampClientEntrepriseContactTele1.setText(contactEtr.getTele1String());
        ChampClientEntrepriseContactTele2.setText(contactEtr.getTele2String());
    
    }
    
    @FXML
    private void UpdateClientEntrepriseButtonAction(ActionEvent event) throws IOException 
    {
        if(!ControlesEtr()){
           if(!ControlesEtrContact()){
                
                entreprise.setNom(ChampClientEntrepriseNom.getText());
                entreprise.setGerant(ChampClientEntrepriseGerant.getText());
                entreprise.setMatricule(ChampClientEntrepriseMatricule.getText());
                entreprise.setAdresse(ChampClientEntrepriseAdresse.getText());
                entreprise.setPostaleString(ChampClientEntreprisePostale.getText());
                entreprise.setTele1String(ChampClientEntrepriseTele1.getText());
                entreprise.setTele2String(ChampClientEntrepriseTele2.getText());
                entreprise.setMail(ChampClientEntrepriseMail.getText());
                entreprise.setFaxString(ChampClientEntrepriseFax.getText());
                
                contactEtr.setNom(ChampClientEntrepriseContactNom.getText());
                contactEtr.setPrenom(ChampClientEntrepriseContactPrenom.getText());
                contactEtr.setCINString(ChampClientEntrepriseContactCIN.getText());
                contactEtr.setTele1String(ChampClientEntrepriseContactTele1.getText());
                contactEtr.setTele2String(ChampClientEntrepriseContactTele2.getText());
                contactEtr.setMail(ChampClientEntrepriseContactMail.getText());
                
                entreprise.setContact(contactEtr);
                
                if(EntrepriseCltDB.updateEntreprise(entreprise))
                {
                    FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneModifierCltEntreprise);
                    ft.setFromValue(1.0);
                    ft.setToValue(0.0);
                    ft.play();
                    ft.setOnFinished(new EventHandler<ActionEvent>() {
                        //message de succés    
                        @Override
                        public void handle(ActionEvent event) {
                            StackPaneSucessCltPersonne.setVisible(true);
                        }
                    });

                }
            }
        }
    }
    
    
    
    private boolean ControlesEtr()
    {
        
        boolean result=false ;
        
        if(ChampClientEntrepriseNom.getText().length()<3){
            ChampClientEntrepriseNom.setStyle("-fx-border-color:#f20606;");
            ErreurClientEntrepriseNom.setText("Nom doit dépasser 3 caractère");
            result= true ;
        }
        else{
                ChampClientEntrepriseNom.setStyle("-fx-border-color:transparent;");
                ErreurClientEntrepriseNom.setText("");
                if(ChampClientEntrepriseGerant.getText().length()<3){
                    ChampClientEntrepriseGerant.setStyle("-fx-border-color:#f20606;");
                    ErreurClientEntrepriseGerant.setText("Gérant doit dépasser 3 caractère");
                    result= true ;
                }
                else{
                    ChampClientEntrepriseGerant.setStyle("-fx-border-color:transparent;");
                    ErreurClientEntrepriseGerant.setText("");
                    if(ctl.isNumeric(ChampClientEntrepriseMatricule.getText())){
                        ChampClientEntrepriseMatricule.setStyle("-fx-border-color:#f20606;");
                        ErreurClientEntrepriseMatricule.setText("Matricule doit être numéro");
                        result= true ;
                    }
                    else{
                        ChampClientEntrepriseMatricule.setStyle("-fx-border-color:transparent;");
                        ErreurClientEntrepriseMatricule.setText("");
                        if(ChampClientEntrepriseAdresse.getText().length()<3){
                            ChampClientEntrepriseAdresse.setStyle("-fx-border-color:#f20606;");
                            ErreurClientEntrepriseAdresse.setText("L'adresse doit dépasser 3 caractère");
                            result= true ;
                        }
                        else{
                            ChampClientEntrepriseAdresse.setStyle("-fx-border-color:transparent;");
                            ErreurClientEntrepriseAdresse.setText("");

                            if(ctl.isNumeric(ChampClientEntreprisePostale.getText())){
                                ChampClientEntreprisePostale.setStyle("-fx-border-color:#f20606;");
                                ErreurClientEntreprisePostale.setText("code doit être numéro"); 
                                result= true ;
                            }
                            else{
                                ChampClientEntreprisePostale.setStyle("-fx-border-color:transparent;");
                                ErreurClientEntreprisePostale.setText("");
                                if(ctl.isNumericNotnull(ChampClientEntrepriseTele1.getText())){
                                    ChampClientEntrepriseTele1.setStyle("-fx-border-color:#f20606;");
                                    ErreurClientEntrepriseTele1.setText("Tele doit être numéro");  
                                    result= true ;
                                }
                                else{
                                    ChampClientEntrepriseTele1.setStyle("-fx-border-color:transparent;");
                                    ErreurClientEntrepriseTele1.setText("");
                                    if(ctl.isNumeric(ChampClientEntrepriseTele2.getText())){
                                        ChampClientEntrepriseTele2.setStyle("-fx-border-color:#f20606;");
                                        ErreurClientEntrepriseTele2.setText("Tele2 doit être numéro");
                                        result= true ;
                                    }
                                    else{
                                        ChampClientEntrepriseTele2.setStyle("-fx-border-color:transparent;");
                                        ErreurClientEntrepriseTele2.setText("");
                                        if(ctl.isNumeric(ChampClientEntrepriseFax.getText())){
                                            ChampClientEntrepriseFax.setStyle("-fx-border-color:#f20606;");
                                            ErreurClientEntrepriseFax.setText("Fax doit être numéro");
                                            result= true ;
                                            }
                                        else{
                                            ChampClientEntrepriseFax.setStyle("-fx-border-color:transparent;");
                                            ErreurClientEntrepriseFax.setText("");
                                            if(ChampClientEntrepriseMail.getText().length()>0 && ChampClientEntrepriseMail.getText().indexOf("@")< 0){
                                                ChampClientEntrepriseMail.setStyle("-fx-border-color:#f20606;");
                                                ErreurClientEntrepriseMail.setText("invalide mail");
                                                result= true ;
                                            }
                                            else{
                                                ChampClientEntrepriseMail.setStyle("-fx-border-color:transparent;");
                                                ErreurClientEntrepriseMail.setText("");
                                            }
                                            
                                            }
                                        }
                                }
                            }
                        }
                    }
                }
            }
        return result ; 
    }
        
        
        
        
        
    private boolean ControlesEtrContact(){
        boolean result=false ;
        if(ChampClientEntrepriseContactNom.getText().length()<4){
            ChampClientEntrepriseContactNom.setStyle("-fx-border-color:#f20606;");
            ErreurClientEntrepriseContactNom.setText("Nom doit dépasser 4 caractère");
            result= true ;
        }
        else{
            ChampClientEntrepriseContactNom.setStyle("-fx-border-color:transparent;");
            ErreurClientEntrepriseContactNom.setText("");
            if(ChampClientEntrepriseContactPrenom.getText().length()<4){
                ChampClientEntrepriseContactPrenom.setStyle("-fx-border-color:#f20606;");
                ErreurClientEntrepriseContactPrenom.setText("Prénom doit dépasser 4 caractère");
                result= true ;
            }
            else{
                ChampClientEntrepriseContactPrenom.setStyle("-fx-border-color:transparent;");
                ErreurClientEntrepriseContactPrenom.setText("");
                if(ctl.isNumeric(ChampClientEntrepriseContactCIN.getText())){
                    ChampClientEntrepriseContactCIN.setStyle("-fx-border-color:#f20606;");
                    ErreurClientEntrepriseContactCIN.setText("CIN doit être un numéro");
                    result= true ;
                }
                else{
                    ChampClientEntrepriseContactCIN.setStyle("-fx-border-color:transparent;");
                    ErreurClientEntrepriseContactCIN.setText("");
                    if(ChampClientEntrepriseContactMail.getText().length()>0){
                        if(ChampClientEntrepriseContactMail.getText().indexOf("@")< 0){
                            ChampClientEntrepriseContactMail.setStyle("-fx-border-color:#f20606;");
                            ErreurClientEntrepriseContactMail.setText("invalide mail");
                            result= true ;
                        }
                        else{
                            ChampClientEntrepriseContactMail.setStyle("-fx-border-color:transparent;");
                            ErreurClientEntrepriseContactMail.setText("");
                        }
                    }
                    if(ctl.isNumericNotnull(ChampClientEntrepriseContactTele1.getText())){
                            ChampClientEntrepriseContactTele1.setStyle("-fx-border-color:#f20606;");
                            ErreurClientEntrepriseContactTele1.setText("Tele doit être un numéro");
                            result= true ;
                        }
                        else{
                            ChampClientEntrepriseContactTele1.setStyle("-fx-border-color:transparent;");
                            ErreurClientEntrepriseContactTele1.setText("");
                            if(ctl.isNumeric(ChampClientEntrepriseContactTele2.getText())){
                                ChampClientEntrepriseContactTele2.setStyle("-fx-border-color:#f20606;");
                                ErreurClientEntrepriseContactTele2.setText("Tele doit être un numéro");
                                result= true ;
                            }
                            else{
                                ChampClientEntrepriseContactTele2.setStyle("-fx-border-color:transparent;");
                                ErreurClientEntrepriseContactTele2.setText("");
                            }
                        }
                }

            }

        }
    return result ;     
    }    
        
        
        
        
        
        
}
