package routines;

import java.net.InetAddress;
import java.text.Normalizer;

public class CustomString {

    /**
     * getHostName: Retourne le nom d'hôte d'exécution du job
     * 
     * {Category} CustomString
     * 
     * {example} getHostName() # localhost.
     */
    public static String getHostName() {
    	String hostName = "";
    	try {
    		hostName = InetAddress.getLocalHost().getHostName();
    	} catch (Exception e) {
			
		}
    	return hostName;
    }
    
    /**
     * removeAccent: supprime tous les accents d'une chaine de caractère
     * 
     * {Category} CustomString
     * 
     * {example} removeAccent(école) # ecole.
     */
    public static String removeAccent(String inputString) {
    	return Normalizer.normalize(inputString, Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", "");
    }
    
    /**
     * isNullOrEmpty: retourne true si la valeur est nulle ou vide
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param} string("world") input: Chaine a tester
     * 
     * {example} isNullOrEmpty("hello") # false.
     */
    public static boolean isNullOrEmpty(String str) {
        boolean isNullorEmptyVal = false; 
    	
        if (str == null || ("").equals(str)) {
    		isNullorEmptyVal = true;
        } 
    	
    	return isNullorEmptyVal;
    }
    
    /**
     * substrLibelle: renvoie le libellé tronqué si la longueur de la chaine dépasse 250
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param} string("world") input: Chaine a tester
     * 
     * {example} substrLibelle("hello") # hello.
     */
    public static String substrLibelle(String str) {
        
    	String rtString; 
    	
        if (str == null || ("").equals(str)) {
        	rtString = null;
        } else  {
        	rtString = (str.length() > 250) ? str.substring(0, 249) : str;
        }
    	
    	return rtString;
    }
    /**
     * replaceNullOrEmpyByNonRenseigne: remplace les valeurs nulles ou vides par Non renseigné
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} User Defined
     * 
     * {param} String input.
     * 
     * 
     */
    public static String replaceNullByNonRenseigne(String  str) {
 	   String s = "Non applicable";
 	   if(str == null || ("").equals(str) ) {
 		   return s;
 	   	} else {
 	   		return str;
 	   	}    	
  
    }
    
    /**
     * replaceNullByInconnu: remplace les valeurs nulles par Inconnu
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} User Defined
     * 
     * {param} String input.
     * 
     * 
     */
    public static String replaceNullByInconnu(String  str) {
    	String s = "Inconnu";
    	if(str == null || ("").equals(str) ){ 
			return s;
    	} else {
    		return str;
    	}    	
    }
    
    /**
     * replaceRejectMessage: traduit en français les causes de rejet issu du composant tSchemaComplianceCheck
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomMessage
     * 
     * {param} string() input: cause de rejet issu du composant tSchemaComplianceCheck
     * 
     * {example} replaceRejectMessage("empty or null") # Champ NULL ou vide
     */
    public static String replaceRejectMessage(String libEnglish) {
    	String rejectMessage = "";

        if (libEnglish != null && !("").equals(libEnglish)) {
        	rejectMessage = ((libEnglish.replaceAll("exceed max length", "Exc\u00e8de taille maximum")).replaceAll("wrong type", "Typage incorrect").replaceAll("empty or null", "Champ NULL")).replaceAll("wrong DATE pattern or wrong DATE data", "Date incorrecte");
        }
        	
        return rejectMessage;
    }
       
    /**
     * MiseEnFormeTelephone: Utiliser la règle sur la gestion des téléphones
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param1, param2} String input.
     * 
     * 
     */
    /*
     Suppression des caractères suivants : « . », « - » et « / »
		mise en place du séparateur « espace » si ce n’est pas déjà le cas
		mise en place l’indicatif international « + 33 » si ce n’est pas déjà le cas
		contrôle du respect du format : + 33 X XX XX XX XX
		modification du champ cible :
     */
    public static String MiseEnFormeTelephone(String pays, String telephone) {
    	if (telephone == null) {
   		   return telephone;
   	    }     	
    	telephone=telephone.replaceAll(" ","");
    	if (("").equals(telephone)) {
  		   return null;
  	    }    	
       String tel;
  	   tel="";
  	   if (pays == null) {
 		   return telephone;
 	    }
 	   else if(!("FRA").equals(pays)) {
  		   return telephone;
  	   	} 
  	   else {
  	   		telephone=telephone.replaceAll("\\.","");
  	   		telephone=telephone.replaceAll("-","");
  	   		telephone=telephone.replaceAll("/","");
  	   		telephone=telephone.replaceAll(" ","");
  	   		telephone=telephone.replaceAll("\\+33","");
  	   		if (telephone.length()<6){
	   			return "erreur";
	   		}
  	   		if (!"0".equals(telephone.substring(0,1))) {
  	   			telephone= "0"+telephone.substring(0);
  	   			}
  	   		if (telephone.length()!=10){
  	   			return "erreur";
  	   		}
  	   		for (int i=2; i <=telephone.length(); i=i+2){
  	   			tel=tel+telephone.substring(i-2, i)+" ";
  	   			}
  	   		telephone=tel;
  	   		telephone="+33 " + telephone.substring(1);
	   		return telephone;
  	   	}  
    }
    
    
    /**
     * IsErreur: Renvoie 0 si égale à erreur sinon 1
     * 
     * 
     * {talendTypes} int
     * 
     * {Category} CustomString
     * 
     * {param} String input.
     * 
     * 
     */
    /*
     Suppression des caractères suivants : « . », « - » et « / »
		mise en place du séparateur « espace » si ce n’est pas déjà le cas
		mise en place l’indicatif international « + 33 » si ce n’est pas déjà le cas
		contrôle du respect du format : + 33 X XX XX XX XX
		modification du champ cible :
     */
    public static int IsErreur(String inputValue) {
    	return "erreur".equals(inputValue) ? 1 : 0;  
    	
    }
    
    /**
     * IsMail: Utiliser la règle sur la gestion des mails
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param} String input.
     * 
     * 
     */
    //-	contrôle du respect du format : [chaineCaracteres]+@+[chaineCaracteres]+.+[chaineCaracteres]
    public static int IsMail(String  mail) { 	    	
 	   if (mail == null || ("").equals(mail)) {
 		   return 0;
 	   }
 	   else if(mail.matches(".*@.*\\..*")) {
 		   return 0;
 	   }
 	   else return 1;
    }
    
    /**
     * IsUrl: Utiliser la règle sur la gestion des urls 
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param} String input.
     * 
     * 
     */
    
    //	contrôle du respect du format : [http://]+[chaineCaractères]+.+[chaineCaractères]
    public static int IsUrl(String  url) { 	    	
    	if (url == null) {
  		   return 0;
  	   }
  	   else if(url.matches(".*http://.*\\..*")) {
 		   return 0;
 	   }
 	   else return 1;
    }
    
    /**
     * VerifCPFrance: Utiliser la règle sur la gestion du code postal pour le pays FRANCE
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param} String input.
     * 
     * 
     */
    
    //	doit contenir que des chiffre sir le pays = "FRA"
    public static int VerifCPFrance(String pays, String  cp) { 	    	
    	if (pays == null || cp == null) {
  		   return 0;
  	   }
    	else if(("FRA").equals(pays) && !cp.matches("[0-9]*")) {    		
    	 	return 1;    	 	   
 	   }
 	   else return 0;
    }
    
    /**
     * MiseEnFormePrenom: donne le 1er caractère en majuscule puis les autres en minuscule
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param1} String input.
     * 
     */
    public static String MiseEnFormePrenom(String prenom) {
    	if (prenom == null) {
   		   return null;
   	   }
    	return prenom.substring(0,1).toUpperCase() + prenom.substring(1).toLowerCase();
    }
    
    /**
     * VerifAnnee: Utiliser la règle sur la gestion sur l'année ( doit avoir le format AAAA)
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} CustomString
     * 
     * {param} String input.
     * 
     * 
     */
    
    public static int VerifAnnee(Integer annee) { 
    	if (annee == null){
    		return 0;
    	}
    	else if(annee >= 1000 && annee < 10000 ) {    		
    	 	return 0;    	 	   
 	   }
 	   else return 1;
    }
    
        
}
