package com.ejie.ab79.dao.actividadesCenso;

import java.sql.ResultSet;
import java.sql.SQLException;
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.ab79.model.REST.servicioWeb.Ubicacion;
import com.ejie.ab79.model.actividadesCenso.ActividadesCenso;

/**
 * 
 *  
 *
 */

@Repository
@Transactional
public class ActividadesCensoDaoImpl implements ActividadesCensoDao {

	private JdbcTemplate jdbcTemplate;

	private RowMapper<ActividadesCenso> rwMap = new RowMapper<ActividadesCenso>() {
		public ActividadesCenso mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			ActividadesCenso actividadCenso = new ActividadesCenso();

			actividadCenso.setIdEstablecimiento(resultSet.getInt("IDESTABLECIMIENTO"));
			actividadCenso.setNumeroRegistro(resultSet.getString("IDENTESTABLECIMIENTO"));
			actividadCenso.setNombreComercial(resultSet.getString("DESCNOMBRE"));
			actividadCenso.setNumUnidadesAlojamiento(resultSet.getInt("NUMUNIDADESALOJ"));
			actividadCenso.setTotalPlazas(resultSet.getInt("NUMPLAZAS"));
			actividadCenso.setTipoActividadEs(resultSet.getString("DESCTIPOES"));
			actividadCenso.setTipoActividadEu(resultSet.getString("DESCTIPOEU"));
			actividadCenso.setGrupoEs(resultSet.getString("DESCGRUPOES"));
			actividadCenso.setGrupoEu(resultSet.getString("DESCGRUPOEU"));
			actividadCenso.setModalidadEs(resultSet.getString("DESCMODALIDADES"));
			actividadCenso.setModalidadEu(resultSet.getString("DESCMODALIDADEU"));
			actividadCenso.setEspecialidadEs(resultSet.getString("DESCESPECIALIDADES"));
			actividadCenso.setEspecialidadEu(resultSet.getString("DESCESPECIALIDADEU"));
			actividadCenso.setCategoriaEs(resultSet.getString("DESCCATEGORIAES"));
			actividadCenso.setCategoriaEu(resultSet.getString("DESCCATEGORIAEU"));
			actividadCenso.setTelefono(resultSet.getString("TELEFONO"));
			actividadCenso.setEmail(resultSet.getString("EMAIL"));
			actividadCenso.setWeb(resultSet.getString("URLWEB"));

			actividadCenso.setNumSalones(resultSet.getInt("NUMSALONES"));
			actividadCenso.setNumComedores(resultSet.getInt("NUMCOMEDORES"));
			actividadCenso.setNumSalonesComedor(resultSet.getInt("NUMSALONESCOMEDOR"));
			actividadCenso.setNumHabitaciones(resultSet.getInt("NUMHABITACIONES"));
			actividadCenso.setNumHabitacionesIndividuales(resultSet.getInt("NUMHABINDIVIDUALES"));
			actividadCenso.setNumHabitacionesDobles(resultSet.getInt("NUMHABDOBLE"));
			actividadCenso.setNumHabitacionesDoblesCS(resultSet.getInt("NUMHABDOBLECS"));
			actividadCenso.setNumHabMas4(resultSet.getInt("NUMHABMAS4"));
			actividadCenso.setNumHabMenos4(resultSet.getInt("NUMHABMENOS4"));
			actividadCenso.setNumConjuntos(resultSet.getInt("NUMCONJUNTOS"));
			actividadCenso.setNumEstudios(resultSet.getInt("NUMESTUDIOS"));
			actividadCenso.setNumApartamentos(resultSet.getInt("NUMAPARTAMENTOS"));
			actividadCenso.setNumSuites(resultSet.getInt("NUMSUITES"));
			actividadCenso.setNumMaximoSupletorias(resultSet.getInt("NUMMAXIMOSUPLETORIAS"));
			actividadCenso.setBar(resultSet.getInt("BAR"));
			actividadCenso.setRestaurante(resultSet.getInt("RESTAURANTE"));
			actividadCenso.setPiscina(resultSet.getInt("PISCINA"));
			actividadCenso.setNumTotalParcelas(resultSet.getInt("NUMTOTPARCELAS"));
			actividadCenso.setNumParcelasANF(resultSet.getInt("NUMPARCELASANF"));
			actividadCenso.setNumParcelasAF(resultSet.getInt("NUMPARCELASAF"));
			actividadCenso.setNumParcelasSA(resultSet.getInt("NUMPARCELASSA"));
			actividadCenso.setNumBanosGenerales(resultSet.getInt("NUMBANOSGENERALES"));
			actividadCenso.setNumResidentesPerm(resultSet.getInt("NUMRESIDENTESPERM"));
			actividadCenso.setNumDormResid(resultSet.getInt("NUMDORMRESID"));
			actividadCenso.setNumDormUsuario(resultSet.getInt("NUMDORMUSUARIO"));
			actividadCenso.setDisponeCocina(resultSet.getInt("DISPONECOCINA"));
			actividadCenso.setDisponeSalon(resultSet.getInt("DISPONESALON"));
			actividadCenso.setSuperficieTotal(resultSet.getBigDecimal("SUPERFICIETOTAL"));
			actividadCenso.setSuperficieTotalHabitaciones(resultSet.getBigDecimal("SUPTOTHABITAC"));
			actividadCenso.setSuperficieTotalRestoDependencias(resultSet.getBigDecimal("SUPRESTODEPEN"));

			Ubicacion datosUbicacion = new Ubicacion();
			datosUbicacion.setIdProvincia(resultSet.getString("IDPROVINCIA"));
			datosUbicacion.setIdMunicipio(resultSet.getString("IDMUNICIPIO"));
			datosUbicacion.setIdLocalidad(resultSet.getString("IDLOCALIDAD"));
			datosUbicacion.setDireccion(resultSet.getString("DIRECCION"));
			datosUbicacion.setNumero(resultSet.getString("NUMERO"));
			datosUbicacion.setEscalera(resultSet.getString("ESCALERA"));
			datosUbicacion.setPiso(resultSet.getString("PISO"));
			datosUbicacion.setLetra(resultSet.getString("LETRA"));
			datosUbicacion.setCodigoPostal(resultSet.getString("CODIGOPOSTAL"));

			actividadCenso.setDatosUbicacion(datosUbicacion);

			return actividadCenso;

		}
	};

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

	/**
	 * Finds rows in the Listados table using like.
	 *
	 * @param listados
	 *            Listados
	 * 
	 * @return List<Listados>
	 */
	@Transactional(readOnly = true)
	public List<ActividadesCenso> findAllREST() {
		StringBuilder query = new StringBuilder();

		query.append(
				"SELECT T1.ID_ESTABLECIMIENTO IDESTABLECIMIENTO,  T1.IDENTIFICADOR_ESTABLECIMIENTO IDENTESTABLECIMIENTO,  T1.DESC_NOMBRE DESCNOMBRE,  T1.NUM_UNIDADES_ALOJAMIENTO NUMUNIDADESALOJ,  T1.NUM_PLAZAS NUMPLAZAS,  T1.DESC_TIPO_ES DESCTIPOES,  T1.DESC_TIPO_EU DESCTIPOEU,  T1.DESC_GRUPO_ES DESCGRUPOES,  T1.DESC_GRUPO_EU DESCGRUPOEU,  T1.DESC_CATEGORIA_ES DESCCATEGORIAES,  T1.DESC_CATEGORIA_EU DESCCATEGORIAEU,  T1.DESC_MODALIDAD_ES DESCMODALIDADES,  T1.DESC_MODALIDAD_EU DESCMODALIDADEU,  T1.DESC_ESPECIALIDAD_ES DESCESPECIALIDADES,  T1.DESC_ESPECIALIDAD_EU DESCESPECIALIDADEU,  T1.TELEFONO TELEFONO,  T1.EMAIL EMAIL,  T1.URLWEB URLWEB,  T1.ID_PROVINCIA IDPROVINCIA,  T1.ID_MUNICIPIO IDMUNICIPIO,  T1.ID_LOCALIDAD IDLOCALIDAD,  T1.DIRECCION DIRECCION,  T1.NUMERO NUMERO,  T1.ESCALERA ESCALERA,  T1.PISO PISO,  T1.LETRA LETRA,  T1.CODIGO_POSTAL CODIGOPOSTAL,  T1.NUM_SALONES NUMSALONES,  T1.NUM_COMEDORES NUMCOMEDORES,  T1.NUM_SALONES_COMEDOR NUMSALONESCOMEDOR,  T1.NUM_HABITACIONES NUMHABITACIONES,  T1.NUM_HAB_INDIVIDUALES NUMHABINDIVIDUALES,  T1.NUM_HAB_DOBLE NUMHABDOBLE,  T1.NUM_HAB_DOBLE_CS NUMHABDOBLECS,  T1.NUM_HAB_MAS_4 NUMHABMAS4,  T1.NUM_HAB_MENOS_4 NUMHABMENOS4,  T1.NUM_CONJUNTOS NUMCONJUNTOS,  T1.NUM_ESTUDIOS NUMESTUDIOS,  T1.NUM_APARTAMENTOS NUMAPARTAMENTOS,  T1.NUM_SUITES NUMSUITES,  T1.NUM_MAXIMO_SUPLETORIAS NUMMAXIMOSUPLETORIAS,  T1.BAR BAR,  T1.RESTAURANTE RESTAURANTE, T1.PISCINA PISCINA,  T1.NUM_TOT_PARCELAS NUMTOTPARCELAS,  T1.NUM_PARCELAS_ANF NUMPARCELASANF,  T1.NUM_PARCELAS_AF NUMPARCELASAF,  T1.NUM_PARCELAS_SA NUMPARCELASSA,  T1.NUM_BANOS_GENERALES NUMBANOSGENERALES,  T1.SUP_RESTO_DEPEN SUPRESTODEPEN,  T1.SUPERFICIE_TOTAL SUPERFICIETOTAL,  T1.SUP_TOT_HABITAC SUPTOTHABITAC,  T1.NUM_RESIDENTES_PERM NUMRESIDENTESPERM,  T1.NUM_DORM_RESID NUMDORMRESID,  T1.NUM_DORM_USUARIO NUMDORMUSUARIO,  T1.DISPONE_SALON DISPONESALON,  T1.DISPONE_COCINA DISPONECOCINA");
		query.append(" FROM ACTIVIDADES_CENSO T1");
		query.append(" WHERE 1 = 1 ");

		return (List<ActividadesCenso>) this.jdbcTemplate.query(query.toString(), this.rwMap);
	}

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