package com.astalange.web.controller;

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

@Controller
@RequestMapping("/equipements")
public class EquipementController {

    private final EquipementRepository equipementRepository;
    private final SaisonRepository saisonRepository;

    public EquipementController(EquipementRepository equipementRepository, SaisonRepository saisonRepository) {
        this.equipementRepository = equipementRepository;
        this.saisonRepository = saisonRepository;
    }

    @GetMapping
    public String listEquipements(Model model) {
        Saison activeSaison = saisonRepository.findByEstActiveTrue().orElse(null);
        if (activeSaison != null) {
            model.addAttribute("equipements", equipementRepository.findBySaison(activeSaison));
        } else {
            model.addAttribute("equipements", java.util.List.of());
        }
        return "parametrage/equipements_list";
    }

    @GetMapping("/new")
    public String showCreateForm(Model model) {
        model.addAttribute("equipement", new Equipement());
        return "parametrage/equipements_form";
    }

    @GetMapping("/{id}/edit")
    public String showEditForm(@PathVariable Long id, Model model) {
        Equipement equipement = equipementRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id));
        model.addAttribute("equipement", equipement);
        return "parametrage/equipements_form";
    }

    @PostMapping
    public String saveEquipement(@ModelAttribute("equipement") Equipement equipement) {

        if (equipement.getId() == null) {
            Saison activeSaison = saisonRepository.findByEstActiveTrue()
                    .orElseThrow(() -> new IllegalStateException("Aucune saison active trouvée"));
            equipement.setSaison(activeSaison);
        } else {
            Equipement existing = equipementRepository.findById(equipement.getId())
                    .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + equipement.getId()));
            equipement.setSaison(existing.getSaison());
        }
        equipementRepository.save(equipement);
        return "redirect:/equipements";
    }

    @PostMapping("/{id}/delete")
    public String deleteEquipement(@PathVariable Long id) {
        Equipement equipement = equipementRepository.findById(id)
                .orElseThrow(() -> new IllegalArgumentException("Invalid equipment ID: " + id));
        equipementRepository.delete(equipement);
        return "redirect:/equipements";
    }
}
