/*
 * 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";
        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 Order by cod_per desc";

            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();
        } finally {
            cnx.close();
        }
        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;
    }

}
