#!/usr/bin/env bash
# 在 GCP VM 上執行（專案已含 whip-proxy 目錄時）
#   cd /var/www/live.gp777s.com/whip-proxy && bash install-on-gcp.sh
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"

if ! command -v node >/dev/null 2>&1; then
  echo "錯誤：未安裝 Node.js"
  exit 1
fi

if ! command -v pm2 >/dev/null 2>&1; then
  echo "錯誤：未安裝 pm2，請先執行: sudo npm install -g pm2"
  exit 1
fi

if [[ ! -w . ]]; then
  echo "錯誤：目前使用者無法寫入 $SCRIPT_DIR"
  echo "請先執行（把 USER 換成你的帳號，例如 je4122731）："
  echo "  sudo chown -R \$(whoami):\$(whoami) $SCRIPT_DIR"
  exit 1
fi

if [[ -d node_modules ]] && [[ ! -w node_modules ]]; then
  echo "[whip-proxy] node_modules 權限異常，請先："
  echo "  sudo chown -R \$(whoami):\$(whoami) $SCRIPT_DIR"
  echo "  rm -rf $SCRIPT_DIR/node_modules"
  exit 1
fi

if [[ -f package-lock.json ]]; then
  echo "[whip-proxy] npm ci ..."
  npm ci --omit=dev
else
  echo "[whip-proxy] 無 package-lock.json，改用 npm install ..."
  npm install --omit=dev
fi

if [[ ! -f .env ]]; then
  cp .env.example .env
  echo "[whip-proxy] 已建立 .env，請確認 CF_STREAM_HOST / PUBLIC_ORIGIN"
fi

if ss -lntp 2>/dev/null | grep -q ':8787 '; then
  echo "[whip-proxy] 警告：8787 已被佔用，嘗試釋放 ..."
  fuser -k 8787/tcp 2>/dev/null || true
  sleep 1
fi

if pm2 describe whip-proxy >/dev/null 2>&1; then
  echo "[whip-proxy] 重啟 pm2 process ..."
  pm2 delete whip-proxy 2>/dev/null || true
fi

echo "[whip-proxy] 啟動 pm2 process ..."
pm2 start server.js --name whip-proxy --cwd "$SCRIPT_DIR"

pm2 save

echo "[whip-proxy] 健康檢查 ..."
sleep 2
if ! curl -sf "http://127.0.0.1:${PORT:-8787}/health"; then
  echo ""
  echo "[whip-proxy] 健康檢查失敗，請查看： pm2 logs whip-proxy --lines 30"
  exit 1
fi
echo ""
echo "[whip-proxy] 完成。請確認 Nginx 已反代到 127.0.0.1:8787"
