# Pengaturan printer lanjutan untuk scanner, termasuk mode backend dan opsi rawinput.
SCANNER_ADVANCED_PROFILE = {
    "max_inter_char_ms": 50,
    "min_length": 5,
    "require_enter_suffix": True,
    "duplicate_guard_ms": 180,
    "backend_mode": "auto",
    "rawinput_enabled": True,
}


def _normalize_backend_mode(value):
    mode = str(value or "auto").strip().lower()
    if mode not in {"auto", "wedge", "rawinput"}:
        return "auto"
    return mode


def get_scanner_advanced_profile():
    profile = dict(SCANNER_ADVANCED_PROFILE)
    profile["max_inter_char_ms"] = max(1, int(profile.get("max_inter_char_ms", 50) or 50))
    profile["min_length"] = max(1, int(profile.get("min_length", 5) or 5))
    profile["duplicate_guard_ms"] = max(1, int(profile.get("duplicate_guard_ms", 180) or 180))
    profile["require_enter_suffix"] = bool(profile.get("require_enter_suffix", True))
    profile["backend_mode"] = _normalize_backend_mode(profile.get("backend_mode", "auto"))
    profile["rawinput_enabled"] = bool(profile.get("rawinput_enabled", True))
    return profile


def build_scanner_easy_payload(enabled, rawinput_whitelist):
    profile = get_scanner_advanced_profile()
    whitelist = rawinput_whitelist if isinstance(rawinput_whitelist, list) else []
    normalized_whitelist = []
    seen = set()
    for item in whitelist:
        token = str(item or "").strip().lower()
        if not token or token in seen:
            continue
        normalized_whitelist.append(token)
        seen.add(token)
    payload = {
        "enabled": bool(enabled),
        "rawinput_whitelist": normalized_whitelist,
    }
    payload.update(profile)
    return payload
