/*
 * 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.Grado;
import pe.siso.horario.DAO.GradoDAO;

/**
 *
 * @author fcelestino
 */
public class MySqlGradoDAO implements GradoDAO {

    @Override
    public ArrayList<Grado> listarGrado(int inicio, int cantidad) throws Exception {
        ArrayList<Grado> lista = new ArrayList<Grado>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT grado.codgrado,grado.desgrado,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,tipo_centro.destipocentro,grado.estado,grado.orden "
                    + "FROM grado INNER JOIN tipo_grado on tipo_grado.codtipogrado=grado.codtipogrado "
                    + "INNER JOIN nivel on nivel.codnivel=grado.codnivel "
                    + "INNER JOIN centro on centro.codcentro=grado.codcentro "
                    + "INNER JOIN tipo_centro on tipo_centro.codtipocentro=centro.codtipocentro "
                    + "ORDER BY tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado  LIMIT " + inicio + ", " + cantidad + " ";

            ResultSet rs = st.executeQuery(query);
            System.out.println(query);
            while (rs.next()) {
                Grado grado = new Grado();
                grado.setCodigoGrado(rs.getInt("codgrado"));
           // grado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                // grado.setCodigoNivel(rs.getInt("codnivel"));
                // grado.setCodigoCentro(rs.getInt("codcentro"));

                grado.setNombreCentro(rs.getString("descentro"));
                grado.setNombreGrado(rs.getString("desgrado"));
                grado.setNombreNivel(rs.getString("desnivel"));
                grado.setNombreTipoCentro(rs.getString("destipocentro"));
                grado.setNombreTipoGrado(rs.getString("destipogrado"));

                grado.setEstadoGrado(rs.getInt("estado"));
                grado.setOrdenGrado(rs.getInt("orden"));
                lista.add(grado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

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

            String query = "SELECT grado.codgrado,tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado,grado.codcentro,grado.codnivel,grado.codtipogrado,grado.estado,grado.orden FROM grado "
                    + "INNER JOIN tipo_grado on tipo_grado.codtipogrado=grado.codtipogrado "
                    + "INNER JOIN nivel on nivel.codnivel=grado.codnivel "
                    + "INNER JOIN centro on centro.codcentro=grado.codcentro "
                    + "INNER JOIN tipo_centro on tipo_centro.codtipocentro=centro.codtipocentro "
                    + " WHERE centro.codcentro='" + codigoCentro + "' AND nivel.codnivel='" + codigoNivel + "' AND tipo_grado.codtipogrado='" + codigoTipoGrado + "' "
                    + "ORDER BY tipo_centro.destipocentro,centro.descentro,nivel.desnivel,tipo_grado.destipogrado,grado.desgrado";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Grado grado = new Grado();
                grado.setCodigoGrado(rs.getInt("codgrado"));
                grado.setCodigoTipoGrado(rs.getInt("codtipogrado"));
                grado.setCodigoNivel(rs.getInt("codnivel"));
                grado.setCodigoCentro(rs.getInt("codcentro"));

                grado.setNombreCentro(rs.getString("descentro"));
                grado.setNombreGrado(rs.getString("desgrado"));
                grado.setNombreNivel(rs.getString("desnivel"));
                grado.setNombreTipoCentro(rs.getString("destipocentro"));
                grado.setNombreTipoGrado(rs.getString("destipogrado"));

                grado.setEstadoGrado(rs.getInt("estado"));
                grado.setOrdenGrado(rs.getInt("orden"));
                lista.add(grado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

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

            String queryInsert = "INSERT INTO grado (desgrado,codcentro,codnivel,codtipogrado,estado,orden) VALUES ('" + nombreGrado + "','" + codigoCentro + "','" + codigoNivel + "','" + codigoTipoGrado + "','1','1');";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

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

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

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

            String query = "SELECT codgrado,desgrado  FROM grado "
                    + "WHERE codcentro='" + codigoCentro + "' and codnivel='" + codigoNivel + "' and codtipogrado='" + codigoTipoGrado + "' and estado='1';";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Grado grado = new Grado();
                grado.setCodigoGrado(rs.getInt("codgrado"));
                grado.setNombreGrado(rs.getString("desgrado"));
                lista.add(grado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

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

            String queryInsert = "UPDATE grado SET desgrado='" + nombre + "' WHERE codgrado='" + codigoGrado + "';";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public Grado nombreGrado(String codGrado) throws Exception {
        String base = "horario";

        Grado grado = new Grado();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT "
                    + "grado.codgrado, "
                    + "grado.desgrado, "
                    + "centro.descentro, "
                    + "nivel.desnivel, "
                    + "tipo_grado.destipogrado, "
                    + "tipo_centro.destipocentro "
                    + "FROM  "
                    + "grado "
                    + "INNER JOIN centro ON grado.codcentro = centro.codcentro "
                    + "INNER JOIN nivel ON grado.codnivel = nivel.codnivel "
                    + "INNER JOIN tipo_grado ON tipo_grado.codtipogrado = grado.codtipogrado "
                    + "INNER JOIN tipo_centro ON tipo_centro.codtipocentro = centro.codtipocentro WHERE grado.codgrado ='" + codGrado + "'";

            ResultSet rs = st.executeQuery(query);
            System.out.println(query);
            while (rs.next()) {

                grado.setCodigoGrado(rs.getInt("codgrado"));
                grado.setNombreGrado(rs.getString("desgrado"));
                grado.setNombreCentro(rs.getString("descentro"));
                grado.setNombreNivel(rs.getString("desnivel"));
                grado.setNombreTipoCentro(rs.getString("destipocentro"));
                grado.setNombreTipoGrado(rs.getString("destipogrado"));

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

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

            String query = "SELECT DISTINCT aula.codlocal,grado.codgrado,grado.desgrado "
                    + "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 "
                    + "INNER JOIN grado on grado.codgrado=aula.codgrado "
                    + "WHERE aula.codlocal='" + codigoSede + "' AND tipo_centro.codtipocentro='" + codigoTipoCentro + "' and centro.codcentro='" + codigoCentro + "' and nivel.codnivel='" + codigoNivel + "' and tipo_grado.codtipogrado='" + codigoTipoGrado + "' and grado.estado='1'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Grado grado = new Grado();
                grado.setCodigoGrado(rs.getInt("codgrado"));
                grado.setNombreGrado(rs.getString("desgrado"));
                lista.add(grado);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int cantidadGrado() throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsulta = "SELECT count(*) as cant FROM grado";
            ResultSet rs = st.executeQuery(queryConsulta);

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

    @Override
    public int cantidadGrado(String codigo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsulta = "SELECT count(*) as cant FROM seccion where codgrado=" + codigo + " and estado=1";
            ResultSet rs = st.executeQuery(queryConsulta);
            System.out.println("consulta----> " + queryConsulta);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

}
