package com.fp.armas.portal.facade;

import java.util.Collection;

import javax.ejb.Local;

import com.fp.armas.portal.model.Tcustcompany;
import com.fp.armas.portal.model.Tcustpeople;
import com.fp.armas.portal.model.Tcustpersonaddress;
import com.fp.armas.portal.model.Tcustpersondetail;
import com.fp.armas.portal.model.Tcustpersonphone;
import com.fp.armas.portal.model.Tgeneactivity;
import com.fp.armas.portal.model.Tgenecanton;
import com.fp.armas.portal.model.Tgenecatalogdetail;
import com.fp.armas.portal.model.Tgenecity;
import com.fp.armas.portal.model.Tgenecountry;
import com.fp.armas.portal.model.Tgenefilesdetail;
import com.fp.armas.portal.model.Tgeneparroquia;
import com.fp.armas.portal.model.Tgeneprovince;
import com.fp.armas.portal.util.RegistroException;

/**
 * Interfaz que es la fachada principal con la parte de negocio no se puede acceder a una funcionalidad si no es por aqui
 * 
 * <code>Application Service</code>
 * @author dcruz
 * 
 *
 */
@Local
public interface PortalService {

	/**
	 * Devuelve una {@link Collection} que representan el tipo de documentacion
	 * @return {@link Collection} de {@link Tgenecatalogdetail}
	 */
	Collection<Tgenecatalogdetail> obtenerCatalogo(String codigoTipo) throws RegistroException;
	
	/**
	 * Devuelve una {@link Collection} de {@link Tgeneactivity}
	 * @return
	 * @throws RegistroException
	 */
	Collection<Tgeneactivity> obtenerActividadEconomica() throws RegistroException;
	
	/**
	 * Obtiene un catalogo por su tipo y legalcode
	 * @param codigoTipo
	 * @param legalCode
	 * @return
	 */
	Collection<Tgenecatalogdetail> obtenerCatalogo(String codigoTipo, String legalCode) throws RegistroException;
	
	/**
	 * Devuelve todos los paises existentes
	 * @return una {@link Collection} de {@link Tgenecountry}
	 */
	Collection<Tgenecountry> obtenerPais() throws RegistroException;
	
	/**
	 * Devuelve las provincias de un determinado {@link Tgenecountry}
	 * @param codPais
	 * @return una {@link Collection} de {@link Tgeneprovince}
	 */
	Collection<Tgeneprovince> obtenerProvincias(String codPais) throws RegistroException;
	
	/**
	 * Devuelve los cantones en base al pais y provincia
	 * @param codPais
	 * @param codProvincia
	 * @return {@link Collection} de {@link Tgenecanton}
	 */
	Collection<Tgenecanton> obtenerCantones(String codPais, String codProvincia) throws RegistroException;
	
	/**
	 * Devuelve las parroquias en base el pais, provincia, y cant&oacute;n
	 * @param codPais
	 * @param codProvincia
	 * @param codCanton
	 * @return una {@link Collection} de {@link Tgeneparroquia}
	 */
	Collection<Tgeneparroquia> obtenerParroquias(String codPais, String codProvincia, String codCanton) throws RegistroException;
	
	/**
	 * Devuelve las parroquias en base el pais, provincia, y cant&oacute;n
	 * @param codPais
	 * @param codProvincia
	 * @param codCanton
	 * @return {@link Collection} de {@link Tgenecity}
	 */
	Collection<Tgenecity> obtenerCiudades(String codPais, String codProvincia, String codCanton) throws RegistroException;
	
	/**
	 * M&eacute;todo que se encarga de almacenar el usuario en maia y a su vez activarlo
	 * @param persona
	 * @param direccionPersona
	 * @param correoPersona
	 * @param telefonoPersona
	 * @param telefonoCelular
	 * @param adicionalPersona
	 * @param compania
	 * @param foto
	 * @param actualizacion
	 * @throws RegistroException
	 */
	void guardarUsuarioMaia(Tcustpersondetail persona, Tcustpersonaddress direccionPersona, Tcustpersonaddress correoPersona, Tcustpersonphone telefonoPersona, Tcustpersonphone telefonoCelular, Tcustpeople adicionalPersona, Tcustcompany compania, Tgenefilesdetail foto) throws RegistroException;
	
	/**
	 * Actualiza todos los datos de la persona desde el portal
	 * @param persona
	 * @param direccionPersona
	 * @param correoPersona
	 * @param telefonoPersona
	 * @param telefonoCelular
	 * @param adicionalPersona
	 * @param compania
	 * @param foto
	 * @throws RegistroException
	 */
	void actualizarDatosUsuario(Tcustpersondetail persona, Tcustpersonaddress direccionPersona, Tcustpersonaddress correoPersona, Tcustpersonphone telefonoPersona, Tcustpersonphone telefonoCelular, Tcustpeople adicionalPersona, Tcustcompany compania, Tgenefilesdetail foto) throws RegistroException;
	
	/**
	 * Devuelve una persona por identificaci&oacute;n
	 * @param codigoIdentificacion
	 * @return
	 * @throws RegistroException
	 */
	Tcustpersondetail obtenerDetallePersonaPorIdentificacion(String codigoIdentificacion) throws RegistroException;
	
	/**
	 * Retorna la compan&iacute;a en base al personcode
	 * @param personcode
	 * @return
	 * @throws RegistroException
	 */
	Tcustcompany obtenerCompaniaPorId(Integer personcode) throws RegistroException;
	
	/**
	 * Retorna la informaci&oacute;n de la persona natural en base al personcode
	 * @param personcode
	 * @return
	 * @throws RegistroException
	 */
	Tcustpeople obtenerPersonaNaturalPorId(Integer personcode) throws RegistroException;
	
	/**
	 * Retorna la informaci&oacute;n de la direcci&oacute;n principal
	 * @param personcode
	 * @return
	 * @throws RegistroException
	 */
	Tcustpersonaddress obtenerDireccionPrincipal(Integer personcode) throws RegistroException;
	
	/**
	 * Retorna el correo de la persona
	 * @param personcode
	 * @return
	 * @throws RegistroException
	 */
	Tcustpersonaddress obtenerCorreo(Integer personcode) throws RegistroException;
	
	/**
	 * Retorna el tel&eacute;fono fijo de la persona
	 * @param personcode
	 * @return
	 * @throws RegistroException
	 */
	Tcustpersonphone obtenerTelefonoFijo(Integer personcode) throws RegistroException;
	
	/**
	 * Retorna el tel&eacute;fono celular de la persona
	 * @param personcode
	 * @return
	 */
	Tcustpersonphone obtenerTelefonoCelular(Integer personcode);
	/**
	 * Obtener informaci&oacute;n de las imagenes
	 * @param personcode
	 * @return
	 */
	public Tgenefilesdetail obtenerImagen(long code);
}
