from pypos.modules.scanner.services.scanner_status_service import ScannerStatusService


def test_scanner_status_runtime_empty_off():
    svc = ScannerStatusService()
    result = svc.resolve({})
    assert result["on"] is False
    assert result["backend_mode"] == "unknown"


def test_scanner_status_disabled_off():
    svc = ScannerStatusService()
    result = svc.resolve(
        {
            "settings": {"enabled": False, "backend_mode": "wedge"},
            "wedge": {"enabled": True},
            "rawinput": {"active": False},
        }
    )
    assert result["on"] is False
    assert "nonaktif" in result["tooltip"].lower()


def test_scanner_status_rawinput_active_on():
    svc = ScannerStatusService()
    result = svc.resolve(
        {
            "settings": {"enabled": True, "backend_mode": "rawinput", "rawinput_enabled": True},
            "wedge": {"enabled": False},
            "rawinput": {
                "active": True,
                "capture_enabled": True,
                "installed": True,
                "is_windows": True,
                "whitelist_ready": True,
                "whitelist_count": 1,
                "discovered_devices": [{"name": "Scanner USB 1"}],
            },
        }
    )
    assert result["on"] is True


def test_scanner_status_auto_fallback_wedge_off_without_physical_validation():
    svc = ScannerStatusService()
    result = svc.resolve(
        {
            "settings": {"enabled": True, "backend_mode": "auto", "rawinput_enabled": True},
            "wedge": {"enabled": True},
            "rawinput": {"active": False, "installed": False, "is_windows": True},
        }
    )
    # edited by glg
    # Header ON hanya jika scanner fisik tervalidasi.
    # Fallback wedge aktif tanpa validasi fisik harus tetap OFF.
    assert result["on"] is False


def test_scanner_status_tooltip_includes_enabled_ready_detected():
    svc = ScannerStatusService()
    result = svc.resolve(
        {
            "settings": {"enabled": True, "backend_mode": "rawinput", "rawinput_enabled": True},
            "wedge": {"enabled": False},
            "rawinput": {
                "active": True,
                "capture_enabled": True,
                "installed": True,
                "is_windows": True,
                "whitelist_ready": True,
                "whitelist_count": 1,
                "discovered_devices": [{"name": "Scanner USB 1"}],
            },
            "scanner_activity": {"last_scan_recent": True, "last_scan_source": "rawinput_poll", "last_scan_age_ms": 120},
        }
    )
    tooltip = result.get("tooltip", "")
    assert "Enabled:" in tooltip
    assert "Ready:" in tooltip
    assert "Detected:" in tooltip
