/*
 * 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.TipoCentro;
import pe.siso.horario.Beans.TipoGrado;
import pe.siso.horario.DAO.TipoGradoDAO;

/**
 *
 * @author fcelestino
 */
public class MySqlTipoGradoDAO implements TipoGradoDAO {

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

            String query = "SELECT tipo_grado.codtipogrado,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,tipo_grado.codcentro,tipo_grado.codnivel, "
                    + "tipo_grado.estado  "
                    + "FROM tipo_grado  "
                    + "INNER JOIN nivel ON	nivel.codnivel=tipo_grado.codnivel "
                    + "INNER JOIN centro ON centro.codcentro=tipo_grado.codcentro "
                    + "INNER JOIN tipo_centro ON centro.codtipocentro=tipo_centro.codtipocentro "
                    + "ORDER BY tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                TipoGrado tipogrado = new TipoGrado();
                tipogrado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                tipogrado.setNombreTipoGrado(rs.getString("destipogrado"));
                tipogrado.setNombreNivel(rs.getString("desnivel"));
                tipogrado.setNombreCentro(rs.getString("descentro"));
                tipogrado.setNombreTipoCentro(rs.getString("destipocentro"));
                tipogrado.setEstadoTipoGrado(rs.getInt("estado"));
                lista.add(tipogrado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

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

            String query = "SELECT tipo_grado.codtipogrado,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,tipo_grado.codcentro,tipo_grado.codnivel, "
                    + "tipo_grado.estado  "
                    + "FROM tipo_grado "
                    + "INNER JOIN nivel ON	nivel.codnivel=tipo_grado.codnivel "
                    + "INNER JOIN centro ON centro.codcentro=tipo_grado.codcentro "
                    + "INNER JOIN tipo_centro ON centro.codtipocentro=tipo_centro.codtipocentro "
                    + "WHERE centro.codcentro='" + codigoCentro + "' and nivel.codnivel='" + codigoNivel + "' "
                    + "ORDER BY tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado ";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                TipoGrado tipogrado = new TipoGrado();
                tipogrado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                tipogrado.setNombreTipoGrado(rs.getString("destipogrado"));
                tipogrado.setNombreNivel(rs.getString("desnivel"));
                tipogrado.setNombreCentro(rs.getString("descentro"));
                tipogrado.setNombreTipoCentro(rs.getString("destipocentro"));
                tipogrado.setEstadoTipoGrado(rs.getInt("estado"));
                lista.add(tipogrado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void registrarTipoGrado(String nombreTipoGrado, String codigoCentro, String codigoNivel) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryInsert = "INSERT INTO tipo_grado (destipogrado,codcentro,codnivel,estado) VALUES ('" + nombreTipoGrado + "','" + codigoCentro + "','" + codigoNivel + "','1');";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

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

            String query = "SELECT codtipogrado,destipogrado  FROM tipo_grado "
                    + "WHERE codcentro='" + codigoCentro + "' and codnivel='" + codigoNivel + "' and estado='1';";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                TipoGrado tipogrado = new TipoGrado();
                tipogrado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                tipogrado.setNombreTipoGrado(rs.getString("destipogrado"));
                lista.add(tipogrado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void cambiarEstado(String dato, String codigoTipoGrado) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryInsert = "UPDATE tipo_grado SET estado='" + dato + "' WHERE codtipogrado='" + codigoTipoGrado + "';";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public void actualizar(String codigoTipoGrado, String nombre) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryInsert = "UPDATE tipo_grado SET destipogrado='" + nombre + "' WHERE codtipogrado='" + codigoTipoGrado + "'";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public TipoGrado nombreTip(String codTipo) throws Exception {
        String base = "horario";
        TipoGrado grado = new TipoGrado();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT "
                    + "tipo_grado.codtipogrado, "
                    + "tipo_grado.destipogrado, "
                    + "nivel.codnivel, "
                    + "nivel.desnivel, "
                    + "centro.descentro, "
                    + "centro.codcentro, "
                    + "tipo_centro.codtipocentro, "
                    + "tipo_centro.destipocentro "
                    + "FROM "
                    + "tipo_grado "
                    + "INNER JOIN nivel ON nivel.codnivel = tipo_grado.codnivel "
                    + "INNER JOIN centro ON centro.codcentro = nivel.codcentro "
                    + "INNER JOIN tipo_centro ON tipo_centro.codtipocentro = centro.codtipocentro "
                    + "WHERE tipo_grado.codtipogrado='" + codTipo + "'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                grado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                grado.setNombreTipoGrado(rs.getString("destipogrado"));
                grado.setCodigoCentro(rs.getInt("codcentro"));
                grado.setNombreCentro(rs.getString("descentro"));
                grado.setNombreTipoCentro(rs.getString("destipocentro"));
                grado.setNombreNivel(rs.getString("desnivel"));

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return grado;
    }

    @Override
    public ArrayList<TipoGrado> cargarTipoGrado(String codigoSede, String codigoTipoCentro, String codigoCentro, String codigoNivel) throws Exception {
        ArrayList<TipoGrado> lista = new ArrayList<TipoGrado>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT DISTINCT aula.codlocal,tipo_grado.codtipogrado,tipo_grado.destipogrado "
                    + "from aula "
                    + "INNER JOIN tipo_centro on tipo_centro.codtipocentro=aula.codtipocentro "
                    + "INNER JOIN centro on centro.codcentro=aula.cocentro "
                    + "INNER JOIN nivel on nivel.codnivel=aula.codnivel "
                    + "INNER JOIN tipo_grado on tipo_grado.codtipogrado=aula.codtipogrado "
                    + "WHERE aula.codlocal='" + codigoSede + "' AND tipo_centro.codtipocentro='" + codigoTipoCentro + "' and centro.codcentro='" + codigoCentro + "' and nivel.codnivel='" + codigoNivel + "' and tipo_grado.estado='1'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                TipoGrado tipogrado = new TipoGrado();
                tipogrado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                tipogrado.setNombreTipoGrado(rs.getString("destipogrado"));
                lista.add(tipogrado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int cantidadTipoGrado(String codTipo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT count(*) as cant from grado WHERE codtipogrado=" + codTipo + " and estado=1  ";

            ResultSet rs = st.executeQuery(query);

            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

}
