package Datos;

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

public class EquipoDB {

    public static Equipo getEquipo(String id_equipo) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM EQUIPO E "
                + "WHERE E.id_equipo = ?";
        Equipo equipo = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_equipo);
            rs = ps.executeQuery();
            if(rs.next()){
                String sexo_equipo = rs.getString("sexo_equipo");
                String nombre_equipo = rs.getString("nombre_equipo");
                String categoria_equipo = rs.getString("categoria_equipo");
                String entrenador1 = rs.getString("entrenador_1");
                String entrenador2 = rs.getString("entrenador_2");
                String delegado = rs.getString("delegado");
                String id_club = rs.getString("id_club");
                equipo = new Equipo(id_equipo, id_club, nombre_equipo, sexo_equipo, categoria_equipo, entrenador1, entrenador2, delegado);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return equipo;
    }
    
    public static ArrayList<Equipo> getEquiposEntrenador(Usuario u, CodClub cc) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        ArrayList <Equipo> lista_equipos = new ArrayList<>();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT E.* FROM EQUIPO E, MIEMBROS_CLUB MC "
                + " WHERE E.id_club = MC.id_club "
                + " AND E.id_club = ? "
                + " AND MC.id_usuario = ? "
                + " AND (MC.id_usuario = E.entrenador_1 "
                + " OR MC.id_usuario = E.entrenador_2 "
                + " OR MC.id_usuario = E.delegado)";
        @SuppressWarnings("UnusedAssignment")
        Equipo equipo = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, cc.getId_club());
            ps.setString(2, u.getId_usuario());
            rs = ps.executeQuery();
            while(rs.next()){
                String id_equipo = rs.getString("id_equipo");
                String sexo_equipo = rs.getString("sexo_equipo");
                String nombre_equipo = rs.getString("nombre_equipo");
                String categoria_equipo = rs.getString("categoria_equipo");
                String entrenador1 = rs.getString("entrenador_1");
                String entrenador2 = rs.getString("entrenador_2");
                String delegado = rs.getString("delegado");
                String id_club = rs.getString("id_club");
                equipo = new Equipo(id_equipo, id_club, nombre_equipo, sexo_equipo, categoria_equipo, entrenador1, entrenador2, delegado);
                lista_equipos.add(equipo);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_equipos;
    }
    
    public static ArrayList<Equipo> getEquiposEntrenadorSinClub(Usuario u) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        ArrayList <Equipo> lista_equipos = new ArrayList<>();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT E.* FROM EQUIPO E "
                + " WHERE E.id_club = ? ";
        @SuppressWarnings("UnusedAssignment")
        Equipo equipo = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, u.getId_usuario());
            rs = ps.executeQuery();
            while(rs.next()){
                String id_equipo = rs.getString("id_equipo");
                String sexo_equipo = rs.getString("sexo_equipo");
                String nombre_equipo = rs.getString("nombre_equipo");
                String categoria_equipo = rs.getString("categoria_equipo");
                String entrenador1 = rs.getString("entrenador_1");
                String entrenador2 = rs.getString("entrenador_2");
                String delegado = rs.getString("delegado");
                String id_club = rs.getString("id_club");
                equipo = new Equipo(id_equipo, id_club, nombre_equipo, sexo_equipo, categoria_equipo, entrenador1, entrenador2, delegado);
                lista_equipos.add(equipo);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_equipos;
    }
    
    public static ArrayList<Equipo> getEquiposClub(CodClub cc) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        ArrayList <Equipo> lista_equipos = new ArrayList<>();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT E.* FROM EQUIPO E "
                + " WHERE E.id_club = ? ";
        @SuppressWarnings("UnusedAssignment")
        Equipo equipo = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, cc.getId_club());
            rs = ps.executeQuery();
            while(rs.next()){
                String id_equipo = rs.getString("id_equipo");
                String sexo_equipo = rs.getString("sexo_equipo");
                String nombre_equipo = rs.getString("nombre_equipo");
                String categoria_equipo = rs.getString("categoria_equipo");
                String entrenador1 = rs.getString("entrenador_1");
                String entrenador2 = rs.getString("entrenador_2");
                String delegado = rs.getString("delegado");
                String id_club = rs.getString("id_club");
                equipo = new Equipo(id_equipo,id_club, nombre_equipo, sexo_equipo, categoria_equipo, entrenador1, entrenador2, delegado);
                lista_equipos.add(equipo);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_equipos;
    }
    
    public static int getCountEquiposClub(CodClub cc) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        ArrayList <Equipo> lista_equipos = new ArrayList<>();
        PreparedStatement ps;
        ResultSet rs;
        int tamaño = 0;
        String query = "SELECT Count(*) FROM EQUIPO E "
                + " WHERE E.id_club = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, cc.getId_club());
            rs = ps.executeQuery();
            if(rs.next()){
                tamaño = rs.getInt(1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return tamaño;
    }
    

    public static boolean addEquipo(Equipo e) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "INSERT INTO EQUIPO VALUES(?,?,?,?,?,?,?,?)";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_equipo());
            ps.setString(2, e.getId_club());
            ps.setString(3, e.getNombre_equipo());
            ps.setString(4, e.getSexo_equipo());
            ps.setString(5, e.getCategoria_equipo());
            ps.setString(6, e.getEntrenador1());
            ps.setString(7, e.getEntrenador2());
            ps.setString(8, e.getDelegado());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean updateEquipo(Equipo e) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "UPDATE EQUIPO "+   
                       "SET id_equipo = ? , "+
                             " id_club = ? , " +
                             " nombre_equipo = ? , "+
                             " sexo_equipo = ? , "+
                             " categoria_equipo = ? , "+
                             " entrenador_1 = ? , "+
                             " entrenador_2 = ? , "+
                             " delegado = ? " +
                       "WHERE id_equipo = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_equipo());
            ps.setString(2, e.getId_club());
            ps.setString(3, e.getNombre_equipo());
            ps.setString(4, e.getSexo_equipo());
            ps.setString(5, e.getCategoria_equipo());
            ps.setString(6, e.getEntrenador1());
            ps.setString(7, e.getEntrenador2());
            ps.setString(8, e.getDelegado());
            ps.setString(9, e.getId_equipo());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
}
