# edited by glg
from pypos.modules.scanner.services.scanner_diagnostic_service import ScannerDiagnosticService


def test_scanner_diagnostic_warn_when_disabled():
    svc = ScannerDiagnosticService()
    report = svc.run(
        {
            "enabled": False,
            "backend_mode": "wedge",
            "rawinput_enabled": True,
            "duplicate_guard_ms": 250,
            "rawinput_whitelist": [],
        },
        runtime={},
    )
    assert report["overall_status"] in {"WARN", "FAIL"}
    checks = report.get("checks") or []
    assert any(c.get("name") == "detector_enabled" and c.get("status") == "WARN" for c in checks)
    assert int((report.get("settings") or {}).get("duplicate_guard_ms") or 0) == 250


def test_scanner_diagnostic_runtime_rawinput_active():
    svc = ScannerDiagnosticService()
    report = svc.run(
        {
            "enabled": True,
            "backend_mode": "rawinput",
            "rawinput_enabled": True,
            "rawinput_whitelist": ["hid#vid_05e0"],
        },
        runtime={"rawinput": {"active": True, "capture_enabled": True}},
    )
    checks = report.get("checks") or []
    assert any(c.get("name") == "rawinput_runtime" and c.get("status") == "PASS" for c in checks)


def test_scanner_diagnostic_invalid_numeric_payload_tidak_crash():
    svc = ScannerDiagnosticService()
    report = svc.run(
        {
            "enabled": "1",
            "backend_mode": "rawinput",
            "rawinput_enabled": "0",
            "rawinput_whitelist": [],
            "duplicate_guard_ms": "invalid",
        },
        runtime={},
    )
    settings = report.get("settings") or {}
    assert int(settings.get("duplicate_guard_ms") or 0) == 180
    assert settings.get("enabled") is True
    assert settings.get("rawinput_enabled") is False
