/**
 * 
 */
package com.ejie.ad74a.dao;

import java.io.IOException;
import java.util.Date;
import java.util.List;

import com.ejie.ad74a.model.Ayuntamiento;
import com.ejie.ad74a.model.FacturacionAyuntamiento;
import com.ejie.ad74a.model.PisoTutelado;
import com.ejie.ad74a.model.Solicitante;

/**
 * Interfaz de persistencia para el procesamiento y emision de facturas a ayuntamientos
 * @author BICUGUAL
 *
 */
public interface CopagoAytoDao {

	/**
	 * Devuelve la lista de ayuntamientos que tienen periodicidad y dia facturacion informados y algun piso tutelado
	 * junto con los datos de la ultima facturacion
	 * @return
	 */
	List<Ayuntamiento> findAyuntamientosConPisosTutelados();
	
	/**
	 * Devuelve la lista de pisos tutelados de un ayuntamiento que han estado en uso durante la mensualidad
	 * 
	 * @param idAyuntamiento
	 * @param fInicioMensualidad
	 * @param fFinMensualidad
	 * @return
	 */
	List<PisoTutelado> findPisosTuteladosByIdAyuntamientoAndMensualidad(Long idAyuntamiento, Date fInicioMensualidad, Date fFinMensualidad);
	
	/**
	 * Devuelve la lista de solicitantes de un piso tutelado que han estado asigandos a un piso en algun momento de la mensualidad
	 * @param idPisoTutelado
	 * @param fInicioMensualidad
	 * @param fFinMensualidad
	 * @return
	 */
	List<Solicitante> findSolicitantesByIdPisoTuteladoAndMensualidad(Long idPisoTutelado, Date fInicioMensualidad, Date fFinMensualidad);
	
	/**
	 * Crea un registro en la tabla AD74A90T00 FACTURACION_AYUNTAMIENTOS y devuelve el id del registro generado
	 * @param factura
	 * @return
	 */
	Long createFacturacionAyuntamiento(FacturacionAyuntamiento factura);
	
	/**
	 * Devuelve el registro de la tabla AD74A90T00 FACTURACION_AYUNTAMIENTOS en base a su id
	 * @param idFactura
	 * @return
	 */
	FacturacionAyuntamiento findFacturacionAyuntamientoById(Long idFactura);
	
	/**
	 * Guarda el informe en la tabla AD74A90T00 FACTURACION_AYUNTAMIENTOS en base a su id
	 * @param idFactura
	 * @param informeArrBytes
	 * @throws IOException
	 */
	void saveInformeFacturacion(Long idFactura, byte[] informeArrBytes) throws IOException;

	/**
	 * Devuelve el ayuntamiento en base al idFacturacion
	 * @param idFacturacion
	 * @return
	 */
	Ayuntamiento findAyuntamientoByIdFacturacion(Long idFacturacion);

}
