package com.fp.armas.portal.dao.registro;

import java.util.List;

import javax.persistence.Query;

import com.fp.armas.portal.dao.general.GenericDaoImpl;
import com.fp.armas.portal.model.Tcustpersonphone;
import com.fp.armas.portal.util.FechaUtil;
import com.fp.armas.portal.util.PortalMessages;
import com.fp.armas.portal.util.RegistroException;

/**
 * Objeto de acceso a datos de la tabla {@link Tcustpersonphone}
 * @author dcruz
 *
 */
public class TelefonoPersonaDao extends GenericDaoImpl<Tcustpersonphone> {

	public TelefonoPersonaDao() {
		super(Tcustpersonphone.class);
	}

	/**
	 * Retorna el primer tel&eacute;fono encontrado del tipo enviado
	 * @param personcode
	 * @param tipotelefono
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public Tcustpersonphone obtenerTelefonoTipo(Integer personcode, String tipotelefono) {
		Tcustpersonphone telefono = null;
		Query query = this.getEntityManager().createQuery("SELECT o FROM Tcustpersonphone o WHERE o.id.personcode=:personcode AND o.id.dateto=:dateto AND o.phonetypecatalog=:valortelefono AND o.phonetypecatalogcode=:tipocodigotelefono");
		query.setParameter("personcode", (long)personcode);
		query.setParameter("dateto", FechaUtil.obtenerFecha(2999, 11, 31));
		query.setParameter("valortelefono", tipotelefono);
		query.setParameter("tipocodigotelefono", PortalMessages.getInstancia().getString("catalogo.codigo.tipo.telefono"));
		List<Tcustpersonphone> listphones = query.getResultList();
		if(listphones != null && !listphones.isEmpty()){
			telefono = listphones.iterator().next();
		}
		return telefono;
	}
	
	/**
	 * Retorna el primer tel&eacute;fono encontrado del tipo enviado
	 * @param personcode
	 * @param tipotelefono
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public List<Tcustpersonphone> obtenerTelefonosPorTipo(Long personcode, String tipotelefono) {		
		Query query = this.getEntityManager().createQuery("SELECT o FROM Tcustpersonphone o WHERE o.id.personcode=:personcode AND o.id.dateto=:dateto AND o.phonetypecatalog=:valortelefono AND o.phonetypecatalogcode=:tipocodigotelefono");
		query.setParameter("personcode", (long)personcode);
		query.setParameter("dateto", FechaUtil.obtenerFecha(2999, 11, 31));
		query.setParameter("valortelefono", tipotelefono);
		query.setParameter("tipocodigotelefono", PortalMessages.getInstancia().getString("catalogo.codigo.tipo.telefono"));
		List<Tcustpersonphone> listphones = query.getResultList();
		if(listphones != null && !listphones.isEmpty()){
			return listphones;
		}
		return null;
	}
	
	/**
	 * Busca y retorna la primera direcci&oacute;n encontrada
	 * @param personcode
	 * @param tipodireccion
	 * @return
	 * @throws RegistroException
	 */
	public Long maxSecuencia(long personcode) throws RegistroException{
		Query query = this.getEntityManager().createQuery("SELECT max(o.id.phonesequence) FROM Tcustpersonphone o WHERE o.id.personcode=:personcode");
		query.setParameter("personcode", (long)personcode);
		//query.setParameter("dateto", FechaUtil.obtenerFecha(2999, 11, 31));
		return (Long)query.getSingleResult();
	}
}
