package es.tatvil.taiageweb.controlador;

import es.tatvil.taiageweb.servicio.UsuarioService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

@Controller
@RequestMapping("/admin")
public class AdminController {

    private final UsuarioService service;

    public AdminController(UsuarioService service) {
        this.service = service;
    }

    @GetMapping({"", "/", "/usuarios"})
    public String listar(Model model) {
        model.addAttribute("usuarios", service.listarTodos());
        return "admin/usuarios";
    }

    /** Activa o desactiva la cuenta */
    @PostMapping("/usuarios/{id}/toggle-habilitado")
    public String toggleHabilitado(@PathVariable Long id) {
        service.toggleHabilitado(id);
        return "redirect:/admin/usuarios";
    }

    /** Concede o revoca el acceso al curso */
    @PostMapping("/usuarios/{id}/toggle-pagado")
    public String togglePagado(@PathVariable Long id) {
        service.toggleRolPagado(id);
        return "redirect:/admin/usuarios";
    }

    /** El admin crea un usuario directamente activo */
    @PostMapping("/usuarios/nuevo")
    public String crear(
            @RequestParam String email,
            @RequestParam String password,
            @RequestParam(defaultValue = "false") boolean pagado,
            RedirectAttributes ra) {
        try {
            service.crearPorAdmin(email, password, pagado);
        } catch (IllegalArgumentException e) {
            ra.addFlashAttribute("error", e.getMessage());
        }
        return "redirect:/admin/usuarios";
    }

    /** Elimina un usuario */
    @PostMapping("/usuarios/{id}/eliminar")
    public String eliminar(@PathVariable Long id) {
        service.eliminar(id);
        return "redirect:/admin/usuarios";
    }
}
