package Servlet;

import Datos.AsistenciaDB;
import Modelo.Asistencia;
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 Modelo.Equipo;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Locale;

public class GuardarAsistenciaServlet 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 = "";
        HttpSession sesion = request.getSession();
        String operacion = request.getParameter("operacion");
        Equipo equipo = (Equipo) sesion.getAttribute("equipo");
        String tamaño = request.getParameter("tamaño");
        String id_equipo = equipo.getId_equipo();
        ArrayList<String> fechas = AsistenciaDB.getFechasAsistencia(id_equipo);
        ArrayList<Date> fechas_finales = new ArrayList<>(); 
        SimpleDateFormat formatoA = new SimpleDateFormat("yyyy-MM-dd");
        SimpleDateFormat formato = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
        String fecha1 = request.getParameter("fecha_asistencia");
        Date fecha_entrenamiento = null;
        Date fecha = new Date();
        fecha.setHours(0);
        fecha.setMinutes(0);
        fecha.setSeconds(1);
        try{
            if(operacion.equals("MOD")){
                fecha_entrenamiento = formatoA.parse(fecha1);
            }else {
                fecha_entrenamiento = formato.parse(fecha1);
            }
            for(int i = 0; i < fechas.size(); i++){
                Date fecha_aux = null;
                fecha_aux = formatoA.parse(fechas.get(i));
                fechas_finales.add(fecha_aux);
            }
        }catch(ParseException ex){
              ex.printStackTrace();
            }
        
        if (operacion.equals("MOD")){
            if (fecha_entrenamiento.after(fecha) || fecha_entrenamiento == null || !fechas_finales.contains(fecha_entrenamiento) ) {
                sesion.setAttribute("message", "La fecha no es correcta.");
                url = "/añadirAsistencia?operacion"+operacion;
            } else {
                for(int i = 0;i<Integer.parseInt(tamaño);i++){
                    String id_jugador = request.getParameter("jugador"+i);
                    String asistencia = request.getParameter("asistencia_"+i);
                    Asistencia asis = new Asistencia(id_jugador,id_equipo,fecha_entrenamiento,asistencia);
                    if(AsistenciaDB.updateAsistencia(asis)){
                        url = "/mensaje.jsp?mensaje=Asistencia actualizada correctamente";
                    }else{
                        url = "/mensaje.jsp?mensaje=Error al actualizar la asistencia";
                    }
                }
            }
        }else if(operacion.equals("REG")){
           if (fecha_entrenamiento.after(fecha) || fecha_entrenamiento == null) {
                sesion.setAttribute("message", "La fecha no es correcta.");
                url = "/añadirAsistencia?operacion"+operacion;
            } else {
                for(int i = 0;i<Integer.parseInt(tamaño);i++){
                    String id_jugador = request.getParameter("jugador"+i);
                    String asistencia = request.getParameter("asistencia_"+i);
                    Asistencia asis = new Asistencia(id_jugador,id_equipo,fecha_entrenamiento,asistencia);
                    if(AsistenciaDB.addAsistencia(asis)){
                        url = "/mensaje.jsp?mensaje=Asistencia añadida correctamente";
                    }else{
                        url = "/mensaje.jsp?mensaje=Error al añadir la asistencia";
                    }
                }
            } 
        }
        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);
    }
}
