#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
init-chrome-prefs.py
幂等地往独立 Chrome user-data-dir 的 Default/Preferences 写入：
  - media_stream_camera / media_stream_mic 对 file:// 和 *,* 永久允许
目的：避免每次启动 register.html / verify.html 时弹摄像头授权框，
     同时不使用 --use-fake-ui-for-media-stream（会触发黄色警告条）。

用法：
  python3 init-chrome-prefs.py <chrome_user_data_dir>
  # 默认 user_data_dir = ~/.cache/palm-register-chrome
"""
import json
import os
import sys


def patch_prefs(user_data_dir: str) -> None:
    default_dir = os.path.join(user_data_dir, "Default")
    os.makedirs(default_dir, exist_ok=True)
    prefs_path = os.path.join(default_dir, "Preferences")

    if os.path.exists(prefs_path):
        try:
            with open(prefs_path, "r", encoding="utf-8") as f:
                pref = json.load(f)
        except Exception:
            pref = {}
    else:
        pref = {}

    exc = (
        pref.setdefault("profile", {})
        .setdefault("content_settings", {})
        .setdefault("exceptions", {})
    )
    for key in ("media_stream_camera", "media_stream_mic"):
        entry = exc.setdefault(key, {})
        # setting=1 表示 ALLOW
        # file:// 来源（旧版兼容）
        entry["file:///*,*"] = {"setting": 1}
        # http://127.0.0.1（本地 HTTP 服务器，wasm 必须通过 http 加载）
        # Chrome content_settings 不支持通配端口，需覆盖常见格式
        entry["http://127.0.0.1:*,*"] = {"setting": 1}
        entry["http://127.0.0.1/*,*"] = {"setting": 1}
        # 通用兜底（部分 Chrome 版本识别此格式）
        entry["*,*"] = {"setting": 1}

    with open(prefs_path, "w", encoding="utf-8") as f:
        json.dump(pref, f, ensure_ascii=False)

    print(f"[init-chrome-prefs] patched: {prefs_path}")


if __name__ == "__main__":
    target = (
        sys.argv[1]
        if len(sys.argv) > 1
        else os.path.expanduser("~/.cache/palm-register-chrome")
    )
    patch_prefs(target)
