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

/**
 *
 * @author fcelestino
 */
public class MySqlUsuarioDAO implements UsuarioDAO {

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

            String query = "SELECT COUNT(cod_usu) as cant FROM usuario WHERE usu_usu='" + usuario + "' and cla_usu='" + clave + "' and est_usu='1';";

            ResultSet rs = st.executeQuery(query);

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

    }

    @Override
    public Usuario consultar(String usuario, String clave) throws Exception {
        String base = "horario";
        Usuario usuario1 = new Usuario();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT usuario.cod_usu,usuario.cod_tip_usu, usuario.ani_usu, usuario.usu_usu, usuario.cla_usu, usuario.cod_loc, usuario.est_usu, tipo_usuario.nom_tip_usu, sede.des_loc "
                    + "FROM usuario "
                    + "LEFT JOIN  sede ON sede.cod_loc = usuario.cod_loc "
                    + "INNER JOIN tipo_usuario ON tipo_usuario.cod_tip_usu = usuario.cod_tip_usu "
                    + "WHERE usuario.usu_usu='" + usuario + "' and  usuario.cla_usu='" + clave + "' and usuario.est_usu='1'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                usuario1.setCodigoUsuario(rs.getInt("cod_usu"));
                usuario1.setCodigoTipoUsuario(rs.getInt("cod_tip_usu"));
                usuario1.setCodigoSede(rs.getInt("cod_loc"));
                usuario1.setNombreSede(rs.getString("des_loc"));
                usuario1.setUsuarioUsuario(rs.getString("usu_usu"));
                usuario1.setNombreTipoUsuario(rs.getString("nom_tip_usu"));
                usuario1.setClaveUsuario(rs.getString("cla_usu"));
                usuario1.setEstado(rs.getInt("est_usu"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return usuario1;
    }

    @Override
    public ArrayList<Usuario> listarUsuariosDirage() throws Exception {
        ArrayList<Usuario> lista = new ArrayList<Usuario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT usuario.cod_tip_usu,usuario.usu_usu,usuario.cla_usu,usuario.cod_loc, "
                    + "usuario.cod_usu,tipo_usuario.nom_tip_usu,tipo_usuario.cod_tip_usu,usuario.est_usu, "
                    + "sede.des_loc FROM usuario INNER JOIN tipo_usuario ON tipo_usuario.cod_tip_usu = usuario.cod_tip_usu "
                    + "INNER JOIN sede ON usuario.cod_loc = sede.cod_loc WHERE tipo_usuario.cod_tip_usu=2";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigoUsuario(rs.getInt("cod_usu"));
                usuario.setUsuarioUsuario(rs.getString("usu_usu"));
                usuario.setClaveUsuario(rs.getString("cla_usu"));
                usuario.setCodigoSede(rs.getInt("cod_loc"));
                usuario.setNombreSede(rs.getString("des_loc"));
                usuario.setCodigoTipoUsuario(rs.getInt("cod_tip_usu"));
                usuario.setNombreTipoUsuario(rs.getString("nom_tip_usu"));
                usuario.setEstado(rs.getInt("est_usu"));
                lista.add(usuario);

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

    @Override
    public int registrarUsuarioDirage(String nombreDirage, String Clave) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "";

            String queryConsulta = "select count(*) as cant from usuario WHERE usuario.usu_usu= '" + nombreDirage + "'";
            ResultSet rs = st.executeQuery(queryConsulta);

            while (rs.next()) {
                dato = rs.getInt("cant");
            }

            if (dato == 0) {
                String queryInsert = "INSERT INTO usuario (cod_tip_usu,ani_usu,usu_usu,cla_usu,cod_loc,est_usu) VALUES ('2','2014','" + nombreDirage + "','" + Clave + "','40','1');";
                st.executeUpdate(queryInsert);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }
    @Override
    public int registrarUsuarioObservador(String usuario, String Clave,String codloc) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "";

            String queryConsulta = "select count(*) as cant from usuario WHERE usuario.usu_usu= '" + usuario + "'";
            ResultSet rs = st.executeQuery(queryConsulta);

            while (rs.next()) {
                dato = rs.getInt("cant");
            }

            if (dato == 0) {
                String queryInsert = "INSERT INTO usuario (cod_tip_usu,ani_usu,usu_usu,cla_usu,cod_loc,est_usu) VALUES ('6','2019','" + usuario + "','" + Clave + "','"+codloc+"','1');";
                st.executeUpdate(queryInsert);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public void cambiarEstado(String dato, String codigoUsuario) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public Usuario NombreUsuario(String codigoUsuario) throws Exception {
        String base = "horario";
        Usuario usuario = new Usuario();
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();

            String query = "SELECT usuario.usu_usu, usuario.cla_usu, tipo_usuario.nom_tip_usu, usuario.cod_loc,"
                    + "sede.des_loc FROM usuario INNER JOIN tipo_usuario ON tipo_usuario.cod_tip_usu = usuario.cod_tip_usu "
                    + "INNER JOIN sede ON sede.cod_loc = usuario.cod_loc "
                    + "WHERE cod_usu='" + codigoUsuario + "'";

            ResultSet rs = st.executeQuery(query);
            while (rs.next()) {
                usuario.setUsuarioUsuario(rs.getString("usu_usu"));
                usuario.setClaveUsuario(rs.getString("cla_usu"));
                usuario.setCodigoSede(rs.getInt("cod_loc"));
                usuario.setNombreSede(rs.getString("des_loc"));
                usuario.setNombreTipoUsuario(rs.getString("nom_tip_usu"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return usuario;
    }

    @Override
    public void actualizar(String codigoUsuario, String nombre, String clave) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryInsert = "UPDATE usuario set usu_usu='" + nombre + "',cla_usu='" + clave + "' where cod_usu='" + codigoUsuario + "'";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public void Estado(String dato, String codigoUsuario) throws Exception {
        String base = "horario";

        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryInsert = "UPDATE usuario set est_usu='" + dato + "' where cod_usu='" + codigoUsuario + "'";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public ArrayList<Usuario> listarUsuariosSede() throws Exception {
        ArrayList<Usuario> lista = new ArrayList<Usuario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT usuario.cod_tip_usu,usuario.usu_usu,usuario.cla_usu,usuario.cod_loc, "
                    + "usuario.cod_usu,tipo_usuario.nom_tip_usu,tipo_usuario.cod_tip_usu,usuario.est_usu, "
                    + "sede.des_loc FROM usuario INNER JOIN tipo_usuario ON tipo_usuario.cod_tip_usu = usuario.cod_tip_usu "
                    + "INNER JOIN sede ON usuario.cod_loc = sede.cod_loc WHERE tipo_usuario.cod_tip_usu=3";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigoUsuario(rs.getInt("cod_usu"));
                usuario.setUsuarioUsuario(rs.getString("usu_usu"));
                usuario.setClaveUsuario(rs.getString("cla_usu"));
                usuario.setCodigoSede(rs.getInt("cod_loc"));
                usuario.setNombreSede(rs.getString("des_loc"));
                usuario.setCodigoTipoUsuario(rs.getInt("cod_tip_usu"));
                usuario.setNombreTipoUsuario(rs.getString("nom_tip_usu"));
                usuario.setEstado(rs.getInt("est_usu"));
                lista.add(usuario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int registrarUsuarioSede(String nombreUsuSede, String Clave, String codloc) throws Exception {
        int dato = 0;
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "";

            String queryConsulta = "select count(*) as cant from usuario WHERE usuario.usu_usu= '" + nombreUsuSede + "' and usuario.cod_loc='" + codloc + "'";
            ResultSet rs = st.executeQuery(queryConsulta);

            while (rs.next()) {
                dato = rs.getInt("cant");
            }

            if (dato == 0) {
                String queryInsert = "INSERT INTO usuario (cod_tip_usu,ani_usu,usu_usu,cla_usu,cod_loc,est_usu) VALUES ('3','2014','" + nombreUsuSede + "','" + Clave + "','" + codloc + "','1');";
                st.executeUpdate(queryInsert);
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }

    @Override
    public ArrayList<Usuario> cargarSede() throws Exception {
        ArrayList<Usuario> lista = new ArrayList<Usuario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = "select cod_loc,des_loc from sede WHERE est_loc=1 and cod_loc!=40 ORDER BY des_loc ";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigoSede(rs.getInt("cod_loc"));
                usuario.setNombreSede(rs.getString("des_loc"));
                lista.add(usuario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public void actualizar(String codigoUsuario, String nombre, String clave, String codLocal) throws Exception {
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String queryInsert = "UPDATE usuario set usu_usu='" + nombre + "',cla_usu='" + clave + "',cod_loc='" + codLocal + "' where cod_usu='" + codigoUsuario + "'";
            st.executeUpdate(queryInsert);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
    }

    @Override
    public ArrayList<Usuario> listarUsuarioDirector() throws Exception {
                ArrayList<Usuario> lista = new ArrayList<Usuario>();
        String base = "horario";
        Connection cnx = null;
        try {
            cnx = MySqlDAOFactory.obtenerConexion(base);
            Statement st = cnx.createStatement();
            String query = " SELECT usuario.cod_tip_usu,usuario.usu_usu,usuario.cla_usu,usuario.cod_loc, "
                    + "usuario.cod_usu,tipo_usuario.nom_tip_usu,tipo_usuario.cod_tip_usu,usuario.est_usu, "
                    + "sede.des_loc FROM usuario INNER JOIN tipo_usuario ON tipo_usuario.cod_tip_usu = usuario.cod_tip_usu "
                    + "INNER JOIN sede ON usuario.cod_loc = sede.cod_loc WHERE tipo_usuario.cod_tip_usu='5'";

            ResultSet rs = st.executeQuery(query);

            while (rs.next()) {
                Usuario usuario = new Usuario();
                usuario.setCodigoUsuario(rs.getInt("cod_usu"));
                usuario.setUsuarioUsuario(rs.getString("usu_usu"));
                usuario.setClaveUsuario(rs.getString("cla_usu"));
                usuario.setCodigoSede(rs.getInt("cod_loc"));
                usuario.setNombreSede(rs.getString("des_loc"));
                usuario.setCodigoTipoUsuario(rs.getInt("cod_tip_usu"));
                usuario.setNombreTipoUsuario(rs.getString("nom_tip_usu"));
                usuario.setEstado(rs.getInt("est_usu"));
                lista.add(usuario);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return lista;
    }

    @Override
    public int registrarUsuarioDirector(String nombreUsuSede, String Clave, String codloc) 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 usuario WHERE usuario.usu_usu= '" + nombreUsuSede + "' and usuario.cod_loc='" + codloc + "'";
            ResultSet rs = st.executeQuery(queryConsulta);

            if (rs.next()) {
                dato = rs.getInt("cant");
            }

            if (dato == 0) {
                String queryInsert = "INSERT INTO usuario (cod_tip_usu,ani_usu,usu_usu,cla_usu,cod_loc,est_usu) VALUES ('5',YEAR(NOW()),'" + nombreUsuSede + "','" + Clave + "','" + codloc + "','1');";
                st.executeUpdate(queryInsert);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }
        return dato;
    }
}
