package com.roshka.controller;

import com.roshka.modelo.Birthday;
import com.roshka.modelo.Feriado;
import com.roshka.repositorio.BirthdayRepository;
import com.roshka.repositorio.FeriadoRepository;
import org.apache.commons.codec.digest.DigestUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

@Controller
@RequestMapping("/feriados")
public class FeriadoController {

    FeriadoRepository feriadoRepository;


    @Autowired
    public FeriadoController(FeriadoRepository feriadoRepository){
        this.feriadoRepository = feriadoRepository;
    }

    @GetMapping(path = {"/agregar","/modificar/{id}"})
    public String addFeriadoView(Model model, @PathVariable(required = false) Long id) {

        if(id == null) model.addAttribute("feriado", new Feriado());
        else model.addAttribute("feriado", feriadoRepository.getById(id));
        return "feriado-form";
    }

    @RequestMapping()
    public String menuFeriados(Model model, @RequestParam(required = false) String feriado, @RequestParam(defaultValue = "0")Integer nroPagina) {
        final Integer CANTIDAD_POR_PAGINA = 10;
        Pageable page = PageRequest.of(nroPagina,CANTIDAD_POR_PAGINA,Sort.by("id"));

        if(feriado == null || feriado.trim().isEmpty()) {
            Page<Feriado> feriadoPag=feriadoRepository.findAllFeriado(page);
            model.addAttribute("feriados", feriadoPag.getContent());
            model.addAttribute("pages", feriadoPag.getTotalPages());
        }
        else {
            Page<Feriado> feriadoPag=feriadoRepository.findByMotivoFeriadoContainingIgnoreCase(feriado.trim(),page);
            model.addAttribute("pages", feriadoPag.getTotalPages());
            model.addAttribute("feriados", feriadoPag.getContent());
        }
        return "feriados";
    }

    @PostMapping(path = {"/agregar","/modificar/{id}"})
   public String addFeriado(@RequestPart(name = "motivoFeriado") String motivoFeriado,
                              @RequestPart(name = "fecha") String fecha,
                              @PathVariable(required = false) Long id,
                              Model model) {
        if((id==null && feriadoRepository.existsByMotivoFeriadoIgnoreCase(motivoFeriado))){
            model.addAttribute("mismoMotivo", true);
            return "feriado-form";
        }
        Feriado feriado = new Feriado();
        if (id != null) {
            feriado = feriadoRepository.getById(id);
        }
        feriado.setMotivoFeriado(motivoFeriado);
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Date date = formatter.parse(fecha);
            feriado.setFecha(date);
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }

        if(id != null ) feriado.setId(id);
        feriadoRepository.save(feriado);
        return "redirect:/feriados";
    }
}