package Datos;

import Modelo.Asistencia;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

public class AsistenciaDB {

    public static Asistencia getAsistencia(String id_jugador, Date fecha) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM ASISTENCIA A "
                + "WHERE A.id_jugador = ? "
                + "AND A.fecha_asistencia = ?";
        Asistencia asistencia = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_jugador);
            ps.setString(1, fecha.toString());
            rs = ps.executeQuery();
            rs.next();
            String id_equipo = rs.getString("id_equipo");
            String asistencia_q = rs.getString("asistencia");
            asistencia = new Asistencia(id_jugador, id_equipo, fecha, asistencia_q);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return asistencia;
    }
    
    public static ArrayList<ArrayList<String>> getAsistenciaEquipo(String id_equipo, Date fecha) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT CA.cod_asis, CA.descripcion_asis FROM ASISTENCIA A, COD_ASISTENCIA CA "
                + " WHERE A.id_equipo = ? "
                + " AND A.fecha_asistencia = ? "
                + " AND A.asistencia = CA.cod_asis";
        @SuppressWarnings("UnusedAssignment")
        ArrayList<ArrayList<String>> lista_asistencia = new ArrayList<> ();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_equipo);
            java.sql.Date sqlDate = new java.sql.Date(fecha.getTime());
            ps.setDate(2, sqlDate);
            rs = ps.executeQuery();
            while(rs.next()){
                ArrayList<String> aux = new ArrayList<>();
                String cod_asis = rs.getString("cod_asis");
                String asistencia = rs.getString("descripcion_asis");
                aux.add(cod_asis);
                aux.add(asistencia);
                lista_asistencia.add(aux);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_asistencia;
    }
    
    public static ArrayList <String> getFechasAsistencia(String id_equipo) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT Distinct A.fecha_asistencia FROM ASISTENCIA A "
                + " WHERE A.id_equipo = ? "
                + "ORDER BY 1 DESC";
        ArrayList <String> lista_fechas = new ArrayList<> ();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_equipo);
            rs = ps.executeQuery();
            while(rs.next()){
                String fecha_asistencia = rs.getString("fecha_asistencia");
                lista_fechas.add(fecha_asistencia);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_fechas;
    }

    public static boolean addAsistencia(Asistencia a) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "INSERT INTO ASISTENCIA VALUES(?,?,?,?)";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, a.getId_jugador());
            ps.setString(2, a.getId_equipo());
            java.sql.Date sqlDate = new java.sql.Date(a.getFecha_Asistencia().getTime());
            ps.setDate(3, sqlDate);
            ps.setString(4, a.getAsistencia());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean updateAsistencia(Asistencia a) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "UPDATE ASISTENCIA "+   
                       "SET id_jugador = ? ,"+
                             " id_equipo = ? ,"+
                             " fecha_asistencia = ? ,"+
                             " asistencia = ?  "+
                       "WHERE id_jugador = ? " +
                       " AND id_equipo = ? " +
                       " AND fecha_asistencia = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, a.getId_jugador());
            ps.setString(2, a.getId_equipo());
            java.sql.Date sqlDate = new java.sql.Date(a.getFecha_Asistencia().getTime());
            ps.setDate(3, sqlDate);
            ps.setString(4, a.getAsistencia());
            ps.setString(5, a.getId_jugador());
            ps.setString(6, a.getId_equipo());
            ps.setDate(7, sqlDate);
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
}
