#!/usr/bin/env bash
set -Eeuo pipefail
VERSION="${1:-}"
[ -n "$VERSION" ] || { echo "usage: $0 VERSION [OUTPUT.tar.gz]" >&2; exit 2; }
case "$VERSION" in *[!A-Za-z0-9._-]*|'') echo 'invalid release version' >&2; exit 2;; esac
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
OUTPUT="${2:-$ROOT/Core-$VERSION.tar.gz}"
TMP="$(mktemp -d)"
cleanup() { rm -rf "$TMP"; }
trap cleanup EXIT
SOURCE="$TMP/$VERSION"
mkdir -p "$SOURCE"
for asset in core ingest deploy endpoint storage docker-compose.yml .env.example install.sh; do
  cp -a "$ROOT/$asset" "$SOURCE/"
done

CORE_CAST_SOURCE="${CORE_CAST_SOURCE:-$ROOT/../core-cast}"
[ -d "$CORE_CAST_SOURCE/app" ] || { echo "Core Cast source not found: $CORE_CAST_SOURCE" >&2; exit 2; }
mkdir -p "$SOURCE/modules/core-cast"
for asset in app requirements.txt Dockerfile docker-entrypoint.sh; do
  [ -e "$CORE_CAST_SOURCE/$asset" ] || { echo "Core Cast runtime asset missing: $asset" >&2; exit 2; }
  cp -a "$CORE_CAST_SOURCE/$asset" "$SOURCE/modules/core-cast/"
done
find "$SOURCE" -type d -name __pycache__ -prune -exec rm -rf {} +
find "$SOURCE" -type f \( -name '*.pyc' -o -name '.DS_Store' \) -delete
SURROUNDCORE_INSTALL_ROOT="$TMP/install" SURROUNDCORE_DATA="$TMP/data" \
  python3 "$ROOT/deploy/surroundcore-update" manifest "$VERSION" "$SOURCE" >/dev/null
mkdir -p "$(dirname "$OUTPUT")"
tar -C "$TMP" -czf "$OUTPUT" "$VERSION"
printf '%s\n' "$OUTPUT"
