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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * Controlador MVC para el auto-registro de nuevos usuarios.
 *
 * <p>Procesa el formulario de registro en {@code /registro}. La cuenta creada
 * queda deshabilitada hasta que el administrador la active desde
 * {@code /admin/usuarios}.</p>
 */
@Controller
public class RegistroController {

    private final UsuarioService service;

    /**
     * Constructor con inyección de dependencias.
     *
     * @param service servicio de gestión de usuarios
     */
    public RegistroController(UsuarioService service) {
        this.service = service;
    }

    /**
     * Muestra el formulario de registro.
     *
     * @return nombre de la plantilla {@code registro}
     */
    @GetMapping("/registro")
    public String mostrarFormulario() {
        return "registro";
    }

    /**
     * Procesa el formulario de registro.
     *
     * <p>Valida que las contraseñas coincidan y delega en {@link UsuarioService#registrar}.
     * Si el registro tiene éxito, redirige al login con el parámetro {@code ?registrado}.</p>
     *
     * @param email          email del nuevo usuario
     * @param password       contraseña elegida
     * @param passwordConfirm confirmación de la contraseña
     * @param model          modelo Thymeleaf para enviar mensajes de error
     * @return redirección a {@code /login?registrado} si éxito, o la vista {@code registro} con error
     */
    @PostMapping("/registro")
    public String registrar(
            @RequestParam String email,
            @RequestParam String password,
            @RequestParam String passwordConfirm,
            Model model) {

        if (!password.equals(passwordConfirm)) {
            model.addAttribute("error", "Las contraseñas no coinciden");
            return "registro";
        }
        try {
            service.registrar(email, password);
            return "redirect:/login?registrado";
        } catch (IllegalArgumentException e) {
            model.addAttribute("error", e.getMessage());
            return "registro";
        }
    }
}
