#!/usr/bin/env bash
# start-browser-sync.sh — Start Harvey Browser Sync Server
# Checks if already running (PID file), starts in background.

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SERVER_SCRIPT="$SCRIPT_DIR/browser-sync-server.py"
PID_FILE="/tmp/harvey-browser-sync.pid"
LOG_FILE="/tmp/browser-sync.log"
PORT=7429

# ─── Check if already running ────────────────────────────────────────────────

if [ -f "$PID_FILE" ]; then
  OLD_PID=$(cat "$PID_FILE")
  if kill -0 "$OLD_PID" 2>/dev/null; then
    echo "Harvey Browser Sync already running (PID $OLD_PID)"
    echo "Log: $LOG_FILE"
    exit 0
  else
    echo "Stale PID file found ($OLD_PID), cleaning up..."
    rm -f "$PID_FILE"
  fi
fi

# ─── Check port not in use ───────────────────────────────────────────────────

if lsof -i "tcp:$PORT" -sTCP:LISTEN -t &>/dev/null; then
  echo "Port $PORT is already in use. Is something else running?"
  lsof -i "tcp:$PORT" -sTCP:LISTEN
  exit 1
fi

# ─── Check Python ────────────────────────────────────────────────────────────

PYTHON=$(command -v python3 || command -v python || echo "")
if [ -z "$PYTHON" ]; then
  echo "Error: python3 not found. Please install Python 3."
  exit 1
fi

# ─── Start server ────────────────────────────────────────────────────────────

echo "Starting Harvey Browser Sync on localhost:$PORT ..."
echo "Log: $LOG_FILE"
echo "PID file: $PID_FILE"

nohup "$PYTHON" "$SERVER_SCRIPT" >> "$LOG_FILE" 2>&1 &
NEW_PID=$!
echo $NEW_PID > "$PID_FILE"

# Wait a moment and verify it started
sleep 1
if kill -0 "$NEW_PID" 2>/dev/null; then
  echo "Server started successfully (PID $NEW_PID)"
else
  echo "Server failed to start. Check log: $LOG_FILE"
  rm -f "$PID_FILE"
  cat "$LOG_FILE" | tail -20
  exit 1
fi

# Quick health check
if command -v curl &>/dev/null; then
  HEALTH=$(curl -s --max-time 2 "http://localhost:$PORT/health" || echo "")
  if [ -n "$HEALTH" ]; then
    echo "Health check: $HEALTH"
  fi
fi

echo ""
echo "Harvey is now tracking your browsing context."
echo "Data flows to: ~/.openclaw/workspace/memory/browser-context.md"
