"""Tests offline de comfyui_curated_styles_catalog — puro, sin red ni I/O."""
import os
import sys

sys.path.insert(0, os.path.dirname(__file__))

from comfyui_curated_styles_catalog import comfyui_curated_styles_catalog


def test_catalogo_completo_no_vacio():
    cat = comfyui_curated_styles_catalog()
    assert isinstance(cat, dict)
    assert len(cat) >= 180, f"esperaba >=180 estilos curados, hay {len(cat)}"


def test_toda_entrada_tiene_prompt_y_negative_no_vacios():
    cat = comfyui_curated_styles_catalog()
    for name, v in cat.items():
        assert isinstance(v, dict), f"{name} no es dict"
        assert v.get("prompt", "").strip(), f"{name} prompt vacío"
        assert v.get("negative_prompt", "").strip(), f"{name} negative vacío"


def test_sin_placeholder_prompt_literal():
    # El selector múltiple concatena prompts; NO debe llevar el placeholder {prompt}.
    cat = comfyui_curated_styles_catalog()
    for name, v in cat.items():
        assert "{prompt}" not in v["prompt"], f"{name} contiene placeholder {{prompt}}"


def test_nombres_unicos():
    cat = comfyui_curated_styles_catalog()
    # dict ya garantiza claves únicas; comprobamos que no hay colisión entre categorías
    # (el total plano == suma de categorías) -> ningún nombre se pisó al construir.
    meta = comfyui_curated_styles_catalog("__categories__")
    assert len(cat) == meta["total"], "colisión de nombres entre categorías"


def test_filtrar_por_categoria():
    photo = comfyui_curated_styles_catalog("photography")
    assert len(photo) >= 10
    assert all(v["prompt"] for v in photo.values())


def test_categoria_desconocida_lanza():
    try:
        comfyui_curated_styles_catalog("noexiste")
    except ValueError:
        return
    raise AssertionError("esperaba ValueError para categoría desconocida")


def test_discovery_categorias():
    meta = comfyui_curated_styles_catalog("__categories__")
    assert "categories" in meta and "total" in meta
    assert meta["total"] == sum(meta["categories"].values())


if __name__ == "__main__":
    for name, fn in sorted(globals().items()):
        if name.startswith("test_") and callable(fn):
            fn()
            print("PASS", name)
    print("OK")
