from pathlib import Path

import yaml


class QuartoLoader(yaml.SafeLoader):
    """Loader que ignora tags personalizados de Quarto (p.ej. !docs/_sidebar.md)."""


def _construct_passthrough(loader: QuartoLoader, node: yaml.Node):
    if isinstance(node, yaml.ScalarNode):
        return loader.construct_scalar(node)
    if isinstance(node, yaml.SequenceNode):
        return loader.construct_sequence(node)
    return loader.construct_mapping(node)


QuartoLoader.add_constructor(None, _construct_passthrough)


def _load_quarto_config() -> dict:
    return yaml.load(Path("_quarto.yml").read_text(encoding="utf-8"), Loader=QuartoLoader)


def test_quarto_references_design_system_css() -> None:
    config = _load_quarto_config()
    css_entries = config["format"]["html"]["css"]
    assert any(entry.endswith("assets/css/system.css") for entry in css_entries)


def test_quarto_navbar_contains_monitoreo() -> None:
    config = _load_quarto_config()
    navbar_left = config["website"]["navbar"]["left"]
    texts: set[str] = set()
    for entry in navbar_left:
        text = entry.get("text") if isinstance(entry, dict) else None
        if text:
            texts.add(text)
        menu = entry.get("menu") if isinstance(entry, dict) else None
        if isinstance(menu, list):
            for item in menu:
                if isinstance(item, dict) and item.get("text"):
                    texts.add(item["text"])
    assert "Monitoreo" in texts
