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

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd -- "$SCRIPT_DIR/.." && pwd)"
VALUE_FILE=""

readonly RUNTIME_ENV_NAMES=(
  AUTH_AUTHENTIK_ID
  AUTH_AUTHENTIK_SECRET
  AUTH_AUTHENTIK_ISSUER
  USESEND_API_KEY
  USESEND_URL
  USESEND_FROM_EMAIL
)
readonly DEPLOYMENT_ENV_NAMES=(
  CONVEX_SELF_HOSTED_URL
  CONVEX_SELF_HOSTED_ADMIN_KEY
)

die() { printf 'sync-local-convex-env: %s\n' "$*" >&2; exit 1; }
cleanup() {
  if [ -n "$VALUE_FILE" ] && [ -f "$VALUE_FILE" ]; then
    rm -f "$VALUE_FILE"
  fi
}
trap cleanup EXIT INT TERM HUP

for name in "${DEPLOYMENT_ENV_NAMES[@]}" "${RUNTIME_ENV_NAMES[@]}"; do
  [ -n "${!name:-}" ] || die "Missing required environment variable: $name"
done

VALUE_FILE="$(mktemp "${TMPDIR:-/tmp}/convex-monorepo-convex-env.value.XXXXXX")"
chmod 600 "$VALUE_FILE"

for name in "${RUNTIME_ENV_NAMES[@]}"; do
  printf '%s' "${!name}" > "$VALUE_FILE"
  (
    cd "$ROOT_DIR/packages/backend"
    env -u CONVEX_DEPLOY_KEY -u CONVEX_DEPLOYMENT \
      CONVEX_SELF_HOSTED_URL="$CONVEX_SELF_HOSTED_URL" \
      CONVEX_SELF_HOSTED_ADMIN_KEY="$CONVEX_SELF_HOSTED_ADMIN_KEY" \
      bunx convex env set "$name" --from-file "$VALUE_FILE" >/dev/null
  )
done

printf 'Local Convex runtime environment synchronized.\n'
