/*
* Copyright 2021 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANT�?AS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.ad74a.dao.iml;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import com.ejie.ad74a.dao.TarifasDao;
import com.ejie.ad74a.model.MaestroNivSoporte;
import com.ejie.ad74a.model.Tarifas;
import com.ejie.ad74a.util.UtilSQL;

/**
 * TarifasDaoImpl generated by UDA, 28-sep-2023 11:01:18.
 * 
 * @author UDA
 */

@Repository
@Transactional
public class TarifasDaoImpl implements TarifasDao {

	/**
	 * StringBuilder initilization value
	 */
	public static final int STRING_BUILDER_INIT = 4096;

	protected static final String[] ORDER_BY_WHITE_LIST = new String[] { "IDTARIFANIVSOP76", "FVIGENCIADESDE76",
			"FVIGENCIAHASTA76", "IDNIVELSOPORTE76", "TARIFA76", "FALTA76", "USUALTA76", "FMODIF76", "USUMODIF76" };

	private JdbcTemplate jdbcTemplate;
	
	@Resource
    public void setDataSource(DataSource dataSource) {
    	this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

	public static final String SEQUENCE_TARIFAS = "SEQ_TARIFAS";

	/*
	 * ROW_MAPPERS
	 */	

	private RowMapper<Tarifas> rwMapTarifasNivelSoporte = new RowMapper<Tarifas>() {
		public Tarifas mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			Tarifas tarifa = new Tarifas(UtilSQL.getLong(resultSet, "IDTARIFANIVSOP76"));
			tarifa.setTarifa76(resultSet.getBigDecimal("TARIFA76"));
			tarifa.setfVigenciaDesde76(resultSet.getDate("FVIGENCIADESDE76"));
			tarifa.setfVigenciaHasta76(resultSet.getDate("FVIGENCIAHASTA76"));

			MaestroNivSoporte maestroNivSoporte = new MaestroNivSoporte(UtilSQL.getLong(resultSet, "IDNIVELSOPORTE76"));
			maestroNivSoporte.setDescEs58(resultSet.getString("DESCES58"));
			maestroNivSoporte.setDescEu58(resultSet.getString("DESCEU58"));
			tarifa.setMaestroNivSoporte(maestroNivSoporte);

			return tarifa;
		}
	};

	/**
	 * Busca las tarifas por nivel soporte entre fechas.
	 * 
	 * @param fechaIniCalculoPantalla Date
	 * @param fechaFinCalculoPantalla Date
	 * @return List<Tarifas>
	 */
	@Transactional(readOnly = true)
	public List<Tarifas> findTarifasPorNivelSoporteEntreFechas(Date fechaIniCalculoPantalla,
			Date fechaFinCalculoPantalla) {
		StringBuilder query = new StringBuilder(
				"SELECT t1.ID_TARIFA_NIV_SOP_76 IDTARIFANIVSOP76, t1.ID_NIVEL_SOPORTE_76 IDNIVELSOPORTE76, t1.TARIFA_76 TARIFA76, t1.F_VIGENCIA_DESDE_76 FVIGENCIADESDE76, ");
		query.append(
				" CASE WHEN t1.F_VIGENCIA_HASTA_76 > ? OR t1.F_VIGENCIA_HASTA_76 IS NULL THEN ? ELSE t1.F_VIGENCIA_HASTA_76 END AS FVIGENCIAHASTA76,");
		query.append(" t2.DESC_ES_58 DESCES58, t2.DESC_EU_58 DESCEU58");
		query.append(" FROM TARIFAS t1");
		query.append(" LEFT JOIN MAESTRO_NIV_SOPORTE t2 ON (t1.ID_NIVEL_SOPORTE_76 = t2.ID_NIVEL_SOPORTE_58)");
		query.append(" WHERE (F_VIGENCIA_HASTA_76 >= ? OR F_VIGENCIA_HASTA_76 IS NULL) ");
		query.append(" AND F_VIGENCIA_DESDE_76 <= ? ");
		query.append(" ORDER BY t1.ID_NIVEL_SOPORTE_76, t1.F_VIGENCIA_DESDE_76 ");

		return this.jdbcTemplate.query(query.toString(), this.rwMapTarifasNivelSoporte, fechaFinCalculoPantalla,
				fechaFinCalculoPantalla, fechaIniCalculoPantalla, fechaFinCalculoPantalla);
	}

}
