package com.ejie.m62fb.dao.registroVPP;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
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.m62fb.model.TitularesVivienda;
import com.ejie.m62fb.utils.sql.UtilsResulSet;
import com.ejie.x38.dto.JQGridManager;
import com.ejie.x38.dto.JQGridRequestDto;

/**
 * TitularesViviendaDaoImpl.
 * 
XXXX
 */
@Repository
@Transactional
public class TitularesViviendaDaoImpl implements TitularesViviendaDao {
	private JdbcTemplate jdbcTemplate;

	/*
	 * ROW_MAPPERS
	 */
	private final RowMapper<TitularesVivienda> rwMap = new RowMapper<TitularesVivienda>() {
		@Override
		public TitularesVivienda mapRow(ResultSet resultSet, int rowNum)
				throws SQLException {
			TitularesVivienda titularesVivienda = new TitularesVivienda();

			// NumVivienda
			titularesVivienda.setNumVivienda(resultSet
					.getBigDecimal("NUMVIVIENDA"));
			// IdPersona
			titularesVivienda
					.setIdPersona(resultSet.getBigDecimal("IDPERSONA"));
			// NumExpediente
			titularesVivienda.setNumExpediente(resultSet
					.getString("NUMEXPEDIENTE"));
			// NumContrato
			titularesVivienda.setNumContrato(UtilsResulSet.getInteger(
					resultSet, "NUMCONTRATO"));

			// FecEntrada
			titularesVivienda.setFecEntrada(resultSet
					.getTimestamp("FECENTRADA"));
			// FecVisado
			titularesVivienda.setFecVisado(resultSet.getTimestamp("FECVISADO"));
			// FecRenuncia
			titularesVivienda.setFecRenuncia(resultSet
					.getTimestamp("FECRENUNCIA"));
			// FecDenegacion
			titularesVivienda.setFecDenegacion(resultSet
					.getTimestamp("FECDENEGACION"));
			// FecInicio
			titularesVivienda.setFecInicio(resultSet.getTimestamp("FECINICIO"));
			// FecFin
			titularesVivienda.setFecFin(resultSet.getTimestamp("FECFIN"));

			return titularesVivienda;
		}
	};

	/**
	 * Method use to set the datasource.
	 * 
	 * @param dataSource
	 *            DataSource
	 * @return
	 */
	@Resource
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}

	/**
	 * Finds a list of rows in the TitularesVivienda table.
	 * 
	 * @param titularesVivienda
	 *            TitularesVivienda
	 * @param jqGridRequestDto
	 *            JQGridRequestDto
	 * @return List<TitularesVivienda>
	 */
	@Override
	@Transactional(readOnly = true)
	public List<TitularesVivienda> getRestoViviendas(
			TitularesVivienda titularesVivienda,
			JQGridRequestDto jqGridRequestDto) {
		// SELECT
		StringBuilder query = new StringBuilder(
				TitularesViviendaDaoSql.SQL_FIND_RESTO_VIV);
		// WHERE
		query.append(TitularesViviendaDaoSql.SQL_WHERE_RESTO_VIVIENDAS);

		// Parametros
		List<Object> params = new ArrayList<Object>();
		params.add(titularesVivienda.getNumVivienda());
		params.add(titularesVivienda.getIdPersona());

		if (jqGridRequestDto != null) {
			query = JQGridManager.getPaginationQuery(jqGridRequestDto, query);
		}

		return this.jdbcTemplate.query(query.toString(), this.rwMap,
				params.toArray());
	}

	/**
	 * Counts rows in the TitularesVivienda table.
	 * 
	 * @param titularesVivienda
	 *            TitularesVivienda
	 * @return Long
	 */
	@Override
	@Transactional(readOnly = true)
	public Long getRestoViviendasCount(TitularesVivienda titularesVivienda) {
		// SELECT
		StringBuilder query = new StringBuilder(
				TitularesViviendaDaoSql.SQL_FIND_RESTO_VIV_COUNT);
		// WHERE
		query.append(TitularesViviendaDaoSql.SQL_WHERE_RESTO_VIVIENDAS);

		// Parametros
		List<Object> params = new ArrayList<Object>();
		params.add(titularesVivienda.getNumVivienda());
		params.add(titularesVivienda.getIdPersona());

		return this.jdbcTemplate.queryForLong(query.toString(),
				params.toArray());
	}
}