package Datos;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import Modelo.MiembrosClub;
import Modelo.Usuario;
import Modelo.CodClub;
import java.util.ArrayList;

public class MiembrosClubDB {

    public static ArrayList<MiembrosClub> getMiembrosClub(String nombre) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        ArrayList <MiembrosClub> miembros = new ArrayList <>();
        String query = "SELECT mc.* FROM MIEMBROS_CLUB mc, COD_CLUB cc "
                + "WHERE mc.id_club = cc.id_club "
                + " AND cc.nombre = ?"
                + " AND mc.tipo_usuario <> 'A'";
        MiembrosClub miembro_club = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, nombre);
            rs = ps.executeQuery();
            while(rs.next()){
                String id_club = rs.getString("id_club");
                String id_usuario = rs.getString("id_usuario");
                String tipo_usuario = rs.getString("tipo_usuario");
                miembro_club = new MiembrosClub(id_club, id_usuario, tipo_usuario);
                miembros.add(miembro_club);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return miembros;
    }
    
    public static MiembrosClub getMiembrosClub(String id_club, String id_usuario) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT mc.* FROM MIEMBROS_CLUB mc "
                + "WHERE mc.id_club = ? "
                + " AND mc.id_usuario = ?";
        MiembrosClub miembro_club = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_club);
            ps.setString(2, id_usuario);
            rs = ps.executeQuery();
            rs.next();
            String tipo_usuario = rs.getString("tipo_usuario");
            miembro_club = new MiembrosClub(id_club, id_usuario, tipo_usuario);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return miembro_club;
    }
    
    public static boolean existeMiembroClub(String id_usuario, String id_club) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        int clubs = 0;
        boolean existe = false;
        ResultSet rs;
        String query = "SELECT Count(*) FROM MIEMBROS_CLUB mc "
                + "WHERE mc.id_club = ? "
                + " AND mc.id_usuario = ?";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_club);
            ps.setString(2, id_usuario);
            rs = ps.executeQuery();
            rs.next();
            clubs = rs.getInt(1);
            if(clubs > 0){
                existe = true;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return existe;
    }
    
    public static CodClub getClubAdministrador(Usuario u) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT cc.* FROM MIEMBROS_CLUB mc, COD_CLUB cc "
                + "WHERE mc.id_club = cc.id_club "
                + " AND mc.id_usuario = ?";
        CodClub cod_club = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, u.getId_usuario());
            rs = ps.executeQuery();
            rs.next();
            String id_club = rs.getString("id_club");
            String nombre_club = rs.getString("nombre");
            cod_club = new CodClub(id_club, nombre_club);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return cod_club;
    }

    public static boolean addMiembro(Usuario usuario, CodClub cod_club) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        UsuarioDB.updateUsuario(usuario);
        String query = "INSERT INTO MIEMBROS_CLUB VALUES(?,?,?)";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, cod_club.getId_club());
            ps.setString(2, usuario.getId_usuario());
            ps.setString(3, usuario.getTipo_usuario());
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean updateMiembro(MiembrosClub miembro) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "UPDATE MIEMBROS_CLUB "+   
                       "VALUES id_club = ? ,"+
                             " id_usuario = ? ,"+
                             " tipo_usuaruio = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, miembro.getId_club());
            ps.setString(2, miembro.getId_usuario());
            ps.setString(3, miembro.getTipo_usuario());
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean deleteMiembro(MiembrosClub miembro) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "DELETE FROM MIEMBROS_CLUB "+   
                       "WHERE id_club = ? "+
                             "AND  id_usuario = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, miembro.getId_club());
            ps.setString(2, miembro.getId_usuario());
            resultado = ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static int getClubes(String id_usuario) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT COUNT(*) FROM MIEMBROS_CLUB mc "+   
                       "WHERE id_usuario = ?";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_usuario);
            rs = ps.executeQuery();
            rs.next();
            resultado = rs.getInt(1);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado;
    }
}
