/*
 * 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.Dialog.Notification;
import Controllers.Traitement.contro;
import Models.Client.ClientEntreprise;
import Models.Client.ClientEntrepriseContact;
import Models.Client.ClientEntrepriseContactDB;
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.geometry.Pos;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.util.Duration;

/**
 * FXML Controller class
 *
 * @author Maher
 */
public class AjouterClientEntrepriseController implements Initializable {
    
    @FXML private AnchorPane AnchorPaneAjouterClientEntreprise ;
    @FXML private AnchorPane AnchorPaneAjouterCltEntreprise ;
    
    @FXML private Text ErreurClientEntrepriseCode ;
    @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 ChampClientEntrepriseCode;
    @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;
   
    
    
    contro ctl= new contro() ;
    ClientEntreprise MyClientEntreprise = new ClientEntreprise();
    ClientEntrepriseContact MyClientEntrepriseContact = new ClientEntrepriseContact();
    ClientEntrepriseDB MyCltEtrDB = new ClientEntrepriseDB();
    ClientEntrepriseContactDB MyCltEtrCta = new ClientEntrepriseContactDB();
    
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
       //lors de clique sur le textfilde Code de l'entreprise
        ChampClientEntrepriseCode.setOnKeyReleased(new EventHandler<KeyEvent>() {
        public void handle(KeyEvent ke) {
            try {// if is number
                Integer.parseInt(ChampClientEntrepriseCode.getText());
                int cin =Integer.parseInt(ChampClientEntrepriseCode.getText());
                if(MyCltEtrDB.verifyCodeEntreprise(cin)){
                    ErreurClientEntrepriseCode.setText("Code entreprise existe déja");
                    ChampClientEntrepriseCode.setStyle("-fx-border-color:#f20606;");
                    }
                else{
                    ErreurClientEntrepriseCode.setText("");
                    ChampClientEntrepriseCode.setStyle("-fx-border-color: transparent;");
                    }
                } 
            catch (NumberFormatException e) {
                ErreurClientEntrepriseCode.setText("Code doit être un numéro");
                ChampClientEntrepriseCode.setStyle("-fx-border-color:#f20606;");
            }
        }
            
        });
    }
    
    
    
    
    
    @FXML
    public void AjouterClientEntrepriseButtonAction(ActionEvent event) throws IOException {
       if(!ControlesEtr()){
           if(!ControlesEtrContact()){
                //recupération des données dont l'objet
                this.getClientEntreprise();
                //l'insertion des données dont la Base des données et afficher le message du succés
                if(MyCltEtrDB.addEntreprise(MyClientEntreprise)){
                  this.getClientEntrepriseContact();
                  if(MyCltEtrCta.addClientEntrepriseContact(MyClientEntrepriseContact)){
                    FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltEntreprise);
                    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) {
                        Image success = new Image(getClass().getResourceAsStream("/Public/icon/successfully.png"));
                        ImageView iv1 = new ImageView();
                        iv1.setImage(success);

                        Text text= new Text();
                        text.setText("l'ajouter a été effectuée avec succès");
                        text.setFont(Font.loadFont(getClass().getResourceAsStream("/Public/Fonts/Raleway-SemiBold.ttf"), 20));

                        Button AddClient = new Button("OK");
                        AddClient.getStyleClass().add("btn-primary");
                        AddClient.setPrefSize(100, 30);

                        final StackPane stackpane = new StackPane();
                        stackpane.setLayoutX(140);
                        stackpane.setLayoutY(100);
                        stackpane.setPrefHeight(200);
                        stackpane.setPrefWidth(200);
                        stackpane.getChildren().add(iv1);
                        stackpane.getChildren().add(text);
                        stackpane.getChildren().add(AddClient);
                        StackPane.setAlignment(iv1, Pos.BASELINE_CENTER);
                        StackPane.setAlignment(text, Pos.TOP_CENTER);
                        StackPane.setAlignment(AddClient, Pos.CENTER);

                        AnchorPaneAjouterClientEntreprise.setLeftAnchor(stackpane, 83.0);
                        AnchorPaneAjouterClientEntreprise.setRightAnchor(stackpane, 83.0);
                        AnchorPaneAjouterClientEntreprise.setTopAnchor(stackpane,200.0);
                        AnchorPaneAjouterClientEntreprise.setBottomAnchor(stackpane,200.0);       
                        AnchorPaneAjouterClientEntreprise.getChildren().add(stackpane);

                        AddClient.setOnAction(new EventHandler<ActionEvent>() {     //supprimer le message du suucés et reaficher les formulaires  
                        @Override
                        public void handle(ActionEvent event) {
                            stackpane.setVisible(false);
                            FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltEntreprise);
                            ft.setFromValue(0.0);
                            ft.setToValue(1.0);
                            ft.play();
                            restechamp();
                            }
                        });
                    }
                    });
                  }   
                }
            }
        }
    }
    
    
    private void restechamp(){
        ChampClientEntrepriseCode.setText("");
        ChampClientEntrepriseNom.setText("");
        ChampClientEntrepriseGerant.setText("");
        ChampClientEntrepriseMatricule.setText("");
        ChampClientEntrepriseAdresse.setText("");
        ChampClientEntreprisePostale.setText("");
        ChampClientEntrepriseTele1.setText("");
        ChampClientEntrepriseTele2.setText("");
        ChampClientEntrepriseMail.setText("");
        ChampClientEntrepriseFax.setText("");
        ChampClientEntrepriseContactNom.setText("");
        ChampClientEntrepriseContactPrenom.setText("");
        ChampClientEntrepriseContactCIN.setText("");
        ChampClientEntrepriseContactMail.setText("");
        ChampClientEntrepriseContactTele1.setText("");
        ChampClientEntrepriseContactTele2.setText("");
    }
    
    
    private void getClientEntreprise(){
        MyClientEntreprise.setCodeString(ChampClientEntrepriseCode.getText());
        MyClientEntreprise.setNom(ChampClientEntrepriseNom.getText());
        MyClientEntreprise.setGerant(ChampClientEntrepriseGerant.getText());
        MyClientEntreprise.setMatricule(ChampClientEntrepriseMatricule.getText());
        MyClientEntreprise.setAdresse(ChampClientEntrepriseAdresse.getText());
        MyClientEntreprise.setPostaleString(ChampClientEntreprisePostale.getText());
        MyClientEntreprise.setTele1String(ChampClientEntrepriseTele1.getText());
        MyClientEntreprise.setTele2String(ChampClientEntrepriseTele2.getText());
        MyClientEntreprise.setMail(ChampClientEntrepriseMail.getText());
        MyClientEntreprise.setFaxString(ChampClientEntrepriseFax.getText());
    }
    
    private void getClientEntrepriseContact(){
        MyClientEntrepriseContact.setNom(ChampClientEntrepriseContactNom.getText());
        MyClientEntrepriseContact.setPrenom(ChampClientEntrepriseContactPrenom.getText());
        MyClientEntrepriseContact.setCINString(ChampClientEntrepriseContactCIN.getText());
        MyClientEntrepriseContact.setTele1String(ChampClientEntrepriseContactTele1.getText());
        MyClientEntrepriseContact.setTele2String(ChampClientEntrepriseContactTele2.getText());
        MyClientEntrepriseContact.setMail(ChampClientEntrepriseContactMail.getText());
        MyClientEntrepriseContact.setIdcltentreprise(MyClientEntreprise.getCode());
    }
    
    
    
    
    
    //methode qui afficher une fenêtre de notification "code client Etreprise générer par le systeme
    private void getidcltEtr(){
        if(MyCltEtrDB.getidClientEtr()>=0){
            final Notification notification = new Notification();
        
            notification.DetailMSG.getChildren().clear();

            final String ch = String.valueOf(MyCltEtrDB.getidClientEtr()+1) ;
            Text text1 = new Text();
            text1.setText("Code Entreprise vide \n \n");
            text1.setFont(Font.font("Arial", FontWeight.BOLD, 15));
            text1.setFill(Color.web("#363a38"));
            notification.DetailMSG.getChildren().add(text1);

            Text text2 = new Text();
            text2.setText("Voulez vous que system génére le code d'entreprise par le numéro suivant:");
            text2.setFont(Font.font("Arial", FontWeight.NORMAL, 15));
            text2.setFill(Color.web("#363a38"));
            notification.DetailMSG.getChildren().add(text2);

            Text text3 = new Text();
            text3.setText(ch);
            text3.setFont(Font.font("Arial", FontWeight.BOLD, 14));
            text3.setFill(Color.web("#363a38"));
            notification.DetailMSG.getChildren().add(text3);

            notification.bouttonOK.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    notification.stackpane.setVisible(false);
                    ChampClientEntrepriseCode.setText(ch);
                }
            });
            notification.ShowNotification();
        }
        
    }
    
    
    
    
    
    
    
    
    
    private boolean ControlesEtr(){
        
        boolean result=false ;
        
        if(ChampClientEntrepriseCode.getText().length()==0){
            this.getidcltEtr();
            result= true ;
        }
        else if(ctl.isNumericNotnull(ChampClientEntrepriseCode.getText())){
            ChampClientEntrepriseCode.setStyle("-fx-border-color:#f20606;");
            ErreurClientEntrepriseCode.setText("Code doit être un numéro");
            result= true ; 
        }
        else{
            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 ;     
    }
}
