"""Gate pro autoritu plánu: dokázat deterministickým testem, že právě jeden
soubor je autoritativní a že ostatní jsou označeny jako archiv.

Proč tento soubor existuje
--------------------------
`AGENTS.md` dříve tvrdil, že ``tests/test_plan_authority.py`` „hlídá, aby
ukazatel výše nezrostal". `git log --all -- tests/test_plan_authority.py` byl
prázdný — soubor nikdy nebyl zapsán ani smazán. Dokumentace tedy odkazovala na
ochranu, která neexistovala, a nikdo si toho nevšiml, protože odkaz na
neexistující test nevypadá jako chyba.

Rozsah:
  * importuje POUZE stdlib + `pytest` (ne `yaml`, ten tu není potřeba),
  * NEimportuje nic z `src/cyberbrain26` — pravidlo zadání, stejné jako
    `test_kilo_agent_policy.py`,
  * čte pouze soubory v repozitáři, nic nezapisuje.

Hranice toho, co tento test umí
-------------------------------
Kontroluje **declarativní** označení. Umí zjistit, že hlavička chybí nebo že
na ni někdo odkáže jako na autoritu. ** neumí zjistit, že někdo vytvořil
`ROADMAP_V8.md`, nebo že plán `-v2.md` sám neodpovídá realitě — to je
posouzení, ne automatická kontrola.

Odkazy: `AGENTS.md` §„Plán a jeho autorita", `.kilo/plans/CyberBrain26cil-031026-v2.md`.
"""

from __future__ import annotations

from pathlib import Path

import pytest

REPO_ROOT = Path(__file__).resolve().parents[1]

AUTHORITATIVE_PLAN = REPO_ROOT / ".kilo" / "plans" / "CyberBrain26cil-031026-v2.md"

# Pět souborů, které nesmějí být prezentovány jako rovnocenné hlavní cíle.
# Seznam odpovídá výčtu v `AGENTS.md`; když se změní tam, musí se změnit i tady.
SUPERSEDED_DOCUMENTS = (
    REPO_ROOT / "ROADMAP_V5.md",
    REPO_ROOT / "ROADMAP_V6.md",
    REPO_ROOT / "ROADMAP_V7.md",
    REPO_ROOT / ".kilo" / "plans" / "CyberBrain26cil-031026.md",
    REPO_ROOT / ".kilo" / "plans" / "1791036626945-roadmap-v8-a-plan-do-konce.md",
)

# `ROADMAP_V6.md` je citovaný z `test_kilo_agent_policy.py` jako zdroj
# bezpečnostních invariantů §14. Smazat ho by tišně zrušilo ty citace.
CITED_BY_POLICY_TEST = REPO_ROOT / "ROADMAP_V6.md"

SUPERSEDED_MARKER = "status: superseded"


def test_authoritative_plan_exists() -> None:
    """Autoritativní plán musí existovat a být čitelný."""
    assert AUTHORITATIVE_PLAN.is_file(), (
        f"autoritativní plán chybí: {AUTHORITATIVE_PLAN}"
    )
    assert AUTHORITATIVE_PLAN.read_text(encoding="utf-8").strip(), (
        "autoritativní plán je prázdný"
    )


def test_authoritative_plan_is_not_marked_superseded() -> None:
    """Jediné, co odlišuje `-v2.md` od ostatních, je absence značky.

    Kdyby se na něj někdo překlepem přidal `status: superseded`, plán by
    ztratil právě tu vlastnost, pro kterou je autoritativní, a nic v repu by
    to neodhalilo.
    """
    text = AUTHORITATIVE_PLAN.read_text(encoding="utf-8")
    assert SUPERSEDED_MARKER not in text, (
        "autoritativní plán nesmí nést značku 'status: superseded' — "
        "právě jeho nepřítomnost ho odlišuje od archivních dokumentů"
    )


@pytest.mark.parametrize("document", SUPERSEDED_DOCUMENTS, ids=lambda p: p.name)
def test_archived_document_is_marked_superseded(document: Path) -> None:
    """Každý archivní plán musí v hlavičce nést `status: superseded`."""
    assert document.is_file(), f"archivní dokument chybí: {document}"
    text = document.read_text(encoding="utf-8")
    assert SUPERSEDED_MARKER in text, (
        f"{document.name} chybí značka '{SUPERSEDED_MARKER}' — "
        "bez ní se nerozliší od autoritativního plánu"
    )
    assert AUTHORITATIVE_PLAN.name in text, (
        f"{document.name} neodkazuje na autoritativní plán "
        f"{AUTHORITATIVE_PLAN.name} — odkaz je věcná oprava, ne jen značka"
    )


def test_agents_md_does_not_claim_a_guard_that_does_not_exist() -> None:
    """`AGENTS.md` nesmí citovat hlídače, který v repu není.

    Toto je přesně ta třída chyby, kterou tento soubor existuje aby nápravil:
    `AGENTS.md` dlouho uváděl `tests/test_plan_authority.py` jako strážce
    autority plánu, zatímco soubor v repu nebyl. Jakmile je soubor skutečně
    zapsán, toto tvrzení je pravdivé — a test ho má hlídat dál, protože smazat
    se dá znovu.
    """
    agents_md = REPO_ROOT / "AGENTS.md"
    assert agents_md.is_file(), "AGENTS.md chybí"
    text = agents_md.read_text(encoding="utf-8")
    assert "tests/test_plan_authority.py" in text, (
        "AGENTS.md má uvádět tento test jako existující"
    )
    # `AGENTS.md` nesmí tvrdit, že soubor chybí — to by bylo jen další lež,
    # tentokrát opačným směrem.
    assert "NEEXISTUJE" not in text.split("tests/test_plan_authority.py")[1][:200], (
        "AGENTS.md stále tvrdí, že tento test v repu není — od této chvíle "
        "soubor existuje, a tvrzení je nepravdivé"
    )


def test_roadmap_v6_remains_present() -> None:
    """`ROADMAP_V6.md` je citovaný zdroj invariantů; nesmí zmizet tišně."""
    assert CITED_BY_POLICY_TEST.is_file(), (
        "ROADMAP_V6.md je citovaný z test_kilo_agent_policy.py; smazání by "
        "tišně zrušilo ty citace"
    )


def test_there_is_no_roadmap_v8() -> None:
    """`ROADMAP_V8.md` nikdy nebyl zapsán; jeho tvrzení o schválení je plan.

    `AGENTS.md` o tom mluví výslovně. Kdyby se soubor objevil, musel by být
    v `SUPERSEDED_DOCUMENTS` nebo označen jako autorita — jinak by existoval
    vedle plánu a nikdo by nevěděl, který platí.
    """
    assert not (REPO_ROOT / "ROADMAP_V8.md").exists(), (
        "ROADMAP_V8.md existuje, ale není v SUPERSEDED_DOCUMENTS ani označen "
        "jako autoritativní — autorita plánu je teď dvojznačná"
    )