/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.siso.horario.MySqlDAO;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import pe.siso.horario.Beans.PeriodoAcademico;
import pe.siso.horario.DAO.PeriodoAcademicoDAO;

/**
 *
 * @author fcelestino
 */
class MySqlPeriodoAcademicoDAO implements PeriodoAcademicoDAO {

	@Override
	public ArrayList<PeriodoAcademico> listarPeriodoAcademico() throws Exception {
		ArrayList<PeriodoAcademico> lista = new ArrayList<PeriodoAcademico>();
		String base = "horario";
		System.out.println("ANTES DE CONECTAR...");
		try (Connection cnx = MySqlDAOFactory.obtenerConexion(base);) {
			System.out.println("CONECTADO...");
			Statement st = cnx.createStatement();

			String query = "SELECT cod_per,nom_per,fec_ini_per,fec_fin_per,est_per FROM periodo_academico Order by cod_per desc";
			System.out.println("ANTES DE EJECTUAR EL QUERY...");
			ResultSet rs = st.executeQuery(query);

			while (rs.next()) {
				PeriodoAcademico periodo = new PeriodoAcademico();
				periodo.setCodigoPeriodo(rs.getInt("cod_per"));
				periodo.setNombrePeriodo(rs.getString("nom_per"));
				periodo.setFechaInicioPeriodo(rs.getString("fec_ini_per"));
				periodo.setFechaFinalPeriodo(rs.getString("fec_fin_per"));
				periodo.setEstadoPeriodo(rs.getInt("est_per"));
				lista.add(periodo);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return lista;
	}

	@Override
	public int registrarPeriodoAcademico(String nombre, String inicio, String termino) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "INSERT INTO periodo_academico (nom_per,fec_ini_per,fec_fin_per,est_per) VALUES ('" + nombre + "','" + inicio + "','" + termino + "','0')";
			System.out.println(query);
			dato = st.executeUpdate(query);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public void cambiarEstado(String dato, String codigo) throws Exception {
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query1 = "UPDATE periodo_academico SET est_per = '0' WHERE est_per = '1'";
			System.out.println(query1);
			st.executeUpdate(query1);
			String query2 = "UPDATE periodo_academico SET est_per = '1' WHERE cod_per = '" + codigo + "'";
			System.out.println(query2);
			st.executeUpdate(query2);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
	}

	@Override
	public PeriodoAcademico armarEdicion(String codigo) throws Exception {
		PeriodoAcademico periodo = new PeriodoAcademico();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT cod_per,nom_per,fec_ini_per,fec_fin_per,est_per from periodo_academico WHERE cod_per='" + codigo + "'";
			System.out.println(query);
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				periodo.setCodigoPeriodo(rs.getInt("cod_per"));
				periodo.setNombrePeriodo(rs.getString("nom_per"));
				periodo.setFechaInicioPeriodo(rs.getString("fec_ini_per"));
				periodo.setFechaFinalPeriodo(rs.getString("fec_fin_per"));
				periodo.setEstadoPeriodo(rs.getInt("est_per"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return periodo;
	}

	@Override
	public int actualizarPeriodoAcademico(String nombre, String inicio, String termino, String codigo) throws Exception {
		int dato = 0;
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();
			String query = "UPDATE periodo_academico SET nom_per='" + nombre + "' ,fec_ini_per='" + inicio + "' ,fec_fin_per='" + termino + "' WHERE cod_per='" + codigo + "' ";
			System.out.println(query);
			dato = st.executeUpdate(query);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return dato;
	}

	@Override
	public PeriodoAcademico periodoActivo() throws Exception {
		PeriodoAcademico periodo = new PeriodoAcademico();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT cod_per,nom_per,fec_ini_per,fec_fin_per,est_per FROM periodo_academico WHERE est_per='1' ";

			ResultSet rs = st.executeQuery(query);

			if (rs.next()) {
				periodo.setCodigoPeriodo(rs.getInt("cod_per"));
				periodo.setNombrePeriodo(rs.getString("nom_per"));
				periodo.setFechaInicioPeriodo(rs.getString("fec_ini_per"));
				periodo.setFechaFinalPeriodo(rs.getString("fec_fin_per"));
				periodo.setEstadoPeriodo(rs.getInt("est_per"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return periodo;
	}

	@Override
	public PeriodoAcademico mostrarPeriodo(String codigoEncuesta) throws Exception {
		PeriodoAcademico periodo = new PeriodoAcademico();
		String base = "encuentas";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT cod_enc,nom_enc,ani_enc FROM encuesta WHERE cod_enc='" + codigoEncuesta + "'";
			System.out.println(query);
			ResultSet rs = st.executeQuery(query);
			if (rs.next()) {
				periodo.setCodigoPeriodo(rs.getInt("cod_enc"));
				periodo.setNombrePeriodo(rs.getString("nom_enc"));
				periodo.setAnio(rs.getString("ani_enc"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return periodo;
	}

	@Override
	public ArrayList<PeriodoAcademico> listarAnio() throws Exception {
		ArrayList<PeriodoAcademico> lista = new ArrayList<PeriodoAcademico>();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT cod_per,"
				+ "YEAR(fec_ini_per) AS anio "
				+ "FROM periodo_academico "
				+ "WHERE est_per = '1' ";
			ResultSet rs = st.executeQuery(query);
			while (rs.next()) {
				PeriodoAcademico perAcad = new PeriodoAcademico();
				perAcad.setCodigoPeriodo(rs.getInt("cod_per"));
				perAcad.setAnio(rs.getString("anio"));
				lista.add(perAcad);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return lista;
	}

	@Override
	public PeriodoAcademico periodoActivoDocente() throws Exception {
		PeriodoAcademico periodo = new PeriodoAcademico();
		String base = "horario";
		Connection cnx = null;
		try {
			cnx = MySqlDAOFactory.obtenerConexion(base);
			Statement st = cnx.createStatement();

			String query = "SELECT\n"
				+ "periodo_academico.nom_per,\n"
				+ "periodo_docente.cod_per,periodo_docente.fec_ini,periodo_docente.fec_fin,IF(periodo_docente.fec_fin <= NOW(),'0','1') as estado \n"
				+ "FROM\n"
				+ "periodo_academico\n"
				+ "INNER JOIN periodo_docente ON periodo_docente.cod_per = periodo_academico.cod_per\n"
				+ "WHERE periodo_docente.est_per_doc = '1'";

			ResultSet rs = st.executeQuery(query);

			if (rs.next()) {
				periodo.setCodigoPeriodo(rs.getInt("cod_per"));
				periodo.setNombrePeriodo(rs.getString("nom_per"));
				periodo.setFechaInicioPeriodo(rs.getString("fec_ini"));
				periodo.setFechaFinalPeriodo(rs.getString("fec_fin"));
				periodo.setEstadoPeriodo(rs.getInt("estado"));
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			cnx.close();
		}
		return periodo;
	}

}
