package Controllers.FactureClt;

import Controllers.Traitement.ParametreSystem;
import Controllers.Traitement.contro;
import Models.Caisse.CarteBancaireClt;
import Models.CommandeClt.CommandeClt;
import Models.FactureClt.FactureClt;
import Models.FactureClt.FactureCltDB;
import Models.User.User;
import Models.ChequeClt.ChequeClt;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.text.Text;


/**
 * FXML Controller class
 * @author Maher Ben Tili
 */
public class FactureCltAjouterPaiementComptentController implements Initializable {

    @FXML public Text TextNetaPayer ;
    
    @FXML private AnchorPane PaneFactureCltAjouterPaiementComptent;
    @FXML public AnchorPane PaneCheque;
    @FXML public AnchorPane PaneCarte;
    @FXML public TextField  FactureCltChequeNomBanque;
    @FXML public TextField  FactureCltChequeNumero;      
    @FXML public TextField  FactureCltChequeNomComple;      
    @FXML public DatePicker FactureCltChequeDatePaiement; 
    
    @FXML public Text MsgCltChequeNomBanque;
    @FXML public Text MsgCltChequeNumero;      
    @FXML public Text MsgCltChequeNomComple;       
    @FXML public Text MsgCltChequeDatePaiement; 
    
    @FXML public TextField  TextFieldCarteNumeroTransation;
    @FXML public TextField  TextFieldCarteNomBanque;
    @FXML public TextField  TextFieldCarteNumero;
    @FXML public TextField  TextFieldCarteNomComplet;
    
    @FXML public Text MsgCltCarteNumeroTransation; 
    @FXML public Text MsgCltCarteNumeroCarte;
    
    public Integer TypeSelect = 0; // 0:espace      1:Cheque        2:Carte Bancaire
    
    public FactureClt  Facture = new FactureClt();
    public CommandeClt commande;
     
    contro clt = new contro();
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
        
    }    
    
    
    @FXML
    public void RadioEspaceAction(ActionEvent event) throws IOException {
        PaneCheque.setVisible(false);
        PaneCarte.setVisible(false);
        TypeSelect = 0;
    }
    
    @FXML
    public void RadioChequeAction(ActionEvent event) throws IOException {
        PaneCarte.setVisible(false);
        PaneCheque.setVisible(true);
        TypeSelect = 1;
        
    }
    
    @FXML
    public void RadioCarteAction(ActionEvent event) throws IOException {
        PaneCheque.setVisible(false);
        PaneCarte.setVisible(true);
        TypeSelect = 2;
    }
    
    //Boutton Suivant
    @FXML
    private void FactureCltAjouterSuivantAction(ActionEvent event) throws IOException {
        this.SetDataFacture();
        FactureCltDB FactureDB= new FactureCltDB();
        if(TypeSelect == 0){
            Facture.setModePaiement("0");
            String CodeFacture = FactureDB.AddFactureClt(Facture);
            if(CodeFacture != null){
                this.FactureCltDetail(CodeFacture);
            }
        }else if(TypeSelect == 1){
            Facture.setModePaiement("1");
            
            if( clt.ContrNull(FactureCltChequeNomBanque, MsgCltChequeNomBanque) && 
                clt.ContrNumeriqueNotnull(FactureCltChequeNumero, MsgCltChequeNumero) &&
                clt.ContrNullDatePicker(FactureCltChequeDatePaiement, MsgCltChequeDatePaiement)){
                
                ChequeClt Cheque = new ChequeClt();
                Cheque.setBanqueChequeClt(FactureCltChequeNomBanque.getText());
                Cheque.setNumeroChequeClt(FactureCltChequeNumero.getText());
                Cheque.setNomCompletChequeClt(FactureCltChequeNomComple.getText());
                Cheque.setDatePaiement(FactureCltChequeDatePaiement.getValue().toString());
                Cheque.setMontantChequeClt(Facture.getNetAPayer());
                Facture.setCheque(Cheque);
                
                String CodeFacture = FactureDB.AddFactureClt(Facture);    
                if(CodeFacture != null){ 
                    this.FactureCltDetail(CodeFacture);
                }
            }
        }else if(TypeSelect == 2){
            Facture.setModePaiement("2");
            if( clt.ContrNull(TextFieldCarteNumeroTransation, MsgCltCarteNumeroTransation) &&
                clt.ContrNumerique(TextFieldCarteNumero, MsgCltCarteNumeroCarte) )
            {
                CarteBancaireClt CarteBancaire =  new CarteBancaireClt();
                CarteBancaire.setNumeroTransation(TextFieldCarteNumeroTransation.getText());
                CarteBancaire.setNomBanque(TextFieldCarteNomBanque.getText());
                CarteBancaire.setNumeroCarte(TextFieldCarteNumero.getText());
                CarteBancaire.setNomComplet(TextFieldCarteNomComplet.getText());
                CarteBancaire.setMontant(Facture.getNetAPayer());
                CarteBancaire.setLocalNom(ParametreSystem.NomLocalPC);
                CarteBancaire.setIdProfile(User.idprofile);
                Facture.setCarteBancaire(CarteBancaire);
                String CodeFacture = FactureDB.AddFactureClt(Facture);
                if(CodeFacture != null){
                    this.FactureCltDetail(CodeFacture);
                }
            }
        }
    }
    
        
     
    //Boutton Présédent
    @FXML
    private void FactureCltAjouterButtonAction(ActionEvent event) throws IOException {
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltAjouterDetailSelect.fxml"));
        Parent NodeFactureCltAjouterDetailSelect = (Parent)fxmlLoader.load();
        FactureCltAjouterDetailSelectController FactureCltAjouterDetailSelect = fxmlLoader.getController();
        FactureCltAjouterDetailSelect.setDataCommande(commande.getCodecommandeclt());
        PaneFactureCltAjouterPaiementComptent.getChildren().clear();
        PaneFactureCltAjouterPaiementComptent.getChildren().add(NodeFactureCltAjouterDetailSelect);
        
    }
    
    public void FactureCltDetail(String CodeFacture) throws IOException{
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/Views/FactureClt/FactureCltDetail.fxml"));
        Parent NodeFactureCltDetail =  (Parent)fxmlLoader.load();
        FactureCltDetailController FactureCltDetail= fxmlLoader.getController();
        
        FactureCltDetail.codeFactClt = CodeFacture;
        FactureCltDetail.SowDetailFactureClt(true);
        PaneFactureCltAjouterPaiementComptent.getChildren().clear();
        PaneFactureCltAjouterPaiementComptent.getChildren().add(NodeFactureCltDetail);
    }
    
    public void SetDataFacture(){
        Facture.setIdCommandeClt(commande.getCodecommandeclt());
        Facture.setTypeClient(commande.getTypeClient());
       
        if(commande.getTypeClient() == 0){
            Facture.setCltPersonne(commande.getCltPersonne());
        }else if(commande.getTypeClient() == 1){
            Facture.setCltEntreprise(commande.getCltEntreprise());
        }else if(commande.getTypeClient() == 2){
            Facture.setCltPassager(commande.getCltPassager());
        }
        Facture.setDateFacture(new Date().toString());
        Facture.setTypeRegement(commande.getTypeRegement());
        Facture.setNetAPayer(commande.getNetAPayer());
        Facture.setTotalTVA(commande.getTotalTVA());
        Facture.setTotalHorsTaxNet(commande.getTotalHorsTaxNet());
        Facture.setRemise(commande.getRemise());
        Facture.setTimbre(commande.getTimbre());
        Facture.setDevise(commande.getCodeDevis());
        Facture.setCodeUser(User.idprofile);
        Facture.setListeproduit(commande.getListeproduit());
    }
    
    
}
