/*
 * 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.Traitement.Adaptateur;
import static Controllers.Traitement.Adaptateur.StringToStringEspaceCurrency;
import static Controllers.Traitement.Adaptateur.StringToStringEspace;
import Controllers.Traitement.ParametreSystem;
import Controllers.Traitement.contro;
import Models.BonLivraisonClt.BonLivraisonClt;
import Models.Client.Client;
import Models.Client.ClientEntreprise;
import Models.Client.ClientPassager;
import Models.Produit.ListeProduit;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Control;
import javafx.scene.control.TableCell;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.control.cell.TextFieldTableCell;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;
import javafx.util.Callback;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

/**
 * FXML Controller class
 * @author Maher Ben Tili
 */
public class BonLivraisonCltPrintController implements Initializable {
    
    @FXML private AnchorPane AnchorPaneTotal;
    
    @FXML public ImageView ImageViewLogo;
    
    @FXML private Text TextSteNom;
    @FXML private Text TextSteAdress;
    @FXML private Text TextSteTeleFax;
    @FXML private Text TextSteIFCR;
    @FXML private Text TextSteRIB;
    @FXML private Text TextSteEmailSite;
    
    @FXML private Text TextNumBonLivraison;
    @FXML private Text TextDateBonLivraison;
    @FXML private Text TextNumCommande;
    
    @FXML private Text TextCltNomPrenom;
    @FXML private Text TextCltTele;
    @FXML private Text TextCltAdress;
    
    @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 Text TextTotalRemise;
    @FXML private Text TextTotalHT;
    @FXML private Text TextTotalTVA;                
    @FXML private Text TexFraisTransport;              
    @FXML private Text TextNetPayer;  
    
    @FXML private Text TextPagination;
    
    contro clt = new contro();
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
        setImageLogo();
        
        TextSteNom.setText(ParametreSystem.CompanyName);
        TextSteAdress.setText(ParametreSystem.CompanyAddress);
        TextSteTeleFax.setText(ParametreSystem.CompanyTele+" |  Fax: "+ParametreSystem.CompanyFax);
        TextSteIFCR.setText(ParametreSystem.CompanyIF+" |  M.F: "+ParametreSystem.CompanyMF);
        TextSteRIB.setText(ParametreSystem.RIB);
        TextSteEmailSite.setText(ParametreSystem.CompanyMail+" | Site:"+ParametreSystem.CompanySite);
        
        TabColReference.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("reference"));
        TabColReference.setStyle( "-fx-alignment: CENTER;");
        TabColReference.getStyleClass().add("Center");
        
        TabColDesignation.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("designation"));
        TabColDesignation.setCellFactory(new Callback<TableColumn<ListeProduit,String>,TableCell<ListeProduit,String>>(){        
            @Override
            public TableCell<ListeProduit, String> call(TableColumn<ListeProduit, String> param) {                
                TableCell<ListeProduit, String> cell = new TableCell<ListeProduit, String>(){
                    @Override
                    public void updateItem(String item, boolean empty) {
                        if (item == null) {
                            super.setText(null);
                            super.setGraphic(null);
                        } else {
                            String newItem = item.trim().toLowerCase();
                            Text text = new Text(newItem);
                            super.setPrefHeight(Control.USE_COMPUTED_SIZE);
                            text.wrappingWidthProperty().bind(super.widthProperty());
                            super.setGraphic(text);
                        }
                    }
                };  
                return cell;
            }
        });
        
        TabColQuantite.setCellValueFactory(new PropertyValueFactory<ListeProduit, String>("quantite"));
        TabColQuantite.setStyle( "-fx-alignment: CENTER;");
        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;");
        TabColTotalTTC.getStyleClass().add("Center");
    
        TabColReference.setCellFactory(TextFieldTableCell.<ListeProduit>forTableColumn());
        TabColQuantite.setCellFactory(TextFieldTableCell.<ListeProduit>forTableColumn());
        TabColRemise.setCellFactory(TextFieldTableCell.<ListeProduit>forTableColumn());
    }    
    
    public void setBonLivraisonClt(BonLivraisonClt BonLivraison, ObservableList<ListeProduit> ListProd, String Pagination, boolean PaneTotalVisible) {
        
        TextNumBonLivraison.setText("N°"+BonLivraison.getIdBonLivrasionClt());
        TextNumCommande.setText(BonLivraison.getIdCommande());
        TextDateBonLivraison.setText(Adaptateur.NormalDateFormat(BonLivraison.getDateLivraisonPreveu()));
        
        TextPagination.setText(Pagination);
        
        String AdressClt = "";
        //0 Personne  1 Entreprise   2 Passager
        if(BonLivraison.getTypeClient() == 0){
            Client CltPersonne  = BonLivraison.getCltPersonne();
            TextCltNomPrenom.setText(CltPersonne.getCodeclient()+" - "+CltPersonne.getPrenom()+"  "+CltPersonne.getNom());
            AdressClt = CltPersonne.getAdresse();
            if( (!clt.isStringNull(CltPersonne.getTelemobileString())) && (!clt.isStringNull(CltPersonne.getTelefixString())) ) {
                TextCltTele.setText(CltPersonne.getTelemobile()+" | "+CltPersonne.getTelefix());
            }else if(!clt.isStringNull(CltPersonne.getTelemobileString())){
                TextCltTele.setText(CltPersonne.getTelemobileString());
            }else if(!clt.isStringNull(CltPersonne.getTelefixString())){
                TextCltTele.setText(CltPersonne.getTelefixString());
            }
        }else if(BonLivraison.getTypeClient() == 1){
            ClientEntreprise CltEntreprise = BonLivraison.getCltEntreprise();
            TextCltNomPrenom.setText(CltEntreprise.getCodeString()+" - "+CltEntreprise.getNom());
            TextCltTele.setText(CltEntreprise.getTele1()+" | "+CltEntreprise.getTele2());
            AdressClt = CltEntreprise.getAdresse();
        }else if(BonLivraison.getTypeClient() == 2){
            ClientPassager CltPassager = BonLivraison.getCltPassager();
            TextCltNomPrenom.setText(CltPassager.getCodeclient()+" - "+CltPassager.getNom()+"  "+CltPassager.getPrenom());
            TextCltTele.setText(CltPassager.getTelemobile()+" | "+CltPassager.getTelefix());
            AdressClt = CltPassager.getAdresse();
        }
        
        if(clt.isNumericNotnull(BonLivraison.getAdresseLivraison())){
            TextCltAdress.setText(BonLivraison.getAdresseLivraison());
        }else{
            TextCltAdress.setText(AdressClt);
        }
        
        TextTotalHT.setText(StringToStringEspace(BonLivraison.getTotalHorsTaxNet()));
        TextTotalTVA.setText(StringToStringEspace(BonLivraison.getTotalTVA())); 
        TextTotalRemise.setText(StringToStringEspace(BonLivraison.getRemise()));
        TexFraisTransport.setText(StringToStringEspace(BonLivraison.getFrais()));  
        TextNetPayer.setText(StringToStringEspaceCurrency(BonLivraison.getNetAPayer()));
        
        TableViewListeProduit.setItems(ListProd);
        
        AnchorPaneTotal.setVisible(PaneTotalVisible);
    }
    
    
    private void setImageLogo()
    {
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        try {
            // optional, but recommended
            // process XML securely, avoid attacks like XML External Entities (XXE)
            dbf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);

            // parse XML file
            DocumentBuilder db = dbf.newDocumentBuilder();

            //PowerERP\conf\logo.xml
            Document doc = db.parse(new File("./conf/logo.xml"));

            doc.getDocumentElement().normalize();

            Element elementCNX  = (Element) doc.getElementsByTagName("BonLivraisonCltPrint").item(0);
            
            String pathLogo = elementCNX.getElementsByTagName("PathImage").item(0).getTextContent();
            FileInputStream fis = new FileInputStream(pathLogo);
            ImageViewLogo.setImage(new Image(fis));
            
            ImageViewLogo.setFitWidth(Double.parseDouble(elementCNX.getElementsByTagName("FitWidth").item(0).getTextContent()));
            ImageViewLogo.setFitHeight(Double.parseDouble(elementCNX.getElementsByTagName("FitHeight").item(0).getTextContent()));
            ImageViewLogo.setLayoutX(Double.parseDouble(elementCNX.getElementsByTagName("LayoutX").item(0).getTextContent()));
            ImageViewLogo.setLayoutY(Double.parseDouble(elementCNX.getElementsByTagName("LayoutY").item(0).getTextContent()));
        } 
        catch (ParserConfigurationException | SAXException | IOException e) {
            System.out.println("error AuthentificationController/setImageLogo "+e.getMessage());
        }
    }
    
}
