from jarvis_gateway.adapters.mock_autoshorts import MockAutoShortsAdapter
from jarvis_gateway.adapters.mock_finance import MockFinanceAdapter
from jarvis_gateway.adapters.mock_health import MockHealthAdapter
from jarvis_gateway.adapters.mock_system import MockSystemAdapter
from jarvis_gateway.contracts import ModuleSnapshot, ModuleStatus
from jarvis_gateway.redaction import contains_forbidden_field


def test_all_adapters_return_safe_module_snapshots() -> None:
    for adapter in [MockFinanceAdapter(), MockHealthAdapter(), MockAutoShortsAdapter(), MockSystemAdapter()]:
        snapshot = adapter.get_snapshot()
        assert isinstance(snapshot, ModuleSnapshot)
        assert not contains_forbidden_field(snapshot.model_dump())
        assert len(snapshot.kpis) <= 3


def test_finance_mock_has_no_exact_values() -> None:
    payload = MockFinanceAdapter().get_snapshot().model_dump_json()
    forbidden = ["amount", "cash", "portfolio", "transaction", "merchant", "account"]
    for item in forbidden:
        assert item not in payload.lower()


def test_health_mock_has_no_raw_data() -> None:
    payload = MockHealthAdapter().get_snapshot().model_dump_json()
    forbidden = ["labor", "pdf", "drive", "path", "arzt", "symptom", "yazio"]
    for item in forbidden:
        assert item not in payload.lower()


def test_autoshorts_mock_is_synthetic() -> None:
    snapshot = MockAutoShortsAdapter().get_snapshot()
    assert snapshot.module_id == "autoshorts"
    assert snapshot.status in {ModuleStatus.ATTENTION, ModuleStatus.OK}


def test_system_mock_is_ok() -> None:
    snapshot = MockSystemAdapter().get_snapshot()
    assert snapshot.module_id == "system"
    assert snapshot.status == ModuleStatus.OK
