package com.astalange.web.controller;

import com.astalange.core.entity.Saison;
import com.astalange.core.repository.SaisonRepository;
import com.astalange.core.service.SaisonService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
@RequestMapping("/saisons")
public class SaisonController {

    private final SaisonRepository saisonRepository;
    private final SaisonService saisonService;

    public SaisonController(SaisonRepository saisonRepository, SaisonService saisonService) {
        this.saisonRepository = saisonRepository;
        this.saisonService = saisonService;
    }

    @GetMapping
    public String listSaisons(Model model) {
        // Optionnel: On pourrait trier par ID descendant pour avoir la plus récente en haut
        List<Saison> saisons = saisonRepository.findAll();
        model.addAttribute("saisons", saisons);
        return "parametrage/saisons_list";
    }

    @GetMapping("/new")
    public String showCreateForm(Model model) {
        return "parametrage/saison_form";
    }

    @PostMapping
    public String saveSaison(@RequestParam String nom, @RequestParam(defaultValue = "false") boolean importerParametrage) {
        saisonService.creerNouvelleSaison(nom, importerParametrage);
        return "redirect:/saisons";
    }

    @PostMapping("/{id}/activer")
    public String activerSaison(@PathVariable Long id) {
        Saison saisonAActiver = saisonRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("Saison introuvable : " + id));

        // Désactiver toutes les saisons
        List<Saison> toutes = saisonRepository.findAll();
        for (Saison s : toutes) {
            s.setEstActive(false);
            saisonRepository.save(s);
        }

        // Activer la saison choisie
        saisonAActiver.setEstActive(true);
        saisonRepository.save(saisonAActiver);

        return "redirect:/saisons";
    }

    @PostMapping("/{id}/toggle-inscriptions")
    public String toggleInscriptions(@PathVariable Long id) {
        Saison saison = saisonRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("Saison introuvable : " + id));
        saison.setInscriptionsOuvertes(!saison.getInscriptionsOuvertes());
        saisonRepository.save(saison);
        return "redirect:/saisons";
    }
}
