#!/bin/sh
set -eu
LOG="${TMPDIR:-/tmp}/xlight-reset.log"
fail() {
  printf "\nXLight 清理未完成。\n原因：%s\n技术日志：%s\n" "$1" "$LOG"
  exit 1
}

XLIGHT_HOME="$HOME/.xlight"
PLIST="$HOME/Library/LaunchAgents/com.xlight.bridge.plist"

echo "[1/4] 停止 XLight 后台服务..."
launchctl bootout "gui/$(id -u)" "$PLIST" 2>/dev/null || true
pkill -f "$XLIGHT_HOME/xlight.py.*daemon" 2>/dev/null || true

echo "[2/4] 清理 Claude Code 与 Codex 的 XLight hooks..."
python3 - "$HOME/.claude/settings.json" "$HOME/.codex/hooks.json" <<'PY'
import json
import pathlib
import sys

markers = ("xlight", "chuncui-ble", "hook-client.mjs", "traffic_light",
           "traffic-monitor", "traffic_monitor")

for name in sys.argv[1:]:
    path = pathlib.Path(name)
    if not path.exists():
        continue
    try:
        data = json.loads(path.read_text(encoding="utf-8"))
    except Exception:
        print(f"跳过无法解析的配置：{path}")
        continue
    hooks = data.get("hooks")
    if not isinstance(hooks, dict):
        continue
    for event in list(hooks):
        entries = hooks[event]
        if not isinstance(entries, list):
            continue
        kept = []
        for entry in entries:
            commands = [
                hook.get("command", "").lower()
                for hook in entry.get("hooks", [])
                if isinstance(hook, dict)
            ]
            if not any(marker in command for marker in markers for command in commands):
                kept.append(entry)
        if kept:
            hooks[event] = kept
        else:
            hooks.pop(event, None)
    if not hooks:
        data.pop("hooks", None)
    path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n",
                    encoding="utf-8")
PY

echo "[3/4] 删除 XLight 程序、日志与开机启动项..."
rm -f "$PLIST"
rm -rf "$XLIGHT_HOME"

echo "[4/4] 检查清理结果..."
if [ -e "$XLIGHT_HOME" ] || [ -e "$PLIST" ]; then
  fail "仍有 XLight 文件被占用，请重启电脑后再运行一次。"
fi

echo "XLight 清理成功。Claude Code、Codex、Hermes 本身及其非 XLight 配置均未删除。"
echo "现在可以按官网教程测试固件升级和全新安装。"
