package es.ejie.frmk.infraestructura.sms;

import java.io.Serializable;

import es.ejie.frmk.Q70Factoria;

/**
 * Clase base que representa a un destinatario de SMS.
 * Los atributos de la clase son:
 * <ul>
 * <li>El numero de telefono al que se le enviará el mensaje. Oblgatorio </li>
 * <li>El identificador del mensaje devuelto por el servidor de mensaje. Éste se obtendra en caso del envío 
 *     correcto del SMS </li>
 *  </ul>
 *  El numero de telefono ha de ser de 5 posiciones o de más de 8 digitos. En caso contrario, el numero de telefono
 *  sera erroneo y propagará una excepción.
 *  En caso de que el numero de telefono tenga más de 9 digitos, éste lo truncará a 9.
 *  En caso de que el numero de telefono pertenezca a un SMS corto (5 posiciones) se añadiran un prefijo constante de 
 *  4 digitos (servidor de mensajes), conformando el numero de telefono.   
 * @version 2.0   Fecha: 07-jun-06
 */
public class Q70SMSTelefono implements Serializable {

	private String numeroTelefono=null;
	private String identificador=null;

	/**
	 * Constructor de clase que se inicializa con el numero de telefono
	 * @param numeroTelefono
	 * @throws Q70SMSException
	 */
	public Q70SMSTelefono (String numeroTelefono) throws Q70SMSException
	{
		setNumeroTelefono(numeroTelefono);
	}

	/**
	 * @return identificador
	 */
	public String getIdentificador() {
		return identificador;
	}

	/**
	 * @param identificador
	 */
	public void setIdentificador(String identificador) {
		this.identificador = identificador;
	}
	
	/**
	 * @return numeroTelefono
	 */
	public String getNumeroTelefono() {
		return numeroTelefono;
	}

	/**
	 * Metodo que parsea si el numero de telefono esta bien formado.
	 * Un numero de telefono es bien formado cuando:
	 *    Tiene 5 posiciones
	 *    Es de 9 posiciones o más (en este caso, trunca el número de telefono a 9 posiciones)
	 * En caso contrario devuelve una excepción.
	 * @param numeroTelefono
	 * @throws Q70SMSException
	 */
	public void setNumeroTelefono(String numeroTelefono) throws Q70SMSException {
		Q70GestorSMSServidorInterface gestorSMS = (Q70GestorSMSServidorInterface)Q70Factoria.getGestorSMS();
		String prefijoSMS = gestorSMS.getPrefijoSMS();
		if (numeroTelefono.length()>9) {
			numeroTelefono = numeroTelefono.substring(numeroTelefono.length()-9,numeroTelefono.length());
		} else if (numeroTelefono.length()==5) {
			numeroTelefono=prefijoSMS.concat(numeroTelefono);
		} else if (numeroTelefono.length()!=9) {
			String descripcion = "El numero de Telefono "+numeroTelefono+" es erróneo. Es de "+numeroTelefono.length()+" caracteres.";
			throw new Q70SMSException(this.getClass().getName(),"Q70SMSTelefono",descripcion,null);
		}
		this.numeroTelefono = numeroTelefono;
	}
}
