#!/bin/sh
# Installs demetra-cli's bundled single-file release. Uploaded to the CLI
# CDN's bucket root by demetra-cli-release.yml, served at
# https://cli.<zone>/install.sh — and at the bare https://cli.<zone> too,
# via the CloudFront 403->install.sh rewrite (cli_cdn.py).
set -eu

CDN_HOST="${DEMETRA_CLI_CDN_HOST:-cli.dev.demetra.simetrik.com}"
INSTALL_DIR="${DEMETRA_CLI_INSTALL_DIR:-$HOME/.demetra/bin}"

if ! command -v node >/dev/null 2>&1; then
  echo "demetra-cli needs Node.js >= 20 on PATH. Install it first (e.g. https://nodejs.org), then re-run this script." >&2
  exit 1
fi

NODE_MAJOR=$(node -e 'console.log(process.versions.node.split(".")[0])')
if [ "$NODE_MAJOR" -lt 20 ]; then
  echo "demetra-cli needs Node.js >= 20, found $(node -v). Upgrade Node, then re-run this script." >&2
  exit 1
fi

TMP_DIR=$(mktemp -d)
trap 'rm -rf "$TMP_DIR"' EXIT

echo "Downloading demetra-cli (stable) from https://$CDN_HOST ..."
# `demetra` and `demetra.sha256` — the exact names demetra-cli-release.yml
# uploads (it renames the esbuild bundle before publishing), not the raw
# `demetra-bundled.mjs` build artifact name.
curl -fsSL "https://$CDN_HOST/cli/stable/demetra" -o "$TMP_DIR/demetra"
curl -fsSL "https://$CDN_HOST/cli/stable/demetra.sha256" -o "$TMP_DIR/demetra.sha256"

cd "$TMP_DIR"
if command -v sha256sum >/dev/null 2>&1; then
  sha256sum -c demetra.sha256
elif command -v shasum >/dev/null 2>&1; then
  shasum -a 256 -c demetra.sha256
else
  echo "no sha256sum or shasum found — cannot verify the download's integrity, refusing to install an unverified binary" >&2
  exit 1
fi

mkdir -p "$INSTALL_DIR"
cp demetra "$INSTALL_DIR/demetra"
chmod +x "$INSTALL_DIR/demetra"

echo "Installed demetra to $INSTALL_DIR/demetra"
case ":$PATH:" in
  *":$INSTALL_DIR:"*)
    echo "Run: demetra login"
    ;;
  *)
    echo "Add $INSTALL_DIR to your PATH, e.g.:"
    echo "  echo 'export PATH=\"$INSTALL_DIR:\$PATH\"' >> ~/.bashrc   # or ~/.zshrc"
    echo "Then run: demetra login"
    ;;
esac
