package Datos;

import Modelo.Entrenamiento;
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 EntrenamientoDB {

    public static ArrayList <ArrayList <String>> getEntrenamiento(String id_entrenamiento) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM ENTRENAMIENTO E "
                + "WHERE E.id_entrenamiento = ?";
        ArrayList <ArrayList<String>> entrenamiento = new ArrayList<>();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_entrenamiento);
            rs = ps.executeQuery();
            while(rs.next()){
                ArrayList<String> aux = new ArrayList<>();
                String id_ejercicio = rs.getString("id_ejercicio");
                String tiempo = rs.getString("tiempo");
                String fecha_entrenamiento = rs.getDate("fecha_entrenamiento").toString();
                String comentario_ejercicio = rs.getString("comentario_ejercicio");
                aux.add(id_ejercicio);
                aux.add(tiempo);
                aux.add(fecha_entrenamiento);
                aux.add(comentario_ejercicio);
                entrenamiento.add(aux);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return entrenamiento;
    }
    
    public static ArrayList <ArrayList<String>> getEntrenamientos(String id_usuario, String id_equipo) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = " SELECT Distinct E.id_entrenamiento, E.fecha_entrenamiento FROM ENTRENAMIENTO E "
                + " WHERE E.id_usuario =  '"+id_usuario+"'";
                if(!id_equipo.equals("")){
                    query += " AND E.id_equipo = '"+id_equipo+"'";
                }
                query += " ORDER BY 2 DESC";
        ArrayList <ArrayList<String>> entrenamiento = new ArrayList<>();
        try {
            ps = c.prepareStatement(query);
            rs = ps.executeQuery();
            while(rs.next()){
                ArrayList<String> aux = new ArrayList<>();
                String id_entrenamiento = rs.getString("id_entrenamiento");
                String fecha_entrenamiento = rs.getDate("fecha_entrenamiento").toString();
                aux.add(id_entrenamiento);
                aux.add(fecha_entrenamiento);
                entrenamiento.add(aux);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return entrenamiento;
    }
    
    public static ArrayList <String> getFechasEntrenamientos(String id_usuario) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = " SELECT Distinct E.fecha_entrenamiento FROM ENTRENAMIENTO E "
                + " WHERE E.id_usuario = ? "
                + " ORDER BY 1 ";
        ArrayList<String> fechas = new ArrayList<>();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_usuario);
            rs = ps.executeQuery();
            while(rs.next()){
                String fecha_entrenamiento = rs.getDate("fecha_entrenamiento").toString();
                fechas.add(fecha_entrenamiento);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return fechas;
    }
    
    public static String getFechaEntrenamiento(String id_entrenamiento) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = " SELECT Distinct E.fecha_entrenamiento FROM ENTRENAMIENTO E "
                + " WHERE E.id_entrenamiento = ? ";
        String fecha_entrenamiento = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_entrenamiento);
            rs = ps.executeQuery();
            while(rs.next()){
                fecha_entrenamiento = rs.getDate("fecha_entrenamiento").toString();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return fecha_entrenamiento;
    }
    
    public static ArrayList<String> getTiempoEntrenamiento(String id_entrenamiento) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = " SELECT E.Tiempo FROM ENTRENAMIENTO E "
                + " WHERE E.id_entrenamiento = ? ";
        ArrayList <String> tiempos_totales = new ArrayList<>();
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_entrenamiento);
            rs = ps.executeQuery();
            while(rs.next()){
                String tiempo_total = rs.getString(1);
                tiempos_totales.add(tiempo_total);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return tiempos_totales;
    }
    
    public static boolean addEntrenamiento(Entrenamiento e) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "INSERT INTO ENTRENAMIENTO VALUES(?,?,?,?,?,?,?)";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_entrenamiento());
            ps.setString(2, e.getId_ejercicio());
            ps.setString(3, e.getId_usuario());
            ps.setString(4, e.getId_equipo());
            ps.setString(5, e.getTiempo());
            java.sql.Date sqlDate = new java.sql.Date(e.getFecha_entrenamiento().getTime());
            ps.setDate(6, sqlDate);
            ps.setString(7, e.getComentario_ejercicio());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean updateEntrenamiento(Entrenamiento e) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "UPDATE ENTRENAMIENTO "+   
                       "SET id_entrenamiento = ? , "+
                             " id_ejercicio = ? , "+
                             " id_usuario = ? , "+
                             " id_equipo = ? , "+
                             " tiempo = ? , "+
                             " fecha_entrenamiento = ? , "+
                             " comentario_ejercicio = ? "+
                       "WHERE id_entrenamiento = ? " +
                       " AND id_ejercicio = ? " +
                       " AND id_usuario = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_entrenamiento());
            ps.setString(2, e.getId_ejercicio());
            ps.setString(3, e.getId_usuario());
            ps.setString(4, e.getId_equipo());
            ps.setString(5, e.getTiempo());
            java.sql.Date sqlDate = new java.sql.Date(e.getFecha_entrenamiento().getTime());
            ps.setDate(6, sqlDate);
            ps.setString(7, e.getComentario_ejercicio());
            ps.setString(8, e.getId_entrenamiento());
            ps.setString(9, e.getId_ejercicio());
            ps.setString(10, e.getId_usuario());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean deleteEjercicio(Entrenamiento e,String id_ejercicio) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "DELETE FROM ENTRENAMIENTO "+   
                       "WHERE id_entrenamiento = ? " +
                       " AND id_ejercicio = ? " +
                       " AND id_usuario = ? ";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_entrenamiento());
            ps.setString(2, id_ejercicio);
            ps.setString(3, e.getId_usuario());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
}
