package Servlet;

import Datos.CodCategoriaEjercicioDB;
import Datos.CodConceptoDB;
import Datos.CodTipoEjercicioDB;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import Datos.EntrenamientoDB;
import Modelo.CodCategoriaEjercicio;
import Modelo.CodConcepto;
import Modelo.CodTipoEjercicio;
import Modelo.Usuario;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;
import java.util.UUID;

public class CrearEntrenamientoServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String encoding = request.getCharacterEncoding();
        if (encoding == null) {
            request.setCharacterEncoding("UTF-8");
        }
        
        String url = "";
        Usuario usuario = (Usuario) request.getSession().getAttribute("usuario");
        String id_usuario = usuario.getId_usuario();
        String operacion = request.getParameter("operacion");
        String fechaE = request.getParameter("fecha_entrenamiento");
        String id_entrenamiento = request.getParameter("id_entrenamiento");
   
        ArrayList<String> fechas = EntrenamientoDB.getFechasEntrenamientos(id_usuario);
        if (fechas.size()>0){
            ArrayList<Date> fechas_finales = new ArrayList<>(); 
            SimpleDateFormat formato = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
            SimpleDateFormat formato2 = new SimpleDateFormat("yyyy-MM-dd");
            Date fecha_entrenamiento = null;
            Date fecha_actual = new Date();
            try{
                fecha_entrenamiento = formato.parse(fechaE);
                for(int i = 0; i < fechas.size(); i++){
                    Date fecha_aux = null;
                    fecha_aux = formato2.parse(fechas.get(i));
                    fechas_finales.add(fecha_aux);
                }
            }catch(ParseException ex){
                  ex.printStackTrace();
            }
            if ((fecha_entrenamiento == null || fechas_finales.contains(fecha_entrenamiento))&& id_entrenamiento == null) {
                HttpSession sesion = request.getSession();
                sesion.setAttribute("message", "Ya hay un entrenamiento para esa fecha.");
                url = "/crearEntrenamiento.jsp?operacion=?";
            } else {
                if(id_entrenamiento == null){
                    id_entrenamiento = UUID.randomUUID().toString();
                }    
                request.setAttribute("id_entrenamiento", id_entrenamiento);
                ArrayList<CodConcepto> conceptos = CodConceptoDB.getConceptos();
                HttpSession sesion = request.getSession();
                request.setAttribute("conceptos", conceptos);
                ArrayList<CodCategoriaEjercicio> categorias = CodCategoriaEjercicioDB.getCategorias();
                request.setAttribute("categorias", categorias);
                ArrayList<CodTipoEjercicio> tipos = CodTipoEjercicioDB.getTipos();
                request.setAttribute("tipos", tipos);
                url = "/crearEntrenamiento2.jsp?operacion="+operacion+"&id_entrenamiento="+id_entrenamiento+"&fecha="+fechaE;
            }
        }else{
            if(id_entrenamiento == null){
                id_entrenamiento = UUID.randomUUID().toString();
            } 
            request.setAttribute("id_entrenamiento", id_entrenamiento);
            ArrayList<CodConcepto> conceptos = CodConceptoDB.getConceptos();
            request.setAttribute("conceptos", conceptos);
            ArrayList<CodCategoriaEjercicio> categorias = CodCategoriaEjercicioDB.getCategorias();
            request.setAttribute("categorias", categorias);
            ArrayList<CodTipoEjercicio> tipos = CodTipoEjercicioDB.getTipos();
            request.setAttribute("tipos", tipos);
            url = "/crearEntrenamiento2.jsp?operacion="+operacion+"&id_entrenamiento="+id_entrenamiento+"&fecha="+fechaE;
        }
        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
        dispatcher.forward(request, response);
    }

    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /**
     * Handles the HTTP <code>GET</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     * Handles the HTTP <code>POST</code> method.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}
