"""API BrandPack — público (active) + admin (activate)."""

from __future__ import annotations

from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import PlainTextResponse
from pydantic import BaseModel, Field

from app.api.deps import get_current_user, require_admin
from app.models import User
from app.services import brand

router = APIRouter(prefix="/brand", tags=["brand"])


class ActivateIn(BaseModel):
    preset_id: str = Field(min_length=1, max_length=64)


@router.get("/active")
def active_brand():
    return brand.get_active()


@router.get("/css")
def brand_css():
    return PlainTextResponse(brand.css_variables(), media_type="text/css")


@router.get("/presets")
def presets(_: User = Depends(get_current_user)):
    return {"presets": brand.list_presets(), "active": brand.get_active()}


@router.post("/activate")
def activate(payload: ActivateIn, _: User = Depends(require_admin)):
    try:
        pack = brand.set_active(payload.preset_id)
    except FileNotFoundError:
        raise HTTPException(404, "Preset no encontrado") from None
    return {"ok": True, "active": pack}
