/*
 * 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.Bloque;
import pe.siso.horario.Beans.Grupo;
import pe.siso.horario.DAO.BloqueDAO;

/**
 *
 * @author sistem16user
 */
public class MySqlBloqueDAO implements BloqueDAO {

    @Override
    public ArrayList<Bloque> cargarBloque() throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "select bloque.codBlo, bloque.nomBloq from bloque WHERE bloque.estBloq = 1";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Bloque bloque = new Bloque();
                bloque.setCod_blo(rs.getInt("bloque.codBlo"));
                bloque.setNom_blo(rs.getString("bloque.nomBloq"));

                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public ArrayList<Bloque> BusquedaBloque(String cod) throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String codigos = "0";
            String query = "SELECT DISTINCT db.codBlo,db.codGru FROM detbloque as db WHERE db.codBlo='" + cod + "'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                codigos += "," + rs.getString("codGru");

            }

            String query2 = "SELECT codGru,nomGrup,estGru FROM grupo_bloque WHERE codGru in (" + codigos + ")";
            System.out.println(query2);
            ResultSet rs2 = st.executeQuery(query2);

            while (rs2.next()) {
                Bloque bloque = new Bloque();
                bloque.setCod_gru(rs2.getString("codGru"));
                bloque.setNom_gru(rs2.getString("nomGrup"));
                bloque.setEst_gru(rs2.getString("estGru"));
                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void registrarBloque(String codBlo, String Nombre, String horaIni, String horaFin, String Cant) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryInsert = "INSERT INTO detbloque (codBlo,ordBlo,HorIni, HorFin, CanMin)  VALUES ('" + codBlo + "','" + Nombre + "','" + horaIni + "','" + horaFin + "','" + Cant + "');";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public void registrarBloque(String codBlo, String codDet) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String cant = "select count(*) as Cantidad  from grupo_bloque";
            ResultSet rs = st.executeQuery(cant);
            int cantidadGrupo = 0;
            if (rs.next()) {
                cantidadGrupo = rs.getInt("Cantidad");
            }
            int correlativoBlo = cantidadGrupo + 1;

            String nomG = "Bloque " + codBlo + " - Grupo " + correlativoBlo;
            String queryInsert2 = "INSERT INTO grupo_bloque (nomGrup,estGru)  VALUES ('" + nomG + "','1');";
            st.executeUpdate(queryInsert2);

            String[] Array1 = codDet.split("#");

            for (int i = 0; i < Array1.length; i++) {
                String[] Array2 = Array1[i].split("-");

                String queryInsert = "INSERT INTO detbloque (codBlo,ordBlo,HorIni, HorFin, CanMin, estdet, codGru)  VALUES ('" + codBlo + "','" + Array2[0] + "','" + Array2[1] + "','" + Array2[2] + "','" + Array2[3] + "','1','" + correlativoBlo + "');";
                st.executeUpdate(queryInsert);

                System.out.println(queryInsert);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

    }

    @Override
    public ArrayList<Bloque> consultarDetalleBloque(String codigoGrupo) throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT codDetBlo,codBlo,HorIni,HorFin,CanMin FROM detbloque WHERE codGru='" + codigoGrupo + "' and estdet='1' ORDER BY ordBlo";
            System.out.println("(2)-- (((consultarDetalleBloque))) ---->>>  " + query);
            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Bloque bloque = new Bloque();
                bloque.setCod_blo(rs.getInt("codBlo"));
                bloque.setCod_det_blo(rs.getInt("codDetBlo"));
                bloque.setHor_ini(rs.getString("HorIni"));
                bloque.setHor_fin(rs.getString("HorFin"));
                bloque.setCan_min(rs.getInt("CanMin"));

                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    ///-------------
    @Override
    public ArrayList<Bloque> BusquedaListaBloque(String codigoBloque) throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT DISTINCT bloque.codBlo, bloque.nomBloq, bloque.estBloq,detbloque.codGru, grupo_bloque.nomGrup,grupo_bloque.codTurno FROM bloque "
                    + "INNER JOIN detbloque ON bloque.codBlo = detbloque.codBlo "
                    + "INNER JOIN grupo_bloque ON grupo_bloque.codGru = detbloque.codGru "
                    + "WHERE bloque.codBlo='" + codigoBloque + "'";

            System.out.println(query);
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Bloque bloque = new Bloque();
                //  bloque.setCod_det_blo(rs.getInt("codDetBlo"));
                bloque.setCod_blo(rs.getInt("codBlo"));
                bloque.setCod_gru(rs.getString("codGru"));
                bloque.setNom_blo(rs.getString("nomBloq"));
                bloque.setEst_blo(rs.getInt("estBloq"));
                bloque.setNom_gru(rs.getString("nomGrup"));
                bloque.setTur_gru(rs.getString("codTurno"));

                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public ArrayList<Bloque> detallebloque(String codigoBloque, String codigoGrupo) throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT detbloque.HorIni, detbloque.HorFin, detbloque.CanMin,bloque.codBlo, "
                    + "bloque.nomBloq, detbloque.ordBlo,grupo_bloque.codGru, grupo_bloque.nomGrup, "
                    + "detbloque.codDetBlo FROM detbloque INNER JOIN bloque ON bloque.codBlo = detbloque.codBlo "
                    + "INNER JOIN grupo_bloque ON grupo_bloque.codGru = detbloque.codGru "
                    + "WHERE detbloque.codBlo='" + codigoBloque + "' and detbloque.codGru='" + codigoGrupo + "'";

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

            while (rs.next()) {
                Bloque bloque = new Bloque();
                bloque.setCod_det_blo(rs.getInt("codDetBlo"));
                bloque.setCod_blo(rs.getInt("codBlo"));
                bloque.setCod_gru(rs.getString("codGru"));
                bloque.setCan_min(rs.getInt("CanMin"));
                bloque.setHor_ini(rs.getString("HorIni"));
                bloque.setHor_fin(rs.getString("HorFin"));
                bloque.setNom_blo(rs.getString("nomBloq"));
                bloque.setNom_gru(rs.getString("nomGrup"));
                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;

    }

    @Override
    public void actualizarDetalleBloque(String bloqueDetalle) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String[] Array1 = bloqueDetalle.split("#");

            for (int i = 0; i < Array1.length; i++) {
                String[] Array2 = Array1[i].split("-");

                String queryInsert = "UPDATE detbloque SET  HorIni='" + Array2[1] + "', HorFin='" + Array2[2] + "', CanMin='" + Array2[3] + "' where codDetBlo='" + Array2[4] + "'";
                st.executeUpdate(queryInsert);
                System.out.println(queryInsert);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public int estado(String codGrupo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String cantidad = "SELECT COUNT(*) as cantidad FROM horario_grupo WHERE horario_grupo.cod_gru = '" + codGrupo + "'";
            ResultSet rs = st.executeQuery(cantidad);

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

    }

    @Override
    public ArrayList<Bloque> mostrarBloques() throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT detbloque.codBlo, detbloque.codGru,detbloque.CanMin,detbloque.HorFin, "
                    + "detbloque.HorIni, detbloque.ordBlo,detbloque.codDetBlo, grupo_bloque.nomGrup, "
                    + "bloque.nomBloq FROM bloque "
                    + "INNER JOIN detbloque ON detbloque.codBlo = bloque.codBlo "
                    + "INNER JOIN grupo_bloque ON detbloque.codGru = grupo_bloque.codGru "
                    + "order by detbloque.codGru";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Bloque bloque = new Bloque();
                bloque.setCod_det_blo(rs.getInt("codDetBlo"));
                bloque.setCod_blo(rs.getInt("codBlo"));
                bloque.setCod_gru(rs.getString("codGru"));
                bloque.setCan_min(rs.getInt("CanMin"));
                bloque.setHor_ini(rs.getString("HorIni"));
                bloque.setHor_fin(rs.getString("HorFin"));
                bloque.setNom_blo(rs.getString("nomBloq"));
                bloque.setNom_gru(rs.getString("nomGrup"));

                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void registrarBloque(String codBlo, String codDet, String codTurno) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String cant = "select count(*) as Cantidad  from grupo_bloque";
            ResultSet rs = st.executeQuery(cant);
            int cantidadGrupo = 0;
            if (rs.next()) {
                cantidadGrupo = rs.getInt("Cantidad");
            }
            int correlativoBlo = cantidadGrupo + 1;

            String nomG = "Bloque " + codBlo + " - Grupo " + correlativoBlo;
            String queryInsert2 = "INSERT INTO grupo_bloque (nomGrup,codTurno,estGru)  VALUES ('" + nomG + "','" + codTurno + "','1');";
            // System.out.println(queryInsert2);
            st.executeUpdate(queryInsert2);

            String[] Array1 = codDet.split("#");

            for (int i = 0; i < Array1.length; i++) {
                String[] Array2 = Array1[i].split("-");

                String queryInsert = "INSERT INTO detbloque (codBlo,ordBlo,HorIni, HorFin, CanMin, estdet, codGru)  VALUES ('" + codBlo + "','" + Array2[0] + "','" + Array2[1] + "','" + Array2[2] + "','" + Array2[3] + "','1','" + correlativoBlo + "');";
                st.executeUpdate(queryInsert);

         //System.out.println(queryInsert);
            }

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

    @Override
    public Bloque consultarDatosGrupoBloque(String codigoAula) throws Exception {
        String base = "horario";
        Bloque bloque = new Bloque();
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT DISTINCT h.codaula,h.cod_gru,d.codBlo  "
                    + "FROM horario_grupo as h  "
                    + "INNER JOIN detbloque as d on d.codGru=h.cod_gru "
                    + "WHERE h.codaula='" + codigoAula + "'";

            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                bloque.setCod_blo(rs.getInt("codBlo"));
                bloque.setCod_gru(rs.getString("cod_gru"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return bloque;
    }

    @Override
    public int editarGrupoBloqAsignado(String codigoAula, String codigoGrupo) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {

            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryUpdate = "UPDATE horario_grupo SET cod_gru='" + codigoGrupo + "' WHERE codaula='" + codigoAula + "'";
            dato = st.executeUpdate(queryUpdate);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultaBloque(String cantidad) 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 bloque WHERE codBlo='" + cantidad + "'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public int consultaGrupo(String bloque) 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 detbloque WHERE codBlo='"+bloque+"'";
            String query = "select count(*) as cant from grupo_horario WHERE max_gru='" + bloque + "'";
            System.out.println(query);
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                dato = rs.getInt("cant");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public Bloque consultarTurno(String grupo) throws Exception {
        String base = "horario";
        Bloque bloque = new Bloque();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT codTurno,nomGrup,estGru FROM grupo_bloque WHERE codGru='" + grupo + "'";

            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                bloque.setTur_gru(rs.getString("codTurno"));
                bloque.setNom_gru(rs.getString("nomGrup"));
                bloque.setEst_gru(rs.getString("estGru"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return bloque;

    }

    @Override
    public ArrayList<Bloque> BusquedaBloque(String blque, String turno) throws Exception {
        ArrayList<Bloque> lista = new ArrayList<Bloque>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String codigos = "0";
            String query = "SELECT DISTINCT db.codBlo,db.codGru FROM detbloque as db WHERE db.codBlo='" + blque + "'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                codigos += "," + rs.getString("codGru");

            }

            String query2 = "SELECT codGru,nomGrup,estGru FROM grupo_bloque WHERE codGru in (" + codigos + ") and codTurno='" + turno + "'";
            System.out.println(query2);
            ResultSet rs2 = st.executeQuery(query2);

            while (rs2.next()) {
                Bloque bloque = new Bloque();
                bloque.setCod_gru(rs2.getString("codGru"));
                bloque.setNom_gru(rs2.getString("nomGrup"));
                bloque.setEst_gru(rs2.getString("estGru"));
                lista.add(bloque);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int registrarGrupoHorario(String cadena, String cantMax,String txtTurno,String txtDia) throws Exception {
        String base = "horario";
        int dato = 0;
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            int correlativo = 0;
            String consulta = "SELECT MAX(correlativo)+1 as cant FROM grupo_horario WHERE max_gru='" + cantMax + "'";
            ResultSet rs = st.executeQuery(consulta);
            if (rs.next()) {
                correlativo = rs.getInt("cant");
            }

            String nomGru = "Bloque " + cantMax + " - Grupo " + correlativo;
            String dia = txtDia.equals("GENERAL")?"L-S":txtDia;
            String displayName = dia +" / "+txtTurno;

            String queryInsert = "INSERT INTO grupo_horario (nom_gru, max_gru,correlativo, cadena,anio, est_gru,display_name) VALUES ('" + nomGru + "', '" + cantMax + "','" + correlativo + "', '" + cadena + "', YEAR(CURDATE()),'1','"+displayName+"')";
            System.out.println("insertGH --> " + queryInsert);
            dato = st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public ArrayList<Grupo> BusquedaListaBloqueHorario(String bloque) throws Exception {
        ArrayList<Grupo> lista = new ArrayList<Grupo>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT cod_gru,nom_gru,max_gru,cadena,est_gru,anio,IFNULL(display_name,nom_gru)display_name FROM grupo_horario WHERE max_gru='" + bloque + "' and est_gru='1' and anio ORDER BY anio DESC ";
            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                Grupo grupo = new Grupo();
                grupo.setCodigo(rs.getInt("cod_gru"));
                grupo.setNombreGrupo(rs.getString("nom_gru"));
                grupo.setMaximoGrupo(rs.getString("max_gru"));
                grupo.setCadena(rs.getString("cadena"));
                grupo.setEstado(rs.getInt("est_gru"));
                grupo.setAnio(rs.getString("anio"));
                grupo.setDiplayName(rs.getString("display_name"));
                lista.add(grupo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int EditarGrupoHorario(String cadena, String cantMax, String codigo) throws Exception {
        String base = "horario";

        int dato = 0;
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            int correlativo = 0;
            String consulta = "SELECT MAX(correlativo)+1 as cant FROM grupo_horario WHERE max_gru='" + cantMax + "'";
            System.out.println(consulta);
            ResultSet rs = st.executeQuery(consulta);
            if (rs.next()) {
                correlativo = rs.getInt("cant");
            }

            String nomGru = "Bloque " + cantMax + " - Grupo " + correlativo;

            String queryUpdate = "UPDATE grupo_horario SET correlativo='" + correlativo + "' , nom_gru='" + nomGru + "', max_gru='" + cantMax + "', cadena='" + cadena + "' WHERE cod_gru='" + codigo + "'";

            System.out.println("UpdateGH --> " + queryUpdate);
            dato = st.executeUpdate(queryUpdate);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public Grupo BusquedaDatosBloqueHorario(String codigo) throws Exception {
        Grupo grupo = new Grupo();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT cod_gru,nom_gru,max_gru,cadena,est_gru FROM grupo_horario WHERE cod_gru='" + codigo + "' and est_gru='1'";
            ResultSet rs = st.executeQuery(query);
            if (rs.next()) {
                grupo.setCodigo(rs.getInt("cod_gru"));
                grupo.setNombreGrupo(rs.getString("nom_gru"));
                grupo.setMaximoGrupo(rs.getString("max_gru"));
                grupo.setCadena(rs.getString("cadena"));
                grupo.setEstado(rs.getInt("est_gru"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return grupo;
    }

}
