package trismegistoplanilla.mysqldao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.json.JSONObject;
import trismegistoplanilla.beans.TrabajadorResponsableBean;
import trismegistoplanilla.dao.TrabajadorResponsableDAO;
import trismegistoplanilla.utilities.ResponseHelper;
import trismegistoplanilla.utilities.Variables;

public class TrabajadorResponsableMysqlDAO implements TrabajadorResponsableDAO {

	@Override
	public JSONObject registrarTrabajadorResponsable(TrabajadorResponsableBean trabajadorResponsable) {
		System.out.println("TrabajadorResponsableMysqlDAO: registrarTrabajadorResponsable");
		JSONObject jsonRegistrarTrabajadorResponsable = null;
		PreparedStatement ps = null;
		Connection cnx = null;

		ResponseHelper response = new ResponseHelper();
		int resultadoRegistroTrabajadorResponsable;
		try {
			String sql
				= "INSERT INTO trabajador_responsable ( "
				+ "	codigo_planilla_real, "
				+ "	apellido_paterno, "
				+ "	apellido_materno, "
				+ "	nombre, "
				+ "	dni, "
				+ "	codigo_usuario, "
				+ "	estado_registro "
				+ ") "
				+ "VALUES "
				+ "	( "
				+ "		?, "
				+ "		LTRIM(RTRIM(UPPER(?))), "
				+ "		LTRIM(RTRIM(UPPER(?))), "
				+ "		LTRIM(RTRIM(UPPER(?))), "
				+ "		?, "
				+ "		?, "
				+ "		1 "
				+ "	)";

			cnx = MysqlDAOFactory.obtenerConexion(Variables.MYSQL_NUEVO_BD_NAME);
			cnx.setAutoCommit(false);
			ps = cnx.prepareStatement(sql);
			ps.setInt(1, trabajadorResponsable.getCodigoPlanillaReal());
			ps.setString(2, trabajadorResponsable.getApellidoPaterno());
			ps.setString(3, trabajadorResponsable.getApellidoMaterno());
			ps.setString(4, trabajadorResponsable.getNombre());
			ps.setString(5, trabajadorResponsable.getDni());
			ps.setInt(6, trabajadorResponsable.getCodigoUsuario());
			resultadoRegistroTrabajadorResponsable = ps.executeUpdate();
			if (resultadoRegistroTrabajadorResponsable == 0) {
				response.setStatus(false);
				cnx.rollback();
			} else {
				response.setStatus(true);
				cnx.commit();
			}
		} catch (SQLException e) {
			e.printStackTrace();
			response.setStatus(false);
		} finally {
			try {
				if (ps != null) {
					ps.close();
				}
				if (cnx != null) {
					cnx.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		jsonRegistrarTrabajadorResponsable = new JSONObject(response);
		return jsonRegistrarTrabajadorResponsable;
	}

	@Override
	public JSONObject validarExistenciaTrabajadorPorDni(TrabajadorResponsableBean trabajadorResponsable) {
		System.out.println("TrabajadorResponsableMysqlDAO: validarExistenciaTrabajadorPorDni");
		JSONObject jsonRegistrarTrabajadorResponsable = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Connection cnx = null;

		ResponseHelper response = new ResponseHelper();

		int existeTrabajador;
		try {
			String sql
				= "SELECT "
				+ "	count(1) AS existeTrabajador "
				+ "FROM "
				+ "	trabajador_responsable "
				+ "WHERE "
				+ "	trabajador_responsable.dni = ? "
				+ "AND estado_registro = 1";

			cnx = MysqlDAOFactory.obtenerConexion(Variables.MYSQL_NUEVO_BD_NAME);
			ps = cnx.prepareStatement(sql);
			ps.setString(1, trabajadorResponsable.getDni());
			rs = ps.executeQuery();
			rs.next();
			existeTrabajador = rs.getInt("existeTrabajador");

			if (existeTrabajador > 0) {
				response.setStatus(true);
				response.setMessage("El trabajador existe");
			} else if (existeTrabajador == 0) {
				response.setStatus(false);
				response.setMessage("El trabajador no existe");
			}

		} catch (SQLException e) {
			e.printStackTrace();
			response.setStatus(false);
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (ps != null) {
					ps.close();
				}
				if (cnx != null) {
					cnx.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		jsonRegistrarTrabajadorResponsable = new JSONObject(response);
		return jsonRegistrarTrabajadorResponsable;
	}

	@Override
	public JSONObject obtenerDatosTrabajadorResponsable(int codigoPlanillaReal) {
		System.out.println("TrabajadorResponsableMysqlDAO: obtenerDatosTrabajadorResponsable");
		JSONObject jsonObjObtenerSedeAreaCargoPorCodigoPlanilla = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		Connection cnx = null;

		ResponseHelper response = new ResponseHelper();
		try {
//			String sql
//				= "select "
//				+ "sede.nombre nombreSede, "
//				+ "area.nombre nombreArea, "
//				+ "cargo.nombre nombreCargo, "
//				+ "isnull(trabajador_responsable.correo,'responsablesacooliveros@yopmail.com') correo "
//				+ "from trabajador_responsable "
//				+ "inner join sede_area on trabajador_responsable.codigo_sede_area = sede_area.codigo_sede_area "
//				+ "inner join sede on sede_area.codigo_sede = sede.codigo_sede "
//				+ "inner join area on sede_area.codigo_area = area.codigo_area "
//				+ "inner join area_cargo on trabajador_responsable.codigo_area_cargo = area_cargo.codigo_area_cargo "
//				+ "inner join cargo on area_cargo.codigo_cargo = cargo.codigo_cargo "
//				+ "where trabajador_responsable.codigo_planilla_real = ?";

			String sql = "SELECT "
				+ "	locales.deslocal nombreSede, "
				+ "	area.desarea nombreArea, "
				+ "	cargo.descargo nombreCargo, "
				+ "	ifnull( "
				+ "		trabajador_responsable.correo, "
				+ "		'responsablesacooliveros@yopmail.com' "
				+ "	) correo "
				+ "FROM "
				+ "	trabajador_responsable "
				+ "INNER JOIN sede_area ON trabajador_responsable.codigo_sede_area = sede_area.codigo_sede_area "
				+ "INNER JOIN locales ON sede_area.codigo_sede = locales.codigo_sede "
				+ "INNER JOIN area ON sede_area.codigo_area = area.codigo_area "
				+ "INNER JOIN area_cargo ON trabajador_responsable.codigo_area_cargo = area_cargo.codigo_area_cargo "
				+ "INNER JOIN cargo ON area_cargo.codigo_cargo = cargo.codigo_cargo "
				+ "WHERE "
				+ "	trabajador_responsable.codigo_planilla_real = ?";

			cnx = MysqlDAOFactory.obtenerConexion(Variables.MYSQL_NUEVO_BD_NAME);
			ps = cnx.prepareStatement(sql);
			ps.setInt(1, codigoPlanillaReal);
			rs = ps.executeQuery();
			if (rs.next()) {
				TrabajadorResponsableBean tResponsable = new TrabajadorResponsableBean();
				tResponsable.setNombreSede(rs.getString("nombreSede"));
				tResponsable.setNombreArea(rs.getString("nombreArea"));
				tResponsable.setNombreCargo(rs.getString("nombreCargo"));
				tResponsable.setCorreo(rs.getString("correo"));
				JSONObject jsonObjTrabajadorResponsable = new JSONObject(tResponsable);
				response.setStatus(true);
				response.setData(jsonObjTrabajadorResponsable);
			}
		} catch (SQLException e) {
			e.printStackTrace();
			response.setStatus(false);
			response.setMessage("Error: " + e.getMessage() + "   Error Code: [" + e.getErrorCode() + "]");
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (ps != null) {
					ps.close();
				}
				if (cnx != null) {
					cnx.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		jsonObjObtenerSedeAreaCargoPorCodigoPlanilla = new JSONObject(response);
		return jsonObjObtenerSedeAreaCargoPorCodigoPlanilla;

	}

	@Override
	public JSONObject obtenerCorreoTrabajadorResponsable(int codigoFicha) {
		System.out.println("TrabajadorResponsableMysqlDAO: obtenerCorreoTrabajadorResponsable");
		JSONObject jsonReturn = null;
		ResponseHelper response = new ResponseHelper();
		Connection cnx = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		String correo = "";
//		String sql = "select top 1 "
//			+ "trabajador_responsable.correo correo "
//			+ "FROM persona "
//			+ "inner join ficha ON ficha.codigo_persona = persona.codigo_persona "
//			+ "inner join estado_ficha ON estado_ficha.codigo_ficha = ficha.codigo_ficha "
//			+ "inner join trabajador_responsable on estado_ficha.codigo_usuario = trabajador_responsable.codigo_usuario "
//			+ "where ficha.codigo_ficha = ? "
//			+ "order by 1 desc";

		String sql = "SELECT "
			+ "trabajador_responsable.correo correo "
			+ "FROM "
			+ "	personal "
			+ "INNER JOIN ficha ON ficha.codigo_persona = personal.codper "
			+ "INNER JOIN estado_ficha ON estado_ficha.codigo_ficha = ficha.codigo_ficha "
			+ "INNER JOIN trabajador_responsable ON estado_ficha.codigo_usuario = trabajador_responsable.codigo_usuario "
			+ "WHERE "
			+ "	ficha.codigo_ficha = 1 "
			+ "ORDER BY "
			+ "	1 DESC "
			+ "LIMIT 1";

		try {
			cnx = MysqlDAOFactory.obtenerConexion(Variables.MYSQL_NUEVO_BD_NAME);
			ps = cnx.prepareStatement(sql);
			ps.setInt(1, codigoFicha);
			rs = ps.executeQuery();
			if (rs.next()) {
				correo = rs.getString("correo");
			}
			JSONObject jOCorreo = new JSONObject();
			jOCorreo.put("getResult", correo);
			response.setStatus(true);
			response.setData(jOCorreo);

		} catch (SQLException e) {
			response.setStatus(false);
			response.setMessage("Error: " + e.getMessage() + "   Error Code: [" + e.getErrorCode() + "]");
			e.printStackTrace();
		} finally {
			try {
				if (rs != null) {
					rs.close();
				}
				if (ps != null) {
					ps.close();
				}
				if (cnx != null) {
					cnx.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

		jsonReturn = new JSONObject(response);
		return jsonReturn;
	}

}