# edited by glg
import pytest

import pypos.core.utils.scanner_settings_utils as scanner_settings_utils

pytestmark = [pytest.mark.unit]


def test_save_scanner_settings_hardening_invalid_payload(monkeypatch):
    store = {}

    def _fake_read():
        return dict(store)

    def _fake_save(payload):
        store.update(dict(payload or {}))

    monkeypatch.setattr(scanner_settings_utils, "read_app_settings", _fake_read)
    monkeypatch.setattr(scanner_settings_utils, "save_app_settings", _fake_save)

    saved = scanner_settings_utils.save_scanner_settings(
        {
            "enabled": "0",
            "max_inter_char_ms": "abc",
            "min_length": "-5",
            "require_enter_suffix": "no",
            "duplicate_guard_ms": "x",
            "backend_mode": "invalid_mode",
            "rawinput_enabled": "off",
            "rawinput_whitelist": ["HID#VID_05E0&PID_1200", "hid#vid_05e0&pid_1200", "", {"match": "SCANNER-01"}],
        }
    )

    assert saved["enabled"] is False
    assert saved["max_inter_char_ms"] == 50
    assert saved["min_length"] == 5
    assert saved["require_enter_suffix"] is False
    assert saved["duplicate_guard_ms"] == 180
    assert saved["backend_mode"] == "wedge"
    assert saved["rawinput_enabled"] is False
    assert saved["rawinput_whitelist"] == ["hid#vid_05e0&pid_1200", "scanner-01"]


def test_read_scanner_settings_boolean_parsing(monkeypatch):
    def _fake_read():
        return {
            "scanner_detector_enabled": "true",
            "scanner_require_enter_suffix": "0",
            "scanner_rawinput_enabled": "yes",
        }

    monkeypatch.setattr(scanner_settings_utils, "read_app_settings", _fake_read)

    out = scanner_settings_utils.read_scanner_settings()
    assert out["enabled"] is True
    assert out["require_enter_suffix"] is False
    assert out["rawinput_enabled"] is True
