#!/usr/bin/env bash
# block0 x402 client installer.
# Idempotent: safe to rerun, preserves ~/.block0/.env.
#
# Usage:
#   curl -fsSL <BLOCK0_URL>/client/install.sh | BLOCK0_URL=<host> bash
#   curl -fsSL <host>/client/install.sh | bash -s -- <host>
set -euo pipefail

# Resolve the base URL to fetch client files from: arg > env > fail.
BASE_URL="${1:-${BLOCK0_URL:-${SQLBLOCK_URL:-}}}"
if [ -z "$BASE_URL" ]; then
  echo "ERROR: set BLOCK0_URL or pass the host as \$1." >&2
  exit 1
fi
# Strip a trailing slash so concatenation is predictable.
BASE_URL="${BASE_URL%/}"

HOME_DIR="$HOME/.block0"
# Migrate a pre-existing ~/.sqlblock install (incl. funded wallet key) once.
if [ ! -d "$HOME_DIR" ] && [ -d "$HOME/.sqlblock" ]; then
  mv "$HOME/.sqlblock" "$HOME_DIR"
  echo "migrated ~/.sqlblock -> ~/.block0"
fi

CLIENT_DIR="$HOME_DIR/client"
mkdir -p "$CLIENT_DIR"
printf '.env\nclient/node_modules/\n' > "$HOME_DIR/.gitignore"

cd "$CLIENT_DIR"
[ -f package.json ] || npm init -y >/dev/null
npm pkg set type=module >/dev/null
npm install --save-exact @x402/fetch@2.15.0 @x402/core@2.15.0 @x402/evm@2.15.0 viem@2.46.0

# Pull the latest client code from the server (overwrites local copies).
curl -fsSL "$BASE_URL/client/wallet.mjs" -o wallet.mjs
curl -fsSL "$BASE_URL/client/query.mjs"  -o query.mjs

echo "block0 client installed to $CLIENT_DIR"
echo "Run: node wallet.mjs            # show wallet address + funding status"
echo "Run: node query.mjs --version   # verify install"
