package Servlet;

import Datos.JornadaDB;
import Datos.PartidoDB;
import Modelo.CodClub;
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.Jornada;
import Modelo.Partido;
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 GuardarJornadaServlet 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");
        CodClub club = (CodClub) sesion.getAttribute("club");
        String tamaño = request.getParameter("tamaño");
        String tamañoT =request.getParameter("tamañoT");
        String id_jornada = request.getParameter("id_jornada");
        String id_club = club.getId_club();
        ArrayList<String> fechas = PartidoDB.getFechasJornada(id_club);
        ArrayList<Date> fechas_finales = new ArrayList<>(); 
        Jornada jornadadb = JornadaDB.getJornada(id_jornada);
        String fecha_jornadadb = "";
        if(operacion.equals("MOD")||operacion.equals("REGE")){
            fecha_jornadadb = jornadadb.getFecha_jornada().toString();
        }
        SimpleDateFormat formato = new SimpleDateFormat("MMM dd, yyyy", Locale.ENGLISH);
        SimpleDateFormat formatoA = new SimpleDateFormat("yyyy-MM-dd");
        String fecha1 = request.getParameter("fecha_jornada");
        Date fecha_jornada = null;
        Date fecha = new Date();
        fecha.setHours(0);
        fecha.setMinutes(0);
        fecha.setSeconds(0);
        try{
            if(fecha1.equals(fecha_jornadadb)){
                fecha_jornada = formatoA.parse(fecha1);
            }else{
                fecha_jornada = 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") || operacion.equals("REGE")){
            if (fecha_jornada == null || !fechas_finales.contains(fecha_jornada) ) {
                sesion.setAttribute("message", "La fecha no es correcta.");
                url = "/crearJornada?operacion"+operacion;
            } else {
                for(int i = 0;i<Integer.parseInt(tamaño);i++){
                    String id_partido = request.getParameter("id_partido_"+i);
                    String equipo1 = request.getParameter("equipo1_"+i);
                    String resultado1 = request.getParameter("resultado1_"+i);
                    String equipo2 = request.getParameter("equipo2_"+i);
                    String resultado2 = request.getParameter("resultado2_"+i);
                    String fechaJ = request.getParameter("fecha_"+i);
                    Partido partidodb = PartidoDB.getPartido(id_partido);
                    String fecha_partidodb = partidodb.getFecha_partido().toString();
                    Date fecha_jor = null;
                    try{
                        if(fechaJ.equals(fecha_partidodb)){
                            fecha_jor = formatoA.parse(fechaJ);
                        }else{
                            fecha_jor = formato.parse(fechaJ);
                        }
                    }catch(ParseException ex){
                          ex.printStackTrace();
                    }
                    String hora = request.getParameter("hora_"+i);
                    String lugar = request.getParameter("lugar_"+i);
                    Partido partido = new Partido(id_jornada,id_club,id_partido,equipo1,resultado1,equipo2,resultado2,fecha_jor,hora,lugar);
                    if(PartidoDB.updatePartido(partido)){
                        url = "/mensaje.jsp?mensaje=Jornada modificada correctamente";
                    }else{
                        url = "/mensaje.jsp?mensaje=Error al modificar la jornada";
                    }
                }
                if(operacion.equals("MOD") && Integer.parseInt(tamañoT)>Integer.parseInt(tamaño)){
                    for(int j = Integer.parseInt(tamaño); j<Integer.parseInt(tamañoT);j++){
                        String id_partido = UUID.randomUUID().toString();
                        String equipo1 = request.getParameter("equipo1_"+j);
                        if(!equipo1.equals("")){
                            String resultado1 = request.getParameter("resultado1_"+j);
                            String equipo2 = request.getParameter("equipo2_"+j);
                            String resultado2 = request.getParameter("resultado2_"+j);
                            String fechaJ = request.getParameter("fecha_"+j);
                            Date fecha_jor = null;
                            try{
                                fecha_jor = formato.parse(fechaJ);
                            }catch(ParseException ex){
                                  ex.printStackTrace();
                            }
                            String hora = request.getParameter("hora_"+j);
                            String lugar = request.getParameter("lugar_"+j);
                            Partido partido = new Partido(id_jornada,id_club,id_partido,equipo1,resultado1,equipo2,resultado2,fecha_jor,hora,lugar);
                            if(PartidoDB.addPartido(partido)){
                                url = "/mensaje.jsp?mensaje=Jornada añadida correctamente";
                            }else{
                                url = "/mensaje.jsp?mensaje=Error al añadir la jornada";
                            }
                        }
                    }
                }
            }
        }else if(operacion.equals("REG")){
            fecha_jornada.setSeconds(1);
            if (fecha_jornada.before(fecha) || fecha_jornada == null) {
                sesion.setAttribute("message", "La fecha no es correcta.");
                url = "/crearJornada?operacion"+operacion;
            } else {
               String descripcion = "Jornada del "+fecha_jornada.getDate()+"/"+(fecha_jornada.getMonth()+1)+"/"+(fecha_jornada.getYear()+1900);
               Jornada jornada = new Jornada(id_jornada,descripcion,id_club,fecha_jornada);
               JornadaDB.addJornada(jornada);
                for(int i = 0;i<Integer.parseInt(tamaño);i++){
                    String id_partido = UUID.randomUUID().toString();
                    String equipo1 = request.getParameter("equipo1_"+i);
                    if(!equipo1.equals("")){
                        String resultado1 = request.getParameter("resultado1_"+i);
                        String equipo2 = request.getParameter("equipo2_"+i);
                        String resultado2 = request.getParameter("resultado2_"+i);
                        String fechaJ = request.getParameter("fecha_"+i);
                        Date fecha_jor = null;
                        try{
                            fecha_jor = formato.parse(fechaJ);
                        }catch(ParseException ex){
                              ex.printStackTrace();
                            }
                        String hora = request.getParameter("hora_"+i);
                        String lugar = request.getParameter("lugar_"+i);
                        Partido partido = new Partido(id_jornada,id_club,id_partido,equipo1,resultado1,equipo2,resultado2,fecha_jor,hora,lugar);
                        if(PartidoDB.addPartido(partido)){
                            url = "/mensaje.jsp?mensaje=Jornada añadida correctamente";
                        }else{
                            url = "/mensaje.jsp?mensaje=Error al añadir la jornada";
                        }
                    }
                }
            } 
        }
        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);
    }
}
