package Controllers.Traitement;

import javafx.scene.control.ChoiceBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.text.Text;



/**
 * @author Maher Ben Tili
 */
public class contro {
    
    
    public boolean isStringNull(String str){
        if(str == null){
            return true;
        }else if(str.length() == 0){
            return true;
        }else if(str.equals("")){
            return true;
        }else if(str.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
    
    public boolean isNumeric(String str){
        if(str == null || str.isEmpty()){
            return false;
        }
        else{
            try{
                double d = Double.parseDouble(str);
            }
            catch(NumberFormatException nfe){
                return true;

            }
            return false;
        }
    }

    public boolean isFloat(String str){
        if(str == null || str.isEmpty()){
            return false;
        }
        else{
            try{
                Float f = Float.parseFloat(str.replace(',','.'));
            }
            catch(NumberFormatException nfe){
                return true;
            }
            return false;
        }
    }
    
    public boolean isNumericNotnull(String str){
        if( (str == null) || (str.isEmpty()) || (str.length()==0) ){
            return true;
        }else{
            try{
                double d = Double.parseDouble(str);
                return false;
            }
            catch(NumberFormatException nfe){
                return true;
            }
        }
        
    }
    
    public boolean isFloatNotnull(String str){
        try{
            Float f = Float.parseFloat(str.replace(',','.'));
            return false;
        }
        catch(NumberFormatException nfe){
            return true;
        }
    }
   
    
    public boolean ContrNullValue(ComboBox Champ , Text text){
        if(Champ.getValue()==null){                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ est vide");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrNullValue(ChoiceBox Champ , Text text){
        if(Champ.getValue()==null){                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ est vide");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrNullDatePicker(DatePicker Champ , Text text){
        if(Champ.getValue()==null){                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Date est vide");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrNull(TextField Champ , Text text)
    {
        if(Champ.getText() == null || Champ.getText().isEmpty() || Champ.getText().length()== 0){                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ est vide");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrNull(TextArea Champ , Text text){
        if(Champ.getText() == null || Champ.getText().isEmpty() || Champ.getText().length()== 0){                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ est vide");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrNumerique(TextField Champ , Text text){
        if(this.isNumeric(Champ.getText())){         
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ doit être numéro");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrNumeriqueNotnull(TextField Champ , Text text){
        if(this.isNumericNotnull(Champ.getText())){         
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ doit être numéro");
            return false ;
        }
        else{
            text.setText("");
            //Champ.setStyle("-fx-border-color: transparent;");
            Champ.setStyle(null);
            return true ;
        }
    }
    
    public boolean ContrReel(TextField Champ , Text text){
        if(this.isFloat(Champ.getText().replace(',','.'))){
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ  doit être reel");
            return false ;
        }
        else{
            //Champ.setStyle("-fx-border-color:transparent;");
            Champ.setStyle(null);
            text.setText("");
            return true ;
        }
    }
    
    public boolean ContrReelNotNull(TextField Champ , Text text){
        if(this.isFloatNotnull(Champ.getText().replace(',','.'))){
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ  doit être reel");
            return false ;
        }
        else{
            Champ.setStyle(null);
            //Champ.setStyle("-fx-border-color:transparent;");
            text.setText("");
            return true ;
        }
    }
    
    
    public boolean ContrHour(TextField Champ , Text text)
    {
        String Hour = Champ.getText();
        
        boolean Result = true;
        
        if(Hour != null && Hour.length()==5){
            Integer HourLength = Hour.length();
           
            if(HourLength!= 5){
                Result = false;
            }else if(!Hour.substring(2,3).equals(":")){
                Result = false;
            }
            

            if(!this.isNumeric(Hour.substring(0, 2))){
               double d = Double.parseDouble(Hour.substring(0, 2));
               if(d<0 || d>24){
                   Result = false;
               }
            }else{
               Result = false; 
            }
            
            if(!this.isNumeric(Hour.substring(3, 5))){
               double d = Double.parseDouble(Hour.substring(3, 5));
               if(d<0 || d>60){
                   Result = false;
               }
            }else{
               Result = false; 
            }
        }else{
            Result = false;
        }
        
        if(Result == false){         
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ doit être format Heur");
        }else{
            text.setText("");
            Champ.setStyle(null);
        }
        
        return Result ;
    }
    
    // champs ne doit pas être null et minumum n Caractaire  
    public boolean ContrMinCaractaireNotnull(TextField Champ , Text text, int nbrCaractaire)
    {
        boolean Result = ContrNull( Champ, text);
        
        if( Result )
        {
            Result = ContrMinCaractaire( Champ ,  text,  nbrCaractaire);
        }
        
        return Result ;   
    }
    
    // champs peut être null ou minumum n Caractaire  
    public boolean ContrMinCaractaire(TextField Champ , Text text, int nbrCaractaire)
    {
        if(Champ.getText().length() < nbrCaractaire)
        {                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ doit dépasser "+nbrCaractaire+" caractères");
            return false;
        }else{
            text.setText("");
            Champ.setStyle(null);
            return  true ;
        }
    }
    
    
    // champs ne doit pas être null et égale a une chaine de caractaire
    public boolean ContrEqualsNotnull(TextField Champ , Text text, String equals)
    {
        boolean Result = ContrNull( Champ, text);
        
        if( Result )
        {
            Result = ContrEquals( Champ ,  text,  equals);
        }
        
        return Result ;   
    }
    
    
    // champs peut être null ou égale a une chaine de caractaire
    public boolean ContrEquals(TextField Champ , Text text, String equals)
    {
        if(!Champ.getText().equals(equals))
        {                   
            Champ.setStyle("-fx-border-color:#f20606;");
            text.setText("Champ n'est pas égale");
            return false;
        }else{
            text.setText("");
            Champ.setStyle(null);
            return  true ;
        }
    }
    
    // champs peut être null ou il doit être un email
    public boolean ContrEmail(TextField Champ , Text text)
    {
        boolean result = true;
        if(isStringNull(Champ.getText())){                   
            result = true;
        }
        else{
            if(Champ.getText().indexOf("@")< 0){
                Champ.setStyle("-fx-border-color: #f20606;");
                text.setText("invalide mail");
                result = false ;
            }
        }
        if(result){
            text.setText("");
            Champ.setStyle(null);
        }
        return result;
    }
    
}
