package Controllers.CommandeClt;

import Controllers.BonLivraisonClt.BonLivraisonCltAjouterEtape2Controller;
import Models.Produit.ListeProduit;
import Controllers.Traitement.Adaptateur;
import Models.CommandeClt.CommandeClt;
import Models.CommandeClt.CommandeCltDB;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.concurrent.Service;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;


/**
 * @author Maher Ben Tili
 */
public class CommandeCltDetail implements Initializable {
    
    @FXML private AnchorPane PaneAjouter ;
    @FXML private AnchorPane AnchorPaneCommandeCltDetail ;
    @FXML private AnchorPane AnchorPaneLoadingCommandeDetail ;
    @FXML public AnchorPane AnchorPaneSucces ;
    @FXML public AnchorPane AnchorPaneInfoCommandeClt;
    @FXML private Text CodeCommande;
    @FXML private Text DateCreation;
    @FXML private Text Reglement;
    @FXML private Text NetAPayer;
    @FXML private Text TotalTVA;
    @FXML private Text CodeDevis;
    
    @FXML private Text TypeClt;
    @FXML private Text Nom;
    @FXML private Text Prenom;
    @FXML private Text Adresse;
    @FXML private Text TELE1;
    @FXML private Text TELE2;
    
    @FXML private Text TextPrenom ;
    @FXML private Text TextMatricule ;
    
    @FXML private TableView<ListeProduit> TableViewListeProduit ;
    @FXML private TableColumn<ListeProduit ,String> TabColReference;
    @FXML private TableColumn<ListeProduit ,String> TabColDesignation;
    @FXML private TableColumn<ListeProduit ,String> TabColQuantite ;
    @FXML private TableColumn<ListeProduit ,String> TabColPrixHT;
    @FXML private TableColumn<ListeProduit ,String> TabColRemise;
    @FXML private TableColumn<ListeProduit ,String> TabColTotalHT;
    @FXML private TableColumn<ListeProduit ,String> TabColTVA;
    @FXML private TableColumn<ListeProduit ,String> TabColTotalTTC;
    
    @FXML private Button ButtonCreationBonLivraison;
    
    private Service<Void> ThreadCommandeCltDetail;
    
    CommandeClt commandeClt;
    String idCommandeClt;
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
        TableViewListeProduit.setEditable(false);
        
        TabColReference.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("reference"));
        TabColDesignation.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("designation"));

        TabColQuantite.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("quantite"));
        TabColQuantite.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
        TabColQuantite.getStyleClass().add("Center");

        TabColPrixHT.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("PrixHT"));
        TabColPrixHT.setStyle( "-fx-alignment: CENTER;");
        TabColPrixHT.getStyleClass().add("Center");

        TabColRemise.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("Remise"));
        TabColRemise.setStyle( "-fx-alignment: CENTER;");
        TabColRemise.getStyleClass().add("Center");

        TabColTotalHT.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("TotalHT"));
        TabColTotalHT.setStyle( "-fx-alignment: CENTER;");
        TabColTotalHT.getStyleClass().add("Center");

        TabColTVA.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("TVA"));
        TabColTVA.setStyle( "-fx-alignment: CENTER;");
        TabColTVA.getStyleClass().add("Center");

        TabColTotalTTC.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("TotalTTC"));
        TabColTotalTTC.setStyle( "-fx-alignment: CENTER; -fx-font-weight:bold; -fx-font-size: 10pt;");
        TabColTotalTTC.getStyleClass().add("Center");
        
        ButtonCreationBonLivraison.setOnAction(new EventHandler<ActionEvent>(){
            @Override
            public void handle(ActionEvent t) {
                try {
                    FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/BonLivraisonClt/BonLivraisonCltAjouterEtape2.fxml"));
                    Parent NodeBonLivraisonCltAjouterEtape2 =  (Parent)fxmlLoader.load();
                    BonLivraisonCltAjouterEtape2Controller BonLivraisonCltAjouterEtape2= fxmlLoader.getController();
                    
                    PaneAjouter.getChildren().clear();
                    PaneAjouter.getChildren().add(NodeBonLivraisonCltAjouterEtape2);
                    
                    BonLivraisonCltAjouterEtape2.SetDataCommandeClt(idCommandeClt);
                } catch (IOException ex) {
                    Logger.getLogger(CommandeCltDetail.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        
    }    
    
    
    public void SowDetailCommandeClt(String codeCommande){
        idCommandeClt = codeCommande;
        ThreadCommandeCltDetail = new Service<Void>(){
            @Override
            protected Task<Void> createTask(){
                return new Task<Void>(){
                    @Override
                    protected Void call() throws Exception{
                        commandeClt = new CommandeCltDB().getCommandeClt(codeCommande);
                        
                        return null;
                    }
                };
            }
	};
        
        ThreadCommandeCltDetail.setOnSucceeded(new EventHandler<WorkerStateEvent>(){
            @Override
            public void handle(WorkerStateEvent event){
                CodeCommande.setText(commandeClt.getCodecommandeclt());
                DateCreation.setText(Adaptateur.NormalDateFormat(commandeClt.getDate()));
                Reglement.setText(commandeClt.getTypeRegementString());
                TotalTVA.setText(commandeClt.getTotalTVA());
                TypeClt.setText(commandeClt.getTypeClientString());
                CodeDevis.setText(commandeClt.getCodeDevis());

                if(commandeClt.getTypeClient()==0){
                    TextPrenom.setVisible(true);
                    TextMatricule.setVisible(false);
                    Nom.setText(commandeClt.CltPersonne.getNom());
                    Prenom.setText(commandeClt.CltPersonne.getPrenom());
                    Adresse.setText(commandeClt.CltPersonne.getAdresse());
                    TELE1.setText(commandeClt.CltPersonne.getTelefixString());
                    TELE2.setText(commandeClt.CltPersonne.getTelemobileString());
                }

                if(commandeClt.getTypeClient()==1){
                    TextPrenom.setVisible(false);
                    TextMatricule.setVisible(true);
                    Nom.setText(commandeClt.CltEntreprise.getNom());
                    Prenom.setText(commandeClt.CltEntreprise.getMatricule());
                    Adresse.setText(commandeClt.CltEntreprise.getAdresse());
                    TELE1.setText(commandeClt.CltEntreprise.getTele1String());
                    TELE2.setText(commandeClt.CltEntreprise.getTele2String());
                }

                if(commandeClt.getTypeClient()==2){
                    TextPrenom.setVisible(true);
                    TextMatricule.setVisible(false);
                    Nom.setText(commandeClt.CltPassager.getNom());
                    Prenom.setText(commandeClt.CltPassager.getPrenom());
                    Adresse.setText(commandeClt.CltPassager.getAdresse());
                    TELE1.setText(commandeClt.CltPassager.getTelefixString());
                    TELE2.setText(commandeClt.CltPassager.getTelemobileString());
                }
                if(commandeClt.getCodeBonLivraison() == null){
                    ButtonCreationBonLivraison.setVisible(true);
                }else{
                    ButtonCreationBonLivraison.setVisible(false);
                }

                NetAPayer.setText(commandeClt.getNetAPayer());
                TableViewListeProduit.setItems(commandeClt.getListeproduit());
                AnchorPaneLoadingCommandeDetail.setVisible(false);
                AnchorPaneCommandeCltDetail.setVisible(true);
            }
        });
        ThreadCommandeCltDetail.start(); 
    }
}
