#!/usr/bin/env bash
#
# 启动一个可被 Chrome MCP / CDP 控制的 Chrome 实例。
#
# 用法：
#   ./start-chrome-debug.sh
#   CHROME_HEADLESS=1 ./start-chrome-debug.sh
#   CHROME_DEBUG_PORT=9333 ./start-chrome-debug.sh
#   CHROME_NO_SANDBOX=1 ./start-chrome-debug.sh
#
# 环境变量：
#   CHROME_DEBUG_PORT    默认 9222
#   CHROME_DEBUG_PROFILE 默认 ~/.chrome-debug-profile
#   CHROME_HEADLESS      1 = 无头模式，默认 0
#   CHROME_NO_SANDBOX    1 = 加 --no-sandbox（root/容器中可能需要）
#   CHROME_WINDOW_SIZE   默认 1440,900
#
# 停止：
#   kill "$(cat /tmp/chrome-debug.pid)"
#

set -euo pipefail

PORT="${CHROME_DEBUG_PORT:-9222}"
PROFILE="${CHROME_DEBUG_PROFILE:-$HOME/.chrome-debug-profile}"
HEADLESS="${CHROME_HEADLESS:-0}"
NO_SANDBOX="${CHROME_NO_SANDBOX:-0}"
WINDOW_SIZE="${CHROME_WINDOW_SIZE:-1440,900}"
LOG_FILE="${CHROME_LOG_FILE:-/tmp/chrome-debug.log}"
PID_FILE="${CHROME_PID_FILE:-/tmp/chrome-debug.pid}"

find_chrome() {
  for bin in google-chrome google-chrome-stable chromium chromium-browser; do
    if command -v "$bin" >/dev/null 2>&1; then
      echo "$bin"
      return 0
    fi
  done
  return 1
}

CHROME_BIN="$(find_chrome || true)"
if [ -z "$CHROME_BIN" ]; then
  echo "错误：找不到 Chrome/Chromium。请先安装 Google Chrome。" >&2
  echo "参考：sudo apt install -y ./google-chrome-stable_current_amd64.deb" >&2
  exit 1
fi

# 如果端口已经可用，直接返回成功
if curl -fsS "http://127.0.0.1:${PORT}/json/version" >/dev/null 2>&1; then
  echo "Chrome 调试端点已经在运行：http://127.0.0.1:${PORT}"
  curl -fsS "http://127.0.0.1:${PORT}/json/version" | head -c 500
  echo
  exit 0
fi

mkdir -p "$PROFILE"

ARGS=(
  "--remote-debugging-port=${PORT}"
  "--remote-allow-origins=*"
  "--user-data-dir=${PROFILE}"
  "--no-first-run"
  "--no-default-browser-check"
  "--disable-background-networking"
  "--window-size=${WINDOW_SIZE}"
)

if [ "$HEADLESS" = "1" ]; then
  ARGS+=("--headless=new" "--disable-gpu")
fi

if [ "$NO_SANDBOX" = "1" ] || [ "$(id -u)" = "0" ]; then
  ARGS+=("--no-sandbox")
  echo "警告：启用了 --no-sandbox（仅建议在 WSL/容器开发环境使用）。" >&2
fi

echo "Chrome：$CHROME_BIN"
echo "端口：$PORT"
echo "Profile：$PROFILE"
echo "无头：$HEADLESS"
echo "日志：$LOG_FILE"

"$CHROME_BIN" "${ARGS[@]}" about:blank >"$LOG_FILE" 2>&1 &
CHROME_PID=$!
echo "$CHROME_PID" > "$PID_FILE"

for _ in $(seq 1 60); do
  if curl -fsS "http://127.0.0.1:${PORT}/json/version" >/dev/null 2>&1; then
    echo "Chrome 调试端点已就绪：http://127.0.0.1:${PORT}"
    echo "PID：$CHROME_PID（已写入 $PID_FILE）"
    exit 0
  fi
  if ! kill -0 "$CHROME_PID" >/dev/null 2>&1; then
    echo "错误：Chrome 进程已退出。日志如下：" >&2
    tail -n 50 "$LOG_FILE" >&2 || true
    exit 1
  fi
  sleep 0.5
done

echo "错误：等待 Chrome 调试端点超时（30 秒）。日志：" >&2
tail -n 50 "$LOG_FILE" >&2 || true
kill "$CHROME_PID" >/dev/null 2>&1 || true
exit 1
