package com.ejie.ab61.comun.utilidades;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.simple.SimpleJdbcCall;

/**
 * DBUtils
 * 
 *  
 * 
 */
public class DBUtils {
	private static final Logger log = LoggerFactory.getLogger(DBUtils.class.getName());

	/**
	 * DBUtils
	 */
	private DBUtils() {

	};

	/**
	 * 
	 * callPLSQL Metodo que realiza las llamadas a los PL/SQL de Carga Solicitud
	 * 
	 * @param jdbcTemplate
	 *            JdbcTemplate
	 * @param procedure
	 *            String
	 * @param sqlParameters
	 *            SqlParameter[]
	 * @param parameterSource
	 *            MapSqlParameterSource
	 * @return m
	 * @throws Exception
	 *             Exception
	 */

	public static Map<String, Object> callPLSQL_R02REQUEST(JdbcTemplate jdbcTemplate, String procedure,
			SqlParameter[] sqlParameters, MapSqlParameterSource parameterSource) throws Exception {

		SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(procedure)
				.withoutProcedureColumnMetaDataAccess().declareParameters(sqlParameters);
		Map<String, Object> m = jdbcCall.execute(parameterSource);
		/*
		 * comentamos esta parte porque ahora este metodo se va a llamar tanto
		 * desde solicitudes como desde justificaciones y las justificaciones
		 * devuelven null if (m.get("OUT_TITULO") == null) { throw new
		 * Exception("Error en el proceso del PL/SQL de carga");
		 * 
		 * } else { return m; }
		 */
		return m;
	}

	/**
	 * 
	 * callPLSQL Metodo que realiza las llamadas a los PL/SQL de Carga Solicitud
	 * 
	 * @param jdbcTemplate
	 *            JdbcTemplate
	 * @param procedure
	 *            String
	 * @param sqlParameters
	 *            SqlParameter[]
	 * @param parameterSource
	 *            MapSqlParameterSource
	 * @return m
	 * @throws Exception
	 *             Exception
	 */

	public static void callPLSQL(JdbcTemplate jdbcTemplate, String procedure, SqlParameter[] sqlParameters,
			MapSqlParameterSource parameterSource) throws Exception {

		SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(procedure)
				.withoutProcedureColumnMetaDataAccess().declareParameters(sqlParameters);
		jdbcCall.execute(parameterSource);

	}

	public static void callPLSQLObtenerErrores(JdbcTemplate jdbcTemplate, String procedure) throws Exception {

		SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate).withProcedureName(procedure)
				.withoutProcedureColumnMetaDataAccess();
		jdbcCall.execute();

	}

	public static final Long lCERO = 0L;
	public static final int iCERO = 0;
	public static final int MAX_LONG_STRING_BUFFER = 3000;
}
