from __future__ import annotations

import json
from pathlib import Path

from jarvis_gateway.contracts import ModuleSnapshot, OverviewResponse
from jarvis_gateway.redaction import contains_forbidden_field

ROOT = Path(__file__).resolve().parents[3]
EXAMPLES = ROOT / "docs" / "contracts" / "examples"


def test_contract_examples_validate_against_pydantic_models() -> None:
    for path in sorted(EXAMPLES.glob("*.json")):
        payload = json.loads(path.read_text(encoding="utf-8"))
        if path.name.endswith("snapshot.json"):
            ModuleSnapshot.model_validate(payload)
        else:
            OverviewResponse.model_validate(payload)


def test_contract_examples_have_no_forbidden_fields() -> None:
    for path in sorted(EXAMPLES.glob("*.json")):
        payload = json.loads(path.read_text(encoding="utf-8"))
        assert not contains_forbidden_field(payload), path


def test_contract_examples_use_known_contract_versions() -> None:
    allowed = {"jarvis.module_snapshot.v1", "jarvis.overview.v1"}
    for path in sorted(EXAMPLES.glob("*.json")):
        payload = json.loads(path.read_text(encoding="utf-8"))
        assert payload["contract_version"] in allowed
