#!/bin/bash
# Launch Chrome with CDP (remote debugging) enabled.
# Usage: chrome-cdp [port]
#
# Chrome refuses --remote-debugging-port on its default data directory.
# We create a separate data dir with a symlink to the user's real profile,
# so Chrome thinks it's non-default but uses the same cookies/extensions.

PORT="${1:-9222}"
CHROME="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
REAL_PROFILE="$HOME/Library/Application Support/Google/Chrome"
CDP_DATA_DIR="$HOME/.gstack/cdp-profile/chrome"

if ! [ -f "$CHROME" ]; then
  echo "Chrome not found at $CHROME" >&2
  exit 1
fi

# Check if Chrome is running
if pgrep -f "Google Chrome" >/dev/null 2>&1; then
  echo "Chrome is still running. Quitting..."
  osascript -e 'tell application "Google Chrome" to quit' 2>/dev/null

  # Wait for it to fully exit
  for i in $(seq 1 20); do
    pgrep -f "Google Chrome" >/dev/null 2>&1 || break
    sleep 0.5
  done

  if pgrep -f "Google Chrome" >/dev/null 2>&1; then
    echo "Chrome won't quit. Force-killing..." >&2
    pkill -f "Google Chrome"
    sleep 1
  fi
fi

# Set up CDP data dir with symlinked profile
# Chrome requires a "non-default" data dir for --remote-debugging-port.
# We symlink the real Default profile so cookies/extensions carry over.
mkdir -p "$CDP_DATA_DIR"
if [ -d "$REAL_PROFILE/Default" ] && ! [ -e "$CDP_DATA_DIR/Default" ]; then
  ln -s "$REAL_PROFILE/Default" "$CDP_DATA_DIR/Default"
  echo "Linked real Chrome profile into CDP data dir"
fi
# Also link Local State (contains crypto keys for cookie decryption, etc.)
if [ -f "$REAL_PROFILE/Local State" ] && ! [ -e "$CDP_DATA_DIR/Local State" ]; then
  ln -s "$REAL_PROFILE/Local State" "$CDP_DATA_DIR/Local State"
fi

echo "Launching Chrome with CDP on port $PORT..."
"$CHROME" \
  --remote-debugging-port="$PORT" \
  --remote-debugging-address=127.0.0.1 \
  --remote-allow-origins="http://127.0.0.1:$PORT" \
  --user-data-dir="$CDP_DATA_DIR" \
  --restore-last-session &
disown

# Wait for CDP to be available
for i in $(seq 1 30); do
  if curl -s "http://127.0.0.1:$PORT/json/version" >/dev/null 2>&1; then
    echo "CDP ready on port $PORT"
    echo "Run: \$B connect chrome"
    exit 0
  fi
  sleep 1
done

echo "CDP not available after 30s." >&2
exit 1
