/*
 * 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.Dialog.ShowDialog;
import Controllers.Traitement.contro;
import Models.Client.Client;
import Models.Client.ClientDB;
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.DatePicker;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
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 AjouterClientPersonneController implements Initializable {
    
    @FXML private AnchorPane AnchorPaneAjouterClientPersonne ;
    @FXML private AnchorPane AnchorPaneAjouterCltPersonne ;
    @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 AjouterClientSexeHomme;
    @FXML private RadioButton AjouterClientSexeFemme;
   
    
    @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 ;
    
    contro ctl= new contro() ;
    Client Myclient = new Client();
    ClientDB dbclient = new ClientDB();
    
    
    @FXML
    public void AjouterClientPersonneButtonAction(ActionEvent event) throws IOException {
        
        if(!this.Controles()){
        
            this.getclient();   //recupératiion des données dont l'objet Myclient 
            
            if(dbclient.addClient(Myclient)){   //l'insertion des données dont la Base des données et afficher le message du succés
            
               
                FadeTransition ft = new FadeTransition(Duration.millis(400), AnchorPaneAjouterCltPersonne);
                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(file.toURI().toString()+"successfully.png");
                    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-success");
                    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);

                    AnchorPaneAjouterClientPersonne.setLeftAnchor(stackpane, 83.0);
                    AnchorPaneAjouterClientPersonne.setRightAnchor(stackpane, 83.0);
                    AnchorPaneAjouterClientPersonne.setTopAnchor(stackpane,220.0);
                    AnchorPaneAjouterClientPersonne.setBottomAnchor(stackpane,220.0);       
                    AnchorPaneAjouterClientPersonne.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), AnchorPaneAjouterCltPersonne);
                        ft.setFromValue(0.0);
                        ft.setToValue(1.0);
                        ft.play();
                        restechamp();
                        }
                    });
                }
                });
           
            }
            else{
                ShowDialog SD = new ShowDialog();
                SD.ShowAletDialog();
            }
            
        }
                              
                         
    }
    
    private void getclient(){
        Myclient.setCinString(AjouterClientCIN.getText());
        Myclient.setCodeclientString(AjouterClientCode.getText());
        Myclient.setNomcomplet(AjouterClientNomComplet.getText());
        Myclient.setNom(AjouterClientNom.getText());
        Myclient.setPrenom(AjouterClientPrenom.getText());
        Myclient.setNaissanceDatePicker(AjouterClientNaissance.getValue());
        Myclient.setTelefixString(AjouterClientTeleFixe.getText());
        Myclient.setTelemobileString(AjouterClientTeleMobile.getText());
        Myclient.setSexeString(groupesexe.getSelectedToggle().getUserData().toString());
        Myclient.setAdresse(AjouterClientAdresse.getText());
        Myclient.setCodepostal(AjouterClientCodePostal.getText());
        Myclient.setMail(AjouterClientMail.getText());
    }
    
    
    //methode qui afficher une fenêtre de notification "code client générer par le systeme
    private void getidclt(){
        final Notification notification = new Notification();
        
        notification.DetailMSG.getChildren().clear();
        
        final String ch = String.valueOf(dbclient.getidClient()+1) ;
        Text text1 = new Text();
        text1.setText("Code client 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 client 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);
                AjouterClientCode.setText(ch);
            }
        });
        notification.ShowNotification();
    }
    
    
    
    //fider tous les champs du formulaires
    private void restechamp(){
        AjouterClientCIN.setText("");
        AjouterClientCode.setText("");
        AjouterClientNomComplet.setText("");
        AjouterClientNom.setText("");
        AjouterClientPrenom.setText("");
        AjouterClientNaissance.setValue(null);
        AjouterClientTeleFixe.setText("");
        AjouterClientTeleMobile.setText("");
        AjouterClientCodePostal.setText("");
        AjouterClientAdresse.setText("");
        AjouterClientMail.setText("");
        AjouterClientSexeHomme.setSelected(false);
        AjouterClientSexeFemme.setSelected(false);
    }
    
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        AjouterClientSexeHomme.setUserData("Homme");
        AjouterClientSexeFemme.setUserData("Femme");
        
        //lors de clique sur le textfilde CIN
        AjouterClientCIN.setOnKeyReleased(new EventHandler<KeyEvent>() {
        public void handle(KeyEvent ke) {
            try {// if is number
                Integer.parseInt(AjouterClientCIN.getText());
                int cin =Integer.parseInt(AjouterClientCIN.getText());
                if(dbclient.verifyCinClient(cin)){
                    ErreurCIN.setText("CIN existe déja");
                    AjouterClientCIN.setStyle("-fx-border-color:#f20606;");
                    }
                else{
                    ErreurCIN.setText("");
                    AjouterClientCIN.setStyle("-fx-border-color: transparent;");
                    }
                } 
            catch (NumberFormatException e) {
                ErreurCIN.setText("CIN doit être 8 numéro");
                AjouterClientCIN.setStyle("-fx-border-color:#f20606;");
            }
        }
            
        });
        
        
        
    }

    
    
    private boolean Controles(){
        boolean result ;
        if(AjouterClientCode.getText().length()== 0){                   //code client vide
            this.getidclt();
            result= true ;
        }
        else if(ctl.isNumeric(AjouterClientCode.getText())){                //code client n'est pas un numero
            AjouterClientCode.setStyle("-fx-border-color:#f20606;");
            ErreurCode.setText("code client doit être numéro");
            result= true ;
        }
        else if(dbclient.verifyIdClient(Integer.parseInt(AjouterClientCode.getText()))){    //code client existe déja
            AjouterClientCode.setStyle("-fx-border-color:#f20606;");
            ErreurCode.setText("code client existe déja");
            result= true ;
        }
        else{
            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(dbclient.verifyCinClient(Integer.parseInt(AjouterClientCIN.getText()))){
                    ErreurCIN.setText("CIN existe déja");
                    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().length()>0){
                                            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 ; 
    }  
    
}
