package tool.regEx.pays;

import java.util.regex.Pattern;

import tool.regEx.RegExFactory;
import tool.regEx.RegExFactoryGeneral;

/******************************************************************************
 * RegExFactory.java (visitor Pattern)
 * version canadienne
 * 
 * Permet de centraliser les regex et de les appeler de façon static
 *  
 * Dependances:
 * java.util.regex.Pattern
 * 
 * Projet Orford
 *****************************************************************************
 *modification
 *nom date     explication
 ****************************************************************************/

/**
 * @author Jonathan Guertin
 *
 */
public class RegExFactoryCanada extends RegExFactoryGeneral implements RegExFactory {
	
	protected RegExFactoryCanada(){
		
	}
	
	private static RegExFactory singleton = new RegExFactoryCanada();
	/**singleton pattern
	 * @return singleton
	 */
	public static RegExFactory getInstance(){
		return singleton;
	}
	
	/**
	 * Retourne le pattern du regex pour vérifier des codes postaux Canadiens, Etats-Unien, Français
	 */
	private static Pattern codePostal = Pattern.compile("^[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJKLMNPRSTVWXYZ]( )?\\d[ABCEGHJKLMNPRSTVWXYZ]\\d$", Pattern.CASE_INSENSITIVE);
	/* (non-Javadoc)
	 * @see regEx.RegExFactory#codePostal()
	 */
	@Override
	public  Pattern codePostal(){
		return codePostal;
	}

	/**
	 * Retourne le pattern du regex pour vérifier un numero de telephone
	 */
	private static Pattern telephone = Pattern.compile("^1?[\\(\\)\\.\\- ]{0,}[0-9]{3}[\\(\\)\\.\\- ]{0,}[0-9]{3}[\\(\\)\\.\\- ]{0,}[0-9]{4}[\\(\\)\\.\\- ]{0,}(e?xt?[0-9]{4})?$");
	/* (non-Javadoc)
	 * @see regEx.RegExFactory#telephone()
	 */
	@Override
	public  Pattern telephone(){
		return telephone;
	}

	/* (non-Javadoc)
	 * @see regEx.RegExFactory#chaineCodePostal()
	 */
	@Override
	public  String chaineCodePostal(){
		return "Le code postal doit être sous les forme: A1A 1A1 | A1A1A1 | 11111 | 11111-2222";
	}

	/* (non-Javadoc)
	 * @see regEx.RegExFactory#chaineTelephone()
	 */
	@Override
	public  String chaineTelephone(){
		return "Le numero de téléphone doit être sous les forme: 1888-999-7777 | 1888.999.7777 | 1888 999 7777 | 1(888) 999-7777 | 1(888)999-7777 | 1(888)999.7777 | 1(888) 999.7777 | 18889997777 | 8889997777";
	}

}
