#!/usr/bin/env bash
set -euo pipefail

echo "=== noVNC CAPTCHA 解決機能セットアップ ==="

# 1. システム依存パッケージのインストール
echo ""
echo "[1/5] システムパッケージをインストール中..."
sudo apt-get update -qq
sudo apt-get install -y -qq x11vnc websockify xvfb

# 2. 確認
echo ""
echo "[2/5] インストール確認..."
for cmd in Xvfb x11vnc websockify; do
  if which "$cmd" > /dev/null 2>&1; then
    echo "  ✓ $cmd: $(which "$cmd")"
  else
    echo "  ✗ $cmd: 見つかりません" >&2
    exit 1
  fi
done

# 3. @novnc/novnc npm パッケージ確認
echo ""
echo "[3/5] @novnc/novnc パッケージ確認..."
if node -e "require.resolve('@novnc/novnc/package.json')" 2>/dev/null; then
  echo "  ✓ @novnc/novnc: インストール済み"
else
  echo "  → npm install @novnc/novnc ..."
  npm install @novnc/novnc
fi

# 4. noVNC スタンドアロン (vnc.html を含む Web 配布物) を vendor/noVNC に配置
# npm の @novnc/novnc は lib のみで vnc.html を含まないため、
# Browser タブの iframe 用に GitHub から tarball を取得する。
echo ""
echo "[4/5] noVNC Web 配布物 (vendor/noVNC) 確認..."
NOVNC_VERSION="${NOVNC_VERSION:-1.6.0}"
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
VENDOR_DIR="$PROJECT_DIR/vendor"
NOVNC_DIR="$VENDOR_DIR/noVNC"
if [ -f "$NOVNC_DIR/vnc.html" ]; then
  echo "  ✓ vendor/noVNC/vnc.html: 配置済み"
else
  echo "  → noVNC v$NOVNC_VERSION を取得中..."
  mkdir -p "$VENDOR_DIR"
  TMP_TGZ="$(mktemp -t novnc.XXXXXX.tar.gz)"
  trap 'rm -f "$TMP_TGZ"' EXIT
  if ! curl -fSL "https://github.com/novnc/noVNC/archive/refs/tags/v${NOVNC_VERSION}.tar.gz" -o "$TMP_TGZ"; then
    echo "  ✗ noVNC tarball の取得に失敗しました" >&2
    exit 1
  fi
  rm -rf "$NOVNC_DIR"
  mkdir -p "$NOVNC_DIR"
  tar -xzf "$TMP_TGZ" -C "$NOVNC_DIR" --strip-components=1
  rm -f "$TMP_TGZ"
  trap - EXIT
  if [ -f "$NOVNC_DIR/vnc.html" ]; then
    echo "  ✓ vendor/noVNC/vnc.html: 配置完了"
  else
    echo "  ✗ vnc.html が見つかりません。配置に失敗しました" >&2
    exit 1
  fi
fi

# 5. config.yaml に captcha_solve 設定を追加（まだなければ）
echo ""
echo "[5/5] config.yaml 確認..."
CONFIG="$(cd "$(dirname "$0")/.." && pwd)/config.yaml"
if [ -f "$CONFIG" ]; then
  if grep -q "captcha_solve" "$CONFIG"; then
    echo "  ✓ captcha_solve 設定は既に存在します"
  else
    echo "  → browser セクションを追加中..."
    # browser セクションが存在するか確認
    if grep -q "^browser:" "$CONFIG"; then
      # 既存 browser セクションに追加
      sed -i '/^browser:/a\  captcha_solve: novnc\n  max_captcha_pages: 5' "$CONFIG"
    else
      # browser セクションを新規追加
      printf '\nbrowser:\n  captcha_solve: novnc\n  max_captcha_pages: 5\n' >> "$CONFIG"
    fi
    echo "  ✓ captcha_solve: novnc を追加しました"
  fi
else
  echo "  ⚠ config.yaml が見つかりません。config.yaml.example からコピーして設定してください"
fi

echo ""
echo "=== セットアップ完了 ==="
echo ""
echo "使い方:"
echo "  1. サーバーを再起動: npm start"
echo "  2. WebSearch を含むタスクを実行"
echo "  3. CAPTCHA 検出時、UI に黄色いバナーが表示されます"
echo "  4. 「noVNC で解決する」リンクをクリックしてブラウザ画面に接続"
echo "  5. CAPTCHA を手動で解決 → Cookie が保持され次回から再利用されます"
