#!/bin/bash
#
# Publishes the CLI as "canary-dolphin-swimsuit" to npm without
# modifying the working tree. Works from a disposable temp copy.
#
# Usage:
#   ./scripts/publish-canary.sh          # publish current version
#   ./scripts/publish-canary.sh patch    # bump patch version first
#   ./scripts/publish-canary.sh minor    # bump minor version first
#   ./scripts/publish-canary.sh 0.3.1    # set explicit version
#

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
CLI_DIR="$(dirname "$SCRIPT_DIR")"
TMP_DIR=$(mktemp -d)

cleanup() { rm -rf "$TMP_DIR"; }
trap cleanup EXIT

echo "==> Copying CLI to temp directory..."
cp -r "$CLI_DIR/" "$TMP_DIR/"
cd "$TMP_DIR"

echo "==> Rewriting package for canary-dolphin-swimsuit..."
sed -i '' 's/"name": "consortium"/"name": "canary-dolphin-swimsuit"/' package.json
sed -i '' 's/"consortium-cli": ".\/bin\/consortium.mjs"/"consortium-dev": ".\/bin\/consortium.mjs"/' package.json

# Point all URLs at staging
find src scripts -type f \( -name '*.ts' -o -name '*.cjs' -o -name '*.mjs' \) -exec \
    sed -i '' -e "s|https://api.consortium.dev|https://api-staging.consortium.dev|g" \
              -e "s|https://app.consortium.dev|https://staging.consortium.dev|g" {} +

# Set version — default to timestamp-based prerelease
if [ "${1:-}" != "" ]; then
    case "$1" in
        patch|minor|major)
            npm version "$1" --no-git-tag-version
            ;;
        *)
            npm version "$1" --no-git-tag-version
            ;;
    esac
else
    CURRENT=$(node -p "require('./package.json').version")
    npm version "${CURRENT}-canary.$(date +%Y%m%d%H%M%S)" --no-git-tag-version
fi

echo "==> Building..."
npm run build

echo "==> Publishing to npm..."
npm publish

VERSION=$(node -p "require('./package.json').version")
echo ""
echo "==> Published canary-dolphin-swimsuit@$VERSION"
echo "    Install: npx canary-dolphin-swimsuit@latest"
echo "    Server:  https://api-staging.consortium.dev"
