package Datos;

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

public class EjercicioDB {

    public static Ejercicio getEjercicio(String id_ejercicio) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        ResultSet rs;
        String query = "SELECT * FROM EJERCICIO E "
                + "WHERE E.id_ejercicio = ?";
        Ejercicio ejercicio = null;
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, id_ejercicio);
            rs = ps.executeQuery();
            rs.next();
            String descripcion = rs.getString("descripcion");
            String nombre = rs.getString("nombre");
            String categoria_ejercicio = rs.getString("categoria_ejercicio");
            String concepto1 = rs.getString("concepto1");
            String concepto2 = rs.getString("concepto2");
            String concepto3 = rs.getString("concepto3");
            String tipo_ejercicio= rs.getString("tipo_ejercicio");
            ejercicio = new Ejercicio(id_ejercicio, nombre, descripcion, categoria_ejercicio, concepto1, concepto2, concepto3, tipo_ejercicio);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return ejercicio;
    }
    
    @SuppressWarnings("null")
    public static ArrayList<Ejercicio> getEjercicio(String categoria, String concepto, String tipo_ejercicio) {
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        ArrayList <Ejercicio> lista_ejercicios = new ArrayList<>();
        PreparedStatement ps;
        ResultSet rs;
        boolean cat_null = true;
        boolean conc_null = true;
        boolean tipo_null = true;
        if(!categoria.isEmpty()){
            cat_null = false;
        }
        if(!concepto.isEmpty()){
            conc_null = false;
        }
        if(!tipo_ejercicio.isEmpty()){
            tipo_null = false;
        }
        String query = "SELECT * FROM EJERCICIO E ";
                if(!cat_null){
                    query += " WHERE E.categoria_ejercicio = '" + categoria+"' "; 
                }
                if(cat_null && !conc_null){
                    query += " WHERE (concepto1 = '" + concepto+"' "
                           + " OR concepto2 = '" + concepto+"' "
                           + " OR concepto3 = '" + concepto + "' ) ";
                }else if(!cat_null && !conc_null ) {
                    query += " AND (concepto1 = '" + concepto +"' "
                           + " OR concepto2 = '" + concepto +"' "
                           + " OR concepto3 = '" + concepto + "' ) ";
                }
                if(cat_null && conc_null && !tipo_null){
                    query += " WHERE tipo_ejercicio = '" + tipo_ejercicio+"' ";
                }else if((!cat_null || !conc_null) && !tipo_null){
                    query += " AND tipo_ejercicio = '" + tipo_ejercicio+"' ";
                }
        @SuppressWarnings("UnusedAssignment")
        Ejercicio ejercicio = null;
        try {
            ps = c.prepareStatement(query);
            rs = ps.executeQuery();
            while(rs.next()){
               String id_ejercicio = rs.getString("id_ejercicio"); 
               String descripcion = rs.getString("descripcion");
               String nombre = rs.getString("nombre");
               String categoria_ejercicio = rs.getString("categoria_ejercicio");
               String concepto1 = rs.getString("concepto1");
               String concepto2 = rs.getString("concepto2");
               String concepto3 = rs.getString("concepto3");
               String tipo_ejercicio_q = rs.getString("tipo_ejercicio");
               ejercicio = new Ejercicio(id_ejercicio, nombre, descripcion, categoria_ejercicio, concepto1, concepto2, concepto3, tipo_ejercicio_q);
               lista_ejercicios.add(ejercicio);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        cp.freeConnection(c);
        return lista_ejercicios;
    }
    
    

    public static boolean addEjercicio(Ejercicio e) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "INSERT INTO EJERCICIO VALUES(?,?,?,?,?,?,?,?)";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_ejercicio());
            ps.setString(2, e.getNombre());
            ps.setString(3, e.getDescripcion());
            ps.setString(4, e.getCategoria_ejercicio());
            ps.setString(5, e.getConcepto1());
            ps.setString(6, e.getConcepto2());
            ps.setString(7, e.getConcepto3());
            ps.setString(8, e.getTipo_ejercicio());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
    
    public static boolean updateEjercicio(Ejercicio e) {
        int resultado = 0;
        ConnectionPool cp = ConnectionPool.getInstance();
        Connection c = cp.getConnection();
        PreparedStatement ps;
        String query = "UPDATE EJERCICIO "+   
                       "VALUES id_ejercicio = ? , "+
                             " nombre = ? , "+
                             " descripcion = ? , "+
                             " categoria_ejercicio = ? , "+
                             " concepto1 = ? , "+
                             " concepto2 = ? , "+
                             " concepto3 = ? , " +
                             " tipo_ejercicio";
        try {
            ps = c.prepareStatement(query);
            ps.setString(1, e.getId_ejercicio());
            ps.setString(2, e.getNombre());
            ps.setString(3, e.getDescripcion());
            ps.setString(4, e.getCategoria_ejercicio());
            ps.setString(5, e.getConcepto1());
            ps.setString(6, e.getConcepto2());
            ps.setString(7, e.getConcepto3());
            ps.setString(8, e.getTipo_ejercicio());
            resultado = ps.executeUpdate();
        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        cp.freeConnection(c);
        return resultado == 1;
    }
}
