import json
import re

from jarvis_gateway.adapters.health_risk_cockpit import HealthRiskCockpitAdapter


def _render_snapshot() -> str:
    snapshot = HealthRiskCockpitAdapter(emergency_flags={"bleeding_signs"}, dashboard_available=True).build_snapshot()
    module = HealthRiskCockpitAdapter(emergency_flags={"bleeding_signs"}, dashboard_available=True).get_snapshot()
    return json.dumps({"risk": snapshot.model_dump(mode="json"), "module": module.model_dump(mode="json")}, ensure_ascii=False)


def test_health_risk_output_has_no_paths_drive_pdfs_or_filenames() -> None:
    text = _render_snapshot()
    forbidden = [r"/home/", r"file://", r"drive\.google", r"drive_id", r"\.pdf", r"\.html", r"\.db", r"\.csv", r"\.json"]
    assert not [pattern for pattern in forbidden if re.search(pattern, text, re.I)]


def test_health_risk_output_has_no_reports_ocr_or_raw_tables() -> None:
    text = _render_snapshot().lower()
    forbidden = ["arztbericht", "doctor report", "ocr", "pdf", "raw", "labortabelle", "labor-rohwert", "symptom freestyle"]
    assert not [word for word in forbidden if word in text]


def test_module_snapshot_has_only_three_health_kpis() -> None:
    module = HealthRiskCockpitAdapter().get_snapshot()
    assert len(module.kpis) == 3
    assert [kpi.key for kpi in module.kpis] == ["overall_health_risk", "vascular_risk", "data_freshness"]


def test_health_attention_items_are_short_safe_labels() -> None:
    module = HealthRiskCockpitAdapter(emergency_flags={"sudden_vision_loss"}).get_snapshot()
    assert module.attention_items
    rendered = json.dumps([item.model_dump(mode="json") for item in module.attention_items], ensure_ascii=False)
    assert "Health risk red: eye symptoms" in rendered
    assert "Laborwert" not in rendered
    assert "Arztbericht" not in rendered
