package Dataset;

import java.io.Serializable;
import java.sql.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author alexis
 * dataset de la table cartedecredit
 */
public class cartedecredit implements Serializable {
	private int cartedecredit_p_id;
	private String cartedecredit_numero;
	private Date cartedecredit_expiration;

	/**************************************************************************
	 * constructeur
	 *************************************************************************/
	
	public cartedecredit(int cartedecredit_p_id, String cartedecredit_numero,
			             Date cartedecredit_expiration) {
		this.cartedecredit_p_id = cartedecredit_p_id;
		this.cartedecredit_numero = cartedecredit_numero;
		this.cartedecredit_expiration = cartedecredit_expiration;
	}

	/**************************************************************************
	 * getter
	 *************************************************************************/
	
	/**
	 * @return the cartedecredit_p_id
	 */
	public int getcartedecredit_p_id() {
		return cartedecredit_p_id;
	}

	/**
	 * @return the cartedecredit_numero
	 */
	public String getCartedecredit_numero() {
		return cartedecredit_numero;
	}

	/**
	 * @return the cartedecredit_expiration
	 */
	public Date getCartedecredit_expiration() {
		return cartedecredit_expiration;
	}
	
	/**
	 * @return the cartedecredit_type (calculated field)
	 */
	public String getCartedecredit_type(){
		Pattern visa = Pattern.compile("^4[0-9]{12}(?:[0-9]{3})?$");
        Pattern MasterCard = Pattern.compile("^5[1-5][0-9]{14}$");
        Pattern AmericanExpress = Pattern.compile("^3[47][0-9]{13}$");
        Pattern DinersClub = Pattern.compile("^3(?:0[0-5]|[68][0-9])[0-9]{11}$");
        Pattern Discover = Pattern.compile("^6(?:011|5[0-9]{2})[0-9]{12}$");
        Pattern JCB = Pattern.compile("^(?:2131|1800|35\\d{3})\\d{11}$");
        
        Matcher visaM = visa.matcher(cartedecredit_numero);
        Matcher MasterCardM = MasterCard.matcher(cartedecredit_numero);
        Matcher AmericanExpressM = AmericanExpress.matcher(cartedecredit_numero);
        Matcher DinersClubM = DinersClub.matcher(cartedecredit_numero);
        Matcher DiscoverM = Discover.matcher(cartedecredit_numero);
        Matcher JCBM = JCB.matcher(cartedecredit_numero);
        
        if(visaM.find())
            return "Visa";
        if(MasterCardM.find())
            return "MasterCard";
        if(AmericanExpressM.find())
            return "AmericanExpress";
        if(DinersClubM.find())
            return "DinersClub";
        if(DiscoverM.find())
            return "Discover";
        if(JCBM.find())
            return "JCB";
        
        return "Inconnue/Invalid";
	}

	/**************************************************************************
	 * setter
	 *************************************************************************/
	
	/**
	 * @param cartedecredit_p_id the cartedecredit_p_id to set
	 */
	public void setcartedecredit_p_id(int cartedecredit_p_id) {
		this.cartedecredit_p_id = cartedecredit_p_id;
	}

	/**
	 * @param cartedecredit_numero the cartedecredit_numero to set
	 */
	public void setCartedecredit_numero(String cartedecredit_numero) {
		this.cartedecredit_numero = cartedecredit_numero;
	}

	/**
	 * @param cartedecredit_expiration the cartedecredit_expiration to set
	 */
	public void setCartedecredit_expiration(Date cartedecredit_expiration) {
		this.cartedecredit_expiration = cartedecredit_expiration;
	}

	/**************************************************************************
	 * object
	 *************************************************************************/
	
	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "cartedecredit [cartedecredit_p_id=" + cartedecredit_p_id
				+ ", cartedecredit_numero=" + cartedecredit_numero
				+ ", cartedecredit_expiration=" + cartedecredit_expiration
				+ "]";
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#hashCode()
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime
				* result
				+ ((cartedecredit_expiration == null) ? 0
						: cartedecredit_expiration.hashCode());
		result = prime
				* result
				+ ((cartedecredit_numero == null) ? 0 : cartedecredit_numero
						.hashCode());
		result = prime * result + cartedecredit_p_id;
		return result;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#equals(java.lang.Object)
	 */
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof cartedecredit))
			return false;
		cartedecredit other = (cartedecredit) obj;
		if (cartedecredit_expiration == null) {
			if (other.cartedecredit_expiration != null)
				return false;
		} else if (!cartedecredit_expiration
				.equals(other.cartedecredit_expiration))
			return false;
		if (cartedecredit_numero == null) {
			if (other.cartedecredit_numero != null)
				return false;
		} else if (!cartedecredit_numero.equals(other.cartedecredit_numero))
			return false;
		if (cartedecredit_p_id != other.cartedecredit_p_id)
			return false;
		return true;
	}
	
	
}
