package es.tatvil.taiageweb.controlador;

import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Controlador MVC que sirve las páginas principales del sitio a través de Thymeleaf.
 *
 * <p>Todas las rutas devuelven el nombre de la plantilla correspondiente en
 * {@code src/main/resources/templates/}. Spring Security controla qué rutas
 * son accesibles sin autenticación.</p>
 */
@Controller
public class WebController {

    /**
     * Página de inicio.
     *
     * @return nombre de la plantilla {@code index}
     */
    @GetMapping({"/", "/inicio"})
    public String inicio() { return "index"; }

    /**
     * Página de inicio de sesión.
     *
     * @return nombre de la plantilla {@code login}
     */
    @GetMapping("/login")
    public String login() { return "login"; }

    /**
     * Visor del temario del curso (requiere {@code ROLE_PAGADO} o {@code ROLE_ADMIN}).
     *
     * @return nombre de la plantilla {@code curso}
     */
    @GetMapping("/curso")
    public String curso() { return "curso"; }

    /**
     * Planning de repaso (requiere {@code ROLE_PAGADO} o {@code ROLE_ADMIN}).
     *
     * @return nombre de la plantilla {@code planning}
     */
    @GetMapping("/planning")
    public String planning() { return "planning"; }

    /**
     * Navegador de legislación; acceso público.
     *
     * @return nombre de la plantilla {@code leyes}
     */
    @GetMapping("/leyes")
    public String leyes() { return "leyes"; }

    /**
     * Agregador de noticias INAP/BOE; acceso público.
     *
     * @return nombre de la plantilla {@code noticias}
     */
    @GetMapping("/noticias")
    public String noticias() { return "noticias"; }

    /**
     * Página de acceso denegado (HTTP 403).
     *
     * @return nombre de la plantilla {@code acceso-denegado}
     */
    @GetMapping("/acceso-denegado")
    public String accesoDenegado() { return "acceso-denegado"; }

    /**
     * Feed RSS/podcast compatible con clientes de podcast (Spotify, Pocket Casts, etc.).
     * Sirve el fichero {@code static/podcast.xml} generado por {@code scripts/generar_podcast.py}.
     */
    @GetMapping(value = "/podcast.xml", produces = "application/rss+xml;charset=UTF-8")
    @ResponseBody
    public ResponseEntity<Resource> podcast() {
        Resource resource = new ClassPathResource("static/podcast.xml");
        if (!resource.exists()) {
            return ResponseEntity.notFound().build();
        }
        return ResponseEntity.ok()
                .contentType(MediaType.valueOf("application/rss+xml;charset=UTF-8"))
                .body(resource);
    }
}
