#!/usr/bin/env bash
# bingai-pass — full deploy script (Cloudflare Worker or Docker)
# Usage:
#   ./deploy.sh worker [worker-name]     # deploy as Cloudflare Worker
#   ./deploy.sh docker [port]            # run as Docker service (default port 7860)
set -euo pipefail

WASM_URL="https://github.com/Harry-zklcdc/go-bingai-pass/releases/latest/download/go-bingai-pass.wasm"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
MODE="${1:-}"

die() { echo "خطأ: $*" >&2; exit 1; }
need() { command -v "$1" >/dev/null 2>&1 || die "الأمر '$1' غير مثبّت"; }

prepare_workdir() {
  WORKDIR="$(pwd)/bingai-pass-build"
  rm -rf "$WORKDIR"
  cp -R "$SCRIPT_DIR" "$WORKDIR"
  rm -f "$WORKDIR/deploy.sh"
  cd "$WORKDIR"
  echo "مجلد العمل: $WORKDIR"
}

deploy_worker() {
  need curl; need npx
  local name="${2:-go-bingai-pass}"
  prepare_workdir

  echo "» تنزيل ملف WASM ..."
  curl -fL "$WASM_URL" -o cloudflare/go-bingai-pass.wasm
  [ -s cloudflare/go-bingai-pass.wasm ] || die "فشل تنزيل go-bingai-pass.wasm"

  # ضبط اسم الـ Worker لو مرّره المستخدم
  if [ "$name" != "go-bingai-pass" ]; then
    sed -i.bak "s/^name = .*/name = \"$name\"/" wrangler.toml && rm -f wrangler.toml.bak
  fi

  echo "» نشر الـ Worker ..."
  npx wrangler deploy --keep-vars --no-bundle

  echo
  echo "تم النشر. تأكد من النقطة:"
  echo "  curl https://$name.<subdomain>.workers.dev/gettoken"
}

deploy_docker() {
  need docker
  local port="${2:-7860}"
  prepare_workdir

  echo "» بناء وتشغيل الحاوية على البورت $port ..."
  if [ "$port" != "7860" ]; then
    sed -i.bak "s/7860:7860/$port:7860/" docker-compose.yml && rm -f docker-compose.yml.bak
  fi
  docker compose up -d --build

  echo "» انتظار جاهزية الخدمة ..."
  for i in $(seq 1 30); do
    if curl -fsS "http://localhost:$port/gettoken" >/dev/null 2>&1; then
      echo "الخدمة شغّالة: http://localhost:$port/gettoken"; exit 0
    fi
    sleep 2
  done
  die "الخدمة ما ردّت خلال المهلة — راجع: docker compose logs"
}

case "$MODE" in
  worker) deploy_worker "$@";;
  docker) deploy_docker "$@";;
  *) cat <<EOF
الاستخدام:
  ./deploy.sh worker [worker-name]   نشر كـ Cloudflare Worker
  ./deploy.sh docker [port]          تشغيل كخدمة Docker (افتراضي 7860)
EOF
     exit 1;;
esac
