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

/**
 *
 * @author sistem16user
 */
public class MySqlDisponibilidadDAO implements DisponibilidadDocenteDAO {

    @Override
    public int registrarDisponibilidad(String codDoc, String diaDisp, String periodo) throws Exception {
        int dato = 0;
        int res = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryConsulta = "SELECT COUNT(*) as cantidad from disponibilidad_docente WHERE codDoc='" + codDoc + "' and cod_per='" + periodo + "' ";
            ResultSet rs = st.executeQuery(queryConsulta);
            String queryIU = "";
            if (rs.next()) {
                if (rs.getInt("cantidad") == 0) {
                    queryIU = "Insert into disponibilidad_docente (codDoc, diaDis,cod_per,estDis) value ('" + codDoc + "','" + diaDisp + "','" + periodo + "','1');";
                    res = 1;
                } else {
                    queryIU = "Update disponibilidad_docente SET diaDiS ='" + diaDisp + "'  WHERE codDoc='" + codDoc + "' and cod_per='" + periodo + "' ";
                    res = 2;
                }
                dato = st.executeUpdate(queryIU);
                if (dato == 1) {
                    res = res;
                } else {
                    res = 3;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return res;

    }
    
    @Override
    public int registrarDisponibilidadBloque(String codDoc, String diaDisp, String periodo) throws Exception {
        int dato = 0;
        int res = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryConsulta = "SELECT COUNT(*) as cantidad from disponibilidad_cuarentena WHERE coddocente='" + codDoc + "' and codigo_periodo='" + periodo + "' ";
            ResultSet rs = st.executeQuery(queryConsulta);
            String queryIU = "";
            if (rs.next()) {
                if (rs.getInt("cantidad") == 0) {
                    queryIU = "Insert into disponibilidad_cuarentena (coddocente,bloques_disponibles,codigo_periodo,estado) value ('" + codDoc + "','" + diaDisp + "','" + periodo + "',0);";
                    res = 1;
                } else {
                    queryIU = "Update disponibilidad_cuarentena SET bloques_disponibles ='" + diaDisp + "'  WHERE coddocente='" + codDoc + "' and codigo_periodo='" + periodo + "' ";
                    res = 2;
                }
                dato = st.executeUpdate(queryIU);
                if (dato == 1) {
                    res = res;
                } else {
                    res = 3;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return res;

    }	
		
    @Override
    public int registrarDisponibilidadConformidad(String codDoc, String diaDispConfirmados, String periodo) throws Exception {
        int dato = 0;
        int res = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryConsulta = "SELECT COUNT(*) as cantidad from conformidad WHERE cod_doc='" + codDoc + "' and cod_per='" + periodo + "' ";
            ResultSet rs = st.executeQuery(queryConsulta);
            String queryIU = "";
            if (rs.next()) {
                if (rs.getInt("cantidad") == 0) {
                    queryIU = "Insert into conformidad (cod_doc,cod_per,diasConf) value ('" + codDoc + "','" + periodo + "','" + diaDispConfirmados + "');";
                    res = 1;
                } else {
                    queryIU = "Update conformidad SET diasConf ='" + diaDispConfirmados + "'  WHERE cod_doc='" + codDoc + "' and cod_per='" + periodo + "' ";
                    res = 2;
                }
                dato = st.executeUpdate(queryIU);
                if (dato == 1) {
                    res = res;
                } else {
                    res = 3;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return res;

    }
	
    @Override
    public String ConsDisponibilidad(String codDoc) throws Exception {
        String base = "horario";
        String dato = "";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryConsulta = "SELECT IFNULL(diaDis,'') as diaDis from disponibilidad_docente WHERE codDoc='" + codDoc + "'";
            ResultSet rs = st.executeQuery(queryConsulta);

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

    @Override
    public ArrayList<DisponibilidadDocente> docentesAsignados() throws Exception {
        ArrayList<DisponibilidadDocente> lista = new ArrayList<DisponibilidadDocente>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT codDoc from disponibilidad_docente";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                DisponibilidadDocente disp = new DisponibilidadDocente();
                disp.setCodDoc(rs.getString("codDoc"));

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

    @Override
    public ArrayList<DisponibilidadDocente> listarTodoDisponibilidadDocente(String periodo) throws Exception {
        ArrayList<DisponibilidadDocente> lista = new ArrayList<DisponibilidadDocente>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "select  sacoolive3.profesor.apellido, sacoolive3.profesor.nombre,"
                    + "horarios_docente.disponibilidad_docente.codDis,"
                    + "horarios_docente.disponibilidad_docente.codDoc,"
                    + "horarios_docente.disponibilidad_docente.diaDis "
                    + "from horarios_docente.disponibilidad_docente, sacoolive3.profesor "
                    + "WHERE horarios_docente.disponibilidad_docente.cod_per='" + periodo + "' and estDis=1 and horarios_docente.disponibilidad_docente.codDoc= sacoolive3.profesor.codprofesor";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                DisponibilidadDocente disp = new DisponibilidadDocente();
                disp.setCodDoc(rs.getString("codDoc"));
                disp.setCodDisDoc(rs.getInt("codDis"));
                disp.setDiaDis(rs.getString("diaDis"));
                disp.setApellido(rs.getString("apellido"));
                disp.setNombre(rs.getString("nombre"));
                lista.add(disp);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public ArrayList<DisponibilidadDocente> listarEstadoDisponibilidadDocente() throws Exception {
        String base = "sacoolive3";

        ArrayList<DisponibilidadDocente> lista = new ArrayList<DisponibilidadDocente>();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryConsulta = "select codprofesor as codigo,apellido,nombre from profesor WHERE estadoprofe='Y'";
            ResultSet rs = st.executeQuery(queryConsulta);

            String queryConsulta2 = "SELECT codDoc as codDocDis,codDis from disponibilidad_docente WHERE estDis=1";
            ResultSet rs2 = st.executeQuery(queryConsulta2);
            if (rs.getString("codigo") == rs2.getString("codDocDis")) {

            }

       // ResultSet rs=st.executeQuery(queryConsulta);
            System.out.println(queryConsulta);
            if (rs.next()) {
                DisponibilidadDocente disp = new DisponibilidadDocente();
                disp.setDiaDis(rs.getString("diaDis"));
                lista.add(disp);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

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

            String queryConsulta = "SELECT IFNULL(diaDis,'') as diaDis from disponibilidad_docente ";
            ResultSet rs = st.executeQuery(queryConsulta);

            if (rs.next()) {
                DisponibilidadDocente disp = new DisponibilidadDocente();
                disp.setDiaDis(rs.getString("diaDis"));
                lista.add(disp);
            }
            
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int verificarDisponibilidad(String codigoDocente, String cadena) 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 disponibilidad_docente where codDoc='" + codigoDocente + "' and diaDis like '%" + cadena + "%'";
            ResultSet rs = st.executeQuery(queryConsulta);

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

    @Override
    public int asignadoDisponibilidad(String codigoDocente, int dia, int turno) 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 horario_curso_docente where cod_doc='" + codigoDocente + "' and dia='" + dia + "' and cod_tur='" + turno + "' ";
            System.out.println("sasa----> "+queryConsulta);
            ResultSet rs = st.executeQuery(queryConsulta);

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

    @Override
    public ArrayList<DisponibilidadDocente> docentesAsignados(String periodo) throws Exception {
        ArrayList<DisponibilidadDocente> lista = new ArrayList<DisponibilidadDocente>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT codDoc from disponibilidad_docente WHERE cod_per='" + periodo + "' ";
            System.out.println(query);
            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                DisponibilidadDocente disp = new DisponibilidadDocente();
                disp.setCodDoc(rs.getString("codDoc"));

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

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

            String queryConsulta = "SELECT IFNULL(diaDis,'') as diaDis from disponibilidad_docente WHERE codDoc='" + codDoc + "' AND cod_per='" + periodo + "'";
           
            ResultSet rs = st.executeQuery(queryConsulta);

            if (rs.next()) {
                dato = rs.getString("diaDis");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        
        return dato;
    }
    
    @Override
    public String ConsDisponibilidadBloque(String codDoc, String periodo) throws Exception {
        String base = "horario";
        String dato = "";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryConsulta = "SELECT IFNULL(bloques_disponibles,'') as diaDis from disponibilidad_cuarentena WHERE coddocente='" + codDoc + "' AND codigo_periodo='" + periodo + "'";
           
            ResultSet rs = st.executeQuery(queryConsulta);

            if (rs.next()) {
                dato = rs.getString("diaDis");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        
        return dato;
    }
    
    @Override
    public String ConsBloque(int turno) throws Exception {
        String base = "horario";
        String dato = "";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String queryConsulta = "select GROUP_CONCAT(CONCAT_WS(\" a \",inicio,termino)) bloque from bloque_cuarentena where turno="+turno+" and estado=0";
           
            ResultSet rs = st.executeQuery(queryConsulta);

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

    @Override
    public int asignadoDisponibilidad(String codigoDocente, int dia, int turno, String periodo) 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 horario_curso_docente where cod_doc='" + codigoDocente + "' and dia='" + dia + "' and cod_tur='" + turno + "' AND cod_per='"+periodo+"' and est_hcd='1' ";
            System.out.println("sasa----> "+queryConsulta);
            ResultSet rs = st.executeQuery(queryConsulta);

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

    @Override
    public ArrayList<DisponibilidadDocente> listarTodoDisponibilidadDocentePorPlana(String periodo, String plana) throws Exception {
        ArrayList<DisponibilidadDocente> lista = new ArrayList<DisponibilidadDocente>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "SELECT  \n" +
"  	   pr.codprofesor codDoc,  \n" +
"  	  pr.apellido, pr.nombre, 		  		\n" +
"  	   	dd.diaDis,dd.codDis  \n" +
"  	   FROM  \n" +
"  	   	plana_docente pd  \n" +
"  	   INNER JOIN sacoolive3.profesor pr ON pr.codprofesor = pd.cod_doc  \n" +
"  	   LEFT JOIN (  \n" +
"  	   	SELECT  \n" +
"  	   		codDoc,  \n" +
"  	   		diaDis,bloqueo,diasSin,codDis  \n" +
"  	   	FROM  \n" +
"  	   		disponibilidad_docente  \n" +
"  	   	WHERE  \n" +
"  	   		estDis = 1 \n" +
"  	   	AND cod_per = '"+periodo+"'\n" +
"  	   ) dd ON dd.codDoc = pd.cod_doc  \n" +
"  	   WHERE  \n" +
"  	   	pr.estadoprofe = 'Y'  \n" +
"  	   AND pd.cod_pla = '"+plana+"' AND pd.cod_per='"+periodo+"'\n" +
"  	   GROUP BY  \n" +
"  	   	pr.codprofesor,   \n" +
"  	   	dd.diaDis  \n" +
"  	   ORDER BY  \n" +
"  	   	pr.apellido ASC";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                DisponibilidadDocente disp = new DisponibilidadDocente();
                disp.setCodDoc(rs.getString("codDoc"));
                disp.setCodDisDoc(rs.getInt("codDis"));
                disp.setDiaDis(rs.getString("diaDis"));
                disp.setApellido(rs.getString("apellido"));
                disp.setNombre(rs.getString("nombre"));
                lista.add(disp);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

}
