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

PROJECT_ID="${FIREBASE_PROJECT:-gesproc2}"
APP_PORT="${APP_PORT:-3000}"
EXPORT_DIR=".firebase-emulator-data"

cp config/config.docker.js config/config.local.js
mkdir -p "$EXPORT_DIR"

wait_for_port() {
  local host="$1"
  local port="$2"
  local label="$3"
  local attempts="${4:-90}"

  for attempt in $(seq 1 "$attempts"); do
    if timeout 1 bash -c ":</dev/tcp/$host/$port" 2>/dev/null; then
      echo "$label ready on $host:$port"
      return 0
    fi
    sleep 1
  done

  echo "Timed out waiting for $label on $host:$port" >&2
  return 1
}

python3 -m http.server "$APP_PORT" --bind 0.0.0.0 &
APP_PID=$!
FIREBASE_PID=""

cleanup() {
  kill "$APP_PID" 2>/dev/null || true
  if [ -n "$FIREBASE_PID" ]; then
    kill "$FIREBASE_PID" 2>/dev/null || true
  fi
}
trap cleanup EXIT

IMPORT_ARGS=()
if [ -f "$EXPORT_DIR/firebase-export-metadata.json" ]; then
  IMPORT_ARGS+=(--import="$EXPORT_DIR")
fi

firebase emulators:start \
  --project "$PROJECT_ID" \
  --only auth,firestore,functions,storage \
  "${IMPORT_ARGS[@]}" \
  --export-on-exit="$EXPORT_DIR" &
FIREBASE_PID=$!

wait_for_port 127.0.0.1 9099 "Auth Emulator"
wait_for_port 127.0.0.1 8080 "Firestore Emulator"

FIREBASE_PROJECT="$PROJECT_ID" \
FIRESTORE_EMULATOR_HOST="127.0.0.1:8080" \
FIREBASE_AUTH_EMULATOR_HOST="127.0.0.1:9099" \
node tools/seed-emulator-user.cjs

wait "$FIREBASE_PID"
