#!/bin/sh
set -eu

# Extract name and version from package.json using jq
NAME=$(jq -r '.name' package.json)
VERSION=$(get-version)

# Resolve the base domain (and this worker's subdomain), then deploy onto the
# custom domain via `--domain`. This keeps the real domain out of versioned files
# — committed wrangler.jsonc has no routes, and the base domain is passed as the
# DOMAIN var at runtime.
#
# The domain comes from the RECFLARE_DOMAIN env var. For local dev that's set in a
# gitignored .env at the repo root; in CI it's an exported secret. An already-set
# RECFLARE_DOMAIN wins and skips the file. Per-app subdomain overrides come from
# RECFLARE_SUBDOMAINS (a JSON object, e.g. {"playersettings":"settings"}).
if [ -z "${RECFLARE_DOMAIN:-}" ]; then
	ENV_FILE="$(git rev-parse --show-toplevel)/.env"
	if [ -f "$ENV_FILE" ]; then
		set -a
		. "$ENV_FILE"
		set +a
	fi
fi

if [ -z "${RECFLARE_DOMAIN:-}" ]; then
	echo "error: RECFLARE_DOMAIN is not set — export it or add it to .env (see .env.example)" >&2
	exit 1
fi

DOMAIN="$RECFLARE_DOMAIN"
SUBDOMAINS_JSON=${RECFLARE_SUBDOMAINS:-}
[ -n "$SUBDOMAINS_JSON" ] || SUBDOMAINS_JSON='{}'

DIR=$(basename "$PWD")
# Per-app subdomain override, falling back to the worker's directory name.
SUBDOMAIN=$(printf '%s' "$SUBDOMAINS_JSON" | jq -r --arg d "$DIR" '.[$d] // $d')
HOST="$SUBDOMAIN.$DOMAIN"

# Resolve this worker's D1 database id from RECFLARE_D1 (a JSON object keyed by
# the worker's directory name) and splice it into a generated config. The
# committed wrangler.jsonc carries a "local" placeholder so it needs no
# per-developer edits; the real id stays in the gitignored .env / CI secrets.
# Workers without a D1 binding simply have no placeholder to replace.
CONFIG="wrangler.jsonc"
if grep -q '"database_id": *"local"' wrangler.jsonc 2>/dev/null; then
	D1_JSON=${RECFLARE_D1:-}
	[ -n "$D1_JSON" ] || D1_JSON='{}'
	DB_ID=$(printf '%s' "$D1_JSON" | jq -r --arg d "$DIR" '.[$d] // empty')
	if [ -z "$DB_ID" ]; then
		echo "error: no D1 id for '$DIR' in RECFLARE_D1 — add it to .env (see .env.example)" >&2
		exit 1
	fi
	CONFIG="wrangler.generated.jsonc"
	# Generated alongside the original so its relative paths (main, migrations_dir)
	# still resolve. Gitignored; removed on exit so `wrangler dev` is unaffected.
	trap 'rm -f wrangler.generated.jsonc' EXIT
	sed -E 's/("database_id"[[:space:]]*:[[:space:]]*")[^"]*(")/\1'"$DB_ID"'\2/' \
		wrangler.jsonc >wrangler.generated.jsonc
fi

# Deploy with wrangler using the extracted values as binding variables
echo "Deploying worker $NAME version $VERSION to $HOST"
wrangler deploy \
	--config "$CONFIG" \
	--var NAME:"$NAME" \
	--var SENTRY_RELEASE:"$VERSION" \
	--var DOMAIN:"$DOMAIN" \
	--domain "$HOST" \
	--minify \
	"$@"
