from jarvis_gateway.adapters.health_risk_cockpit import DOMAIN_IDS, HealthRiskCockpitAdapter, HealthRiskSnapshot


def test_health_risk_snapshot_has_exact_allowed_domain_ids() -> None:
    snapshot = HealthRiskCockpitAdapter().build_snapshot()
    assert [domain.id for domain in snapshot.domains] == list(DOMAIN_IDS)
    assert snapshot.schema_version == "1.0"
    assert snapshot.overall_status in {"green", "yellow", "red", "unknown"}


def test_unknown_when_safe_data_missing() -> None:
    snapshot = HealthRiskCockpitAdapter(stale_data=False).build_snapshot()
    statuses = {domain.id: domain.status for domain in snapshot.domains}
    assert statuses["behcet_activity"] == "unknown"
    assert statuses["eye_risk"] == "unknown"
    assert statuses["vascular_thrombosis_risk"] == "unknown"


def test_red_when_synthetic_emergency_flags_present() -> None:
    snapshot = HealthRiskCockpitAdapter(emergency_flags={"sudden_vision_loss", "chest_pain"}).build_snapshot()
    statuses = {domain.id: domain.status for domain in snapshot.domains}
    assert snapshot.overall_status == "red"
    assert statuses["eye_risk"] == "red"
    assert statuses["vascular_thrombosis_risk"] == "red"


def test_yellow_when_stale_data() -> None:
    snapshot = HealthRiskCockpitAdapter(stale_data=True).build_snapshot()
    statuses = {domain.id: domain.status for domain in snapshot.domains}
    assert statuses["inflammation_lab_trend"] == "yellow"
    assert statuses["controls_data_status"] == "yellow"


def test_strict_contract_rejects_dynamic_domain() -> None:
    payload = HealthRiskCockpitAdapter().build_snapshot().model_dump(mode="json")
    payload["domains"][0]["id"] = "raw_lab_table"
    try:
        HealthRiskSnapshot.model_validate(payload)
    except Exception as exc:  # noqa: BLE001
        assert "domain" in str(exc).lower() or "literal" in str(exc).lower()
    else:  # pragma: no cover
        raise AssertionError("dynamic health risk domain was accepted")
