package com.ejie.ab79.dao.procedimientos;

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.comun.Constantes;
import com.ejie.ab79.model.procedimientos.Procedimientos;
import com.ejie.ab79.model.procedimientos.RelIniOfiOri;

/**
 * ProcedimientosDaoImpl  
 * 
 *  
 */

@Repository
@Transactional
public class RelIniOfiOriDaoImpl implements RelIniOfiOriDao {

	private JdbcTemplate jdbcTemplate;

	/*
	 * ROW_MAPPERS
	 */
	private RowMapper<RelIniOfiOri> rwMap = new RowMapper<RelIniOfiOri>() {
		@Override
		public RelIniOfiOri mapRow(ResultSet resultSet, int rowNum) throws SQLException {
			RelIniOfiOri relIniOfiOri = new RelIniOfiOri();
			relIniOfiOri.setIdRelIniOfiOri(resultSet.getInt("IDRELINIOFIORI"));

			Procedimientos procedimientoOrigen = new Procedimientos();
			procedimientoOrigen.setIdProcedimiento(resultSet.getInt("IDPROCEDIMIENTOORIGEN"));

			Procedimientos procedimientoInicioOficio = new Procedimientos();
			procedimientoInicioOficio.setIdProcedimiento(resultSet.getInt("IDPROCEDIMIENTOOFICIO"));
			procedimientoInicioOficio.setDescripcionEs(resultSet.getString("DESCCASTELLANOOFICIO"));
			procedimientoInicioOficio.setDescripcionEu(resultSet.getString("DESCEUSKERAOFICIO"));
			procedimientoInicioOficio.setCodProcedureId(resultSet.getString("CODPROCEDUREIDOFICIO"));

			relIniOfiOri.setProcedimientoInicioOficio(procedimientoInicioOficio);
			relIniOfiOri.setProcedimientoOrigen(procedimientoOrigen);

			return relIniOfiOri;
		}
	};

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

	@Override
	@Transactional(readOnly = true)
	public List<RelIniOfiOri> findProcInicioOficioByProcOrigen(Procedimientos procedimientos) {
		String query = "SELECT t6103.ID_REL_INI_OFI_ORI IDRELINIOFIORI, t6103.ID_PROC_ORIGEN IDPROCEDIMIENTOORIGEN, t6103.ID_PROC_INICIO_OFICIO IDPROCEDIMIENTOOFICIO, t6101_inicio_oficio.DESCRIPCION_CASTELLANO DESCCASTELLANOOFICIO, t6101_inicio_oficio.DESCRIPCION_EUSKERA DESCEUSKERAOFICIO, t6101_inicio_oficio.COD_PROCEDURE_ID CODPROCEDUREIDOFICIO FROM PROCEDIMIENTOS t6101_origen, PROCEDIMIENTOS t6101_inicio_oficio, REL_INI_OFI_ORI t6103 WHERE t6101_origen.ID_PROCEDIMIENTO = ? AND t6103.ID_PROC_ORIGEN = t6101_origen.ID_PROCEDIMIENTO AND t6103.ID_PROC_INICIO_OFICIO = t6101_inicio_oficio.ID_PROCEDIMIENTO AND t6101_inicio_oficio.INICIO_OFICIO = ?";

		List<RelIniOfiOri> procedimientosList = this.jdbcTemplate.query(query, this.rwMap,
				procedimientos.getIdProcedimiento(), Constantes.PROCEDIMIENTO_INICIO_OFICIO);
		return procedimientosList;
	}

}
