package Datos;

import Modelo.CodClub;
import Modelo.Jornada;
import Modelo.Partido;
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 JornadaDB {

    public static Jornada getJornada(String id_jornada) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM JORNADA J "
                + "WHERE J.id_jornada = ?";
        Jornada jornada = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_jornada);
            rs = ps.executeQuery();
            if(rs.next()){
                String desc_jornada = rs.getString("desc_jornada");
                String id_club = rs.getString("id_club");
                Date fecha_jornada = rs.getDate("fecha_jornada");
                jornada = new Jornada(id_jornada, desc_jornada, id_club, fecha_jornada);
            }else{
                jornada = new Jornada("","","",null);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return jornada;
    }
    
    public static Jornada getJornada(Date fecha_jornada, String id_club) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM JORNADA J "
                + "WHERE J.id_club = ? "
                + " AND J.fecha_jornada = ? ";
        Jornada jornada = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_club);
            java.sql.Date sqlDate = new java.sql.Date(fecha_jornada.getTime());
            ps.setDate(2, sqlDate);
            rs = ps.executeQuery();
            if(rs.next()){
                String id_jornada = rs.getString("id_jornada");
                String desc_jornada = rs.getString("desc_jornada");
                jornada = new Jornada(id_jornada, desc_jornada, id_club, fecha_jornada);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return jornada;
    }
    
    public static Jornada getUltimaJornada(Date fecha_jornada, String id_club) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM JORNADA J "
                + "WHERE J.id_club = ? "
                + " AND J.fecha_jornada <= ? "
                + " order by fecha_jornada desc";
        Jornada jornada = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_club);
            java.sql.Date sqlDate = new java.sql.Date(fecha_jornada.getTime());
            ps.setDate(2, sqlDate);
            rs = ps.executeQuery();
            if(rs.next()){
                String id_jornada = rs.getString("id_jornada");
                String desc_jornada = rs.getString("desc_jornada");
                jornada = new Jornada(id_jornada, desc_jornada, id_club, fecha_jornada);
            }else{
                jornada = new Jornada("", "", id_club, fecha_jornada);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return jornada;
    }
    
    public static ArrayList <String> getFechasJornada(String id_club) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT Distinct J.fecha_jornada FROM JORNADA J "
                + " WHERE J.id_club = ? "
                + " ORDER BY 1 DESC";
        ArrayList <String> lista_fechas = new ArrayList<> ();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_club);
            rs = ps.executeQuery();
            while(rs.next()){
                String fecha_jornada = rs.getString("fecha_jornada");
                lista_fechas.add(fecha_jornada);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_fechas;
    }

    public static boolean addJornada(Jornada j) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "INSERT INTO JORNADA VALUES(?,?,?,?)";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, j.getId_jornada());
            ps.setString(2, j.getId_club());
            ps.setString(3, j.getDesc_jornada());
            java.sql.Date sqlDate = new java.sql.Date(j.getFecha_jornada().getTime());
            ps.setDate(4, sqlDate);
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
        public static ArrayList <Partido> getPartidosJornada(Jornada j, CodClub cc) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM PARTIDOS P "
                + " WHERE P.id_jornada = ? "
                + " AND P.id_club = ? ";
        @SuppressWarnings("UnusedAssignment")
        Partido partido = null;
        ArrayList <Partido> lista_partidos = new ArrayList<> ();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, j.getId_jornada());
            ps.setString(2, cc.getId_club());
            rs = ps.executeQuery();
            while(rs.next()){
                String equipo1 = rs.getString("equipo1");
                String resultado_equipo1 = rs.getString("resultado_equipo1");
                String equipo2 = rs.getString("equipo2");
                String resultado_equipo2 = rs.getString("resultado_equipo2");
                Date fecha_partido =rs.getDate("fecha_partido");
                String hora_partido = rs.getString("hora_partido");
                String lugar_partido = rs.getString("lugar_partido");
                String id_partido = rs.getString("id_partido");
                partido = new Partido(j.getId_club(), cc.getId_club(), id_partido, equipo1, resultado_equipo1, equipo2, resultado_equipo2, fecha_partido, hora_partido, lugar_partido);
                lista_partidos.add(partido);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_partidos;
    }
    
    public static boolean updateJornada(Jornada j) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "UPDATE JORNADA "+   
                       "SET id_jornada = ? ,"+
                             " desc_jornada = ? ,"+
                             " id_club = ? , " +
                             " fecha_jornada = ? "+
                       "WHERE id_jornada = ?";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, j.getId_jornada());
            ps.setString(2, j.getDesc_jornada());
            ps.setString(3, j.getId_club());
            java.sql.Date sqlDate = new java.sql.Date(j.getFecha_jornada().getTime());
            ps.setDate(4, sqlDate);
            ps.setString(5, j.getId_jornada());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
}
