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

import Controllers.Dialog.Dialog;
import Controllers.Traitement.Adaptateur;
import Models.Produit.ListeProduit;
import Controllers.Traitement.contro;
import Models.BonLivraisonClt.BonLivraisonClt;
import Models.BonLivraisonClt.BonLivraisonCltDB;
import Models.BonLivraisonClt.BonLivraisonCltProduitList;
import Models.CommandeClt.CommandeClt;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.text.Text;
import Models.Client.Client;
import Models.Client.ClientEntreprise;
import Models.Client.ClientPassager;
import Models.CommandeClt.CommandeCltDB;
import java.io.IOException;
import java.time.LocalDate;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.util.Callback;


/**
 * FXML Controller class
 *
 * @author Maher
 */
public class BonLivraisonCltAjouterEtape2Controller implements Initializable {

    @FXML private AnchorPane AnchorPaneBLCltAjouterEtape2;
    
    @FXML private Text  TextType;
    @FXML private Text  TextCode;
    @FXML private Text  TextNom;
    @FXML private Text  TextPrenom;
    @FXML private Text  TextAdresse;
    @FXML private Text  TextDateNaissance;
    @FXML private Text  TextTele1;
    @FXML private Text  TextTele2;
    @FXML private Text  TxtPrenom;
    @FXML private Text  TxtDateNaissance;
    
    @FXML public TableView<BonLivraisonCltProduitList> TableViewBonLivraisonCltProduitList;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColReference;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColDesignation ;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColMarque;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColCategorie;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColProdDisponible;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColQuantite;
    @FXML public TableColumn<BonLivraisonCltProduitList ,String> TabColPrixTTC;
    
    @FXML private TextField TextFieldHeurLivraison ;
    @FXML private TextField TextFieldNumTele1 ;
    @FXML private TextField TextFieldNumTele2 ;
    @FXML private TextField TextFieldTransporteur ;
    @FXML private TextField TextFieldPoidProduit;
    @FXML private DatePicker DatePickerDateLivraison;
    @FXML private TextArea TextAreaAdressLivraison;
    @FXML private TextField TextFieldFraisTransport ;
    
    ObservableList<BonLivraisonCltProduitList> ObservableListBLCltPro = FXCollections.observableArrayList();
    BonLivraisonClt BonLivraison = new BonLivraisonClt();
    Text Txt = new Text();
   
    contro clt = new contro();
    
    public CommandeClt Commande;
    
    boolean DisponibleProduit = true;
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        TabColReference.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("Reference"));
        TabColDesignation.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("Designation"));
        TabColMarque.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("Marque"));
        TabColCategorie.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("Categorie"));
        
        TabColProdDisponible.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("ProdDisponible"));
        TabColProdDisponible.setStyle( "-fx-alignment: CENTER;");
        TabColProdDisponible.getStyleClass().add("Center");
        
        TabColQuantite.setStyle( "-fx-alignment: CENTER;");
        TabColQuantite.getStyleClass().add("Center");
        TabColQuantite.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("QuantiteProd"));
        
        TabColPrixTTC.setStyle( "-fx-alignment: CENTER;");
        TabColPrixTTC.getStyleClass().add("Center");
        TabColPrixTTC.setCellValueFactory(new PropertyValueFactory<BonLivraisonCltProduitList, String>("PrixTTC"));
    
        TabColProdDisponible.setCellFactory(new Callback<TableColumn<BonLivraisonCltProduitList,String>,TableCell<BonLivraisonCltProduitList,String>>(){        
            @Override
            public TableCell<BonLivraisonCltProduitList, String> call(TableColumn<BonLivraisonCltProduitList, String> param) {                
                TableCell<BonLivraisonCltProduitList, String> cell = new TableCell<BonLivraisonCltProduitList, String>(){
                    @Override
                    public void updateItem(String item, boolean empty) {
                        if(item!= null && item.equals("1")){
                            Text text = new Text("Oui");
                            text.setFill(Color.web("#428BCA"));
                            text.setFont(Font.font("Arial", FontWeight.BOLD, 14));
                            setGraphic(text);
                        }else if(item!= null && item.equals("0")){
                            DisponibleProduit = false;
                            Text text = new Text("Non");
                            text.setFill(Color.web("#EA4335"));
                            text.setFont(Font.font("Arial", FontWeight.BOLD, 14));
                            setGraphic(text);
                        }else{
                            setGraphic(null);
                        }
                    }
                };                           
                return cell;
            }
        });
        
        TextFieldFraisTransport.setText("0");
    }    
    
    @FXML
    private void CreateBonLivraisonCltButtonAction(ActionEvent event) throws IOException {
        if( clt.ContrNumerique(TextFieldNumTele1, Txt) &&
            clt.ContrNumerique(TextFieldNumTele2, Txt) &&
            clt.ContrNumerique(TextFieldPoidProduit, Txt) &&
            clt.ContrNull(TextAreaAdressLivraison, Txt)&&
            clt.ContrHour(TextFieldHeurLivraison, Txt) ){
            if(DisponibleProduit){
                NextEtap();
            }else{
                final Dialog MyDialog= new Dialog();
                Node node = MyDialog.DialogNotification();
                MyDialog.Titre.setText("Attention produit non disponible en stock");
                MyDialog.Message.setText("Lorsque vous cliquez sur Valider votre stock sera négative");
                MyDialog.DefaultAnnuler();
                MyDialog.Valider.setOnAction(new EventHandler<ActionEvent>() {
                    @Override
                    public void handle(ActionEvent event) {
                        MyDialog.PaneDialog.setVisible(false);
                        NextEtap();
                    }
                });
                MyDialog.Show(node);
            }
        }
    }
    
    public void SetBonLivraision(){
        BonLivraison.setTele1(TextFieldNumTele1.getText());
        BonLivraison.setTele2(TextFieldNumTele2.getText());
        BonLivraison.setHeurLivraison(TextFieldHeurLivraison.getText());
        if(DatePickerDateLivraison.getValue()!=null){
            BonLivraison.setDateLivraisonPreveu(DatePickerDateLivraison.getValue().toString());
        }
        BonLivraison.setTransporteur(TextFieldTransporteur.getText());
        BonLivraison.setPoidProduit(TextFieldPoidProduit.getText());
        BonLivraison.setAdresseLivraison(TextAreaAdressLivraison.getText());
        BonLivraison.setFrais(TextFieldFraisTransport.getText());
        
        if(clt.isNumericNotnull(TextFieldFraisTransport.getText())){
            float PayerAFraisT = Adaptateur.StringToFloat(BonLivraison.getNetAPayer());
            float FraisTransport = Adaptateur.StringToFloat(TextFieldFraisTransport.getText());
            float NetAPayer = PayerAFraisT + FraisTransport;
            BonLivraison.setNetAPayer(Adaptateur.floatDeleZero(NetAPayer));
        }
        
    }
    
    
    public void NextEtap(){
        try {
            ConvertCommandeToBonLivraision();
            SetBonLivraision();
            
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape3.fxml"));
            Parent NodeBonLivraisonCltAjouterEtape3 =  (Parent)fxmlLoader.load();
            
            BonLivraisonCltAjouterEtape3Controller BonLivraisonCltAjouterEtape3= fxmlLoader.getController();
            BonLivraisonCltAjouterEtape3.BonLivraisonStep2ToStep3(BonLivraison, Commande.getCodecommandeclt());
            
            AnchorPaneBLCltAjouterEtape2.getChildren().clear();
            AnchorPaneBLCltAjouterEtape2.getChildren().add(NodeBonLivraisonCltAjouterEtape3);
        } catch (IOException ex) {
            Logger.getLogger(BonLivraisonCltAjouterEtape2Controller.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    public void ConvertCommandeToBonLivraision(){
        BonLivraison.setIdCommande(Commande.getCodecommandeclt());
        //0 Personne  1 Entreprise 2 Passager
        Integer TypeClt = Commande.getTypeClient();
        BonLivraison.setTypeClient(TypeClt);
        if(TypeClt == 0){
            BonLivraison.setCltPersonne(Commande.getCltPersonne());
            BonLivraison.setAdresseLivraison(Commande.CltPersonne.getAdresse());
        }else if(TypeClt == 1){
            BonLivraison.setCltEntreprise(Commande.getCltEntreprise());
            BonLivraison.setAdresseLivraison(Commande.CltEntreprise.getAdresse());
        }else if(TypeClt == 2){
            BonLivraison.setCltPassager(Commande.getCltPassager());
            BonLivraison.setAdresseLivraison(Commande.CltPassager.getAdresse());
        }
    
        BonLivraison.setListeproduit(Commande.getListeproduit());
        BonLivraison.setTotalHorsTaxNet(Commande.getTotalHorsTaxNet());
        BonLivraison.setTotalTVA(Commande.getTotalTVA());
        BonLivraison.setRemise(Commande.getRemise());
        BonLivraison.setNetAPayer(Commande.getNetAPayer());
    }
    
    
    
    public void SetDataCommandeClt(String CodeCommande){
        CommandeCltDB CommandeDB= new CommandeCltDB();
        Commande = CommandeDB.getCommandeClt(CodeCommande);
        Integer TypeClient = Commande.getTypeClient();
        if(TypeClient == 0){
            Client Personne= Commande.getCltPersonne();
            TextType.setText("ancien client");
            TextCode.setText(Personne.getCodeclient());
            TextNom.setText(Personne.getNom());
            TextPrenom.setText(Personne.getPrenom());        
            TextAdresse.setText(Personne.getAdresse());
            TextAreaAdressLivraison.setText(Personne.getAdresse());
            TextDateNaissance.setText(Adaptateur.NormalDateFormat(Personne.getNaissance().toString()));        
            TextTele1.setText(Personne.getTelefixString());        
            TextTele2.setText(Personne.getTelemobileString());
            TextFieldNumTele1.setText(Personne.getTelefixString());
            TextFieldNumTele2.setText(Personne.getTelemobileString());
        }else if(TypeClient == 1){
            ClientEntreprise Entreprise = Commande.getCltEntreprise();
            TextType.setText("Entrepise");
            TextCode.setText(Entreprise.getCodeString());
            TxtPrenom.setText("Matricule");
            TextPrenom.setText(Entreprise.getMatricule());  
            TxtDateNaissance.setText("E-Mail");
            TextDateNaissance.setText(Entreprise.getMail());
            TextNom.setText(Entreprise.getNom());
            TextAdresse.setText(Entreprise.getAdresse()); 
            TextAreaAdressLivraison.setText(Entreprise.getAdresse());
            TextTele1.setText(Entreprise.getTele1String());        
            TextTele2.setText(Entreprise.getTele2String());
            TextFieldNumTele1.setText(Entreprise.getTele1String());
            TextFieldNumTele2.setText(Entreprise.getTele2String());
        }else if(TypeClient == 2){
            ClientPassager Passager = Commande.getCltPassager();
            TextType.setText("Passager");
            TextCode.setText(Passager.getCodeclient());
            TextNom.setText(Passager.getNom());
            TextPrenom.setText(Passager.getPrenom());        
            TextAdresse.setText(Passager.getAdresse());   
            TextAreaAdressLivraison.setText(Passager.getAdresse());
            TextDateNaissance.setText(Passager.getNaissance());        
            TextTele1.setText(Passager.getTelefixString());        
            TextTele2.setText(Passager.getTelemobileString());
            TextFieldNumTele1.setText(Passager.getTelefixString());
            TextFieldNumTele2.setText(Passager.getTelemobileString());
        }
        
        DatePickerDateLivraison.setValue(LocalDate.now());
        
        SetDataListeproduit();
    }
    
    public void SetDataListeproduit(){
        ObservableList<ListeProduit> DataListeproduit = Commande.getListeproduit();
        
        BonLivraisonCltDB BonLivraisonDB= new BonLivraisonCltDB();
        ObservableListBLCltPro = BonLivraisonDB.GetListBonLivraisonCltSotck(DataListeproduit);
        
        TableViewBonLivraisonCltProduitList.setItems(ObservableListBLCltPro);
    
    }
}
