package dao;

import Modelo.Conexion;
import Modelo.Usuario;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class UsuarioBD {

    public static synchronized boolean ingresarusuario(Usuario varUsuario) {
        Connection cn = null;
        boolean rpta = false;
        try {
            cn = Conexion.getConexion();
            Statement st = cn.createStatement();
            //asignamos caracteristicas del producto
            String nombre = varUsuario.getUsua_nombre();
            int idrol = varUsuario.getRol_id();
            int idorigen = varUsuario.getOri_id();
            String cuenta = varUsuario.getUsua_account();
            String password = varUsuario.getUsua_password();
            String mail = varUsuario.getUsua_mail();
            //sql para insertar
            int m = st.executeUpdate("INSERT INTO Usuario (usua_account,usua_mail,usua_nombre,"
                    + "usua_password,ori_id,rol_id) VALUES ('" + cuenta + "','" + mail + "',"
                    + "'" + nombre + "','" + password + "','" + idorigen + "','" + idrol + "')");
            if (m > 0) {
                rpta = true;
            } else {

                Conexion.deshacerCambios(cn);
            }
            Conexion.cerrarConexion(cn);
        } catch (SQLException e) {
            Conexion.deshacerCambios(cn);
            Conexion.cerrarConexion(cn);
        } catch (Exception e) {
            Conexion.deshacerCambios(cn);
            Conexion.cerrarConexion(cn);
        }
        return rpta;
    }

    public static synchronized boolean actualizarusuario(Usuario varUsuario) {
        Connection cn = null;
        boolean rpta = false;
        try {
            cn = Conexion.getConexion();
            Statement st = cn.createStatement();
            //asignamos caracteristicas del producto
            String nombre = varUsuario.getUsua_nombre();
            int idrol = varUsuario.getRol_id();
            int idorigen = varUsuario.getOri_id();
            String cuenta = varUsuario.getUsua_account();
            String password = varUsuario.getUsua_password();
            String mail = varUsuario.getUsua_mail();
            //sql para insertar
            int m = st.executeUpdate("update usuario set usua_account='" + cuenta + "'"
                    + ",usua_mail='" + mail + "',usua_nombre='" + nombre + "'"
                    + ",usua_password='" + password + "',ori_id='" + idorigen + "'"
                    + ",rol_id='" + idrol + "' where usua_id='" + varUsuario.getUsua_id() + "'");
            if (m > 0) {
                rpta = true;
            } else {

                Conexion.deshacerCambios(cn);
            }
            Conexion.cerrarConexion(cn);
        } catch (SQLException e) {
            Conexion.deshacerCambios(cn);
            Conexion.cerrarConexion(cn);
        } catch (Exception e) {
            Conexion.deshacerCambios(cn);
            Conexion.cerrarConexion(cn);
        }
        return rpta;
    }

    public static synchronized boolean eliminarusuario(Usuario varUsuario) {
        Connection cn = null;
        boolean rpta = false;
        try {
            cn = Conexion.getConexion();
            Statement st = cn.createStatement();
            int m = st.executeUpdate("delete from usuario where usua_id='" + varUsuario.getUsua_id() + "'");
            if (m > 0) {
                rpta = true;
            } else {

                Conexion.deshacerCambios(cn);
            }
            Conexion.cerrarConexion(cn);
        } catch (SQLException e) {
            Conexion.deshacerCambios(cn);
            Conexion.cerrarConexion(cn);
        } catch (Exception e) {
            Conexion.deshacerCambios(cn);
            Conexion.cerrarConexion(cn);
        }
        return rpta;
    }

    public static synchronized ArrayList<Usuario> obtenerusuarios() {
        //El array que contendra todos nuestros productos
        ArrayList<Usuario> lista = new ArrayList<Usuario>();
        Connection cn = null;
        ResultSet rs = null;
        try {
            //SQL
            String sql = "SELECT usua_id,usua_account,usua_mail,usua_nombre,"
                    + "usua_password,ori_id,rol_id from usuario";
            cn = Conexion.getConexion();
            Statement st = cn.createStatement();
            //almacenamos datos en un resultset
            rs = st.executeQuery(sql);
            //insertamos los datos de la bd en una lista
            while (rs.next()) {
                Usuario u = new Usuario();
                //Obtenemos los valores de la consulta y creamos
                //nuestro objeto producto
                u.setUsua_id(rs.getInt("usua_id"));
                u.setOri_id(rs.getInt("ori_id"));
                u.setRol_id(rs.getInt("rol_id"));
                u.setUsua_account(rs.getString("usua_account"));
                u.setUsua_password(rs.getString("usua_password"));
                u.setUsua_mail(rs.getString("usua_mail"));
                u.setUsua_nombre(rs.getString("usua_nombre"));
                //Lo adicionamos a nuestra lista
                lista.add(u);
            }
            Conexion.cerrarConexion(cn);
        } catch (SQLException e) {
            Conexion.cerrarConexion(cn);
        } catch (Exception e) {
            Conexion.cerrarConexion(cn);
        }
        return lista;
    }

    public static synchronized Usuario obtenerusuario(int id) {
        //El array que contendra todos nuestros productos
        Connection cn = null;
        ResultSet rs = null;
        Usuario u = new Usuario();
        try {
            //SQL
            String sql = "SELECT usua_id,usua_account,usua_mail,usua_nombre,"
                    + "usua_password,ori_id,rol_id from usuario where usua_id='" + id + "'";
            cn = Conexion.getConexion();
            Statement st = cn.createStatement();
            //almacenamos datos en un resultset

            rs = st.executeQuery(sql);
            //insertamos los datos de la bd en una lista

            while (rs.next()) {
                //Obtenemos los valores de la consulta y creamos
                //nuestro objeto producto
                u.setUsua_id(rs.getInt("usua_id"));
                u.setOri_id(rs.getInt("ori_id"));
                u.setRol_id(rs.getInt("rol_id"));
                u.setUsua_account(rs.getString("usua_account"));
                u.setUsua_password(rs.getString("usua_password"));
                u.setUsua_mail(rs.getString("usua_mail"));
                u.setUsua_nombre(rs.getString("usua_nombre"));

                //Lo adicionamos a nuestra lista
            }

            Conexion.cerrarConexion(cn);
        } catch (SQLException e) {
            Conexion.cerrarConexion(cn);
        } catch (Exception e) {
            Conexion.cerrarConexion(cn);
        }
        return u;
    }

    public static synchronized Usuario validarusuario(String usuario, String password) {
        //El array que contendra todos nuestros productos
        Connection cn = null;
        ResultSet rs = null;
        Usuario u = new Usuario();
        try {
            //SQL
            String sql = "SELECT usua_id,usua_account,usua_mail,usua_nombre"
                    + ",ori_id,rol_id from usuario where usua_account='" + usuario + "' and usua_password='" + password + "'";

            System.out.println(sql);
            cn = Conexion.getConexion();
            Statement st = cn.createStatement();
            //almacenamos datos en un resultset

            rs = st.executeQuery(sql);
            //insertamos los datos de la bd en una lista

            while (rs.next()) {
                //Obtenemos los valores de la consulta y creamos
                //nuestro objeto producto
                u.setUsua_id(rs.getInt("usua_id"));
                u.setOri_id(rs.getInt("ori_id"));
                u.setRol_id(rs.getInt("rol_id"));
                u.setUsua_account(rs.getString("usua_account"));
                u.setUsua_mail(rs.getString("usua_mail"));
                u.setUsua_nombre(rs.getString("usua_nombre"));
                
                //Lo adicionamos a nuestra lista
            }

            Conexion.cerrarConexion(cn);
        } catch (SQLException e) {
            Conexion.cerrarConexion(cn);
        } catch (Exception e) {
            Conexion.cerrarConexion(cn);
        }
        return u;
    }

    public int contartabla() throws SQLException {
        int ValCount = 0;
        Connection cn = null;
        String sql = "SELECT Count(*) FROM usuario";
        cn = Conexion.getConexion();
        Statement st = cn.createStatement();

        try (ResultSet rs = st.executeQuery(sql)) {
            rs.next();
            ValCount = rs.getInt(1);
        } catch (SQLException se) {
            //handle catch
        } finally {
            Conexion.cerrarConexion(cn);
        }
        return ValCount;
    }
}
