#!/usr/bin/env bash
# generate-sdk.sh — Generate the @orchard9/rdev-sdk TypeScript SDK from the embedded OpenAPI spec.
# No server, DB, or K8s needed. The spec is exported directly from the Go binary.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT="$SCRIPT_DIR/.."
SDK_DIR="$ROOT/sdk"

# 1. Check speakeasy is installed
if ! command -v speakeasy &>/dev/null; then
  echo "speakeasy CLI not found. Installing..."
  if command -v brew &>/dev/null; then
    brew install speakeasy-api/speakeasy/speakeasy
  else
    # Install to ~/.local/bin (no sudo needed)
    mkdir -p "$HOME/.local/bin"
    curl -fsSL https://raw.githubusercontent.com/speakeasy-api/speakeasy/main/install.sh \
      | INSTALL_DIR="$HOME/.local/bin" sh
    export PATH="$HOME/.local/bin:$PATH"
  fi
fi

# 2. Export the OpenAPI spec (no server needed — pure Go, no external deps)
echo "Exporting OpenAPI spec..."
go run "$ROOT/cmd/rdev-api" --export-openapi > "$SDK_DIR/openapi.json"
echo "  -> $SDK_DIR/openapi.json"

# 3. Validate the spec
echo "Validating spec..."
speakeasy validate openapi -s "$SDK_DIR/openapi.json"

# 4. Generate the TypeScript SDK
echo "Generating TypeScript SDK..."
speakeasy generate sdk \
  --schema "$SDK_DIR/openapi.json" \
  --lang typescript \
  --out "$SDK_DIR/typescript" \
  --config "$SDK_DIR/.speakeasy/gen.yaml"

# 5. Install dependencies and build
echo "Building SDK..."
cd "$SDK_DIR/typescript"
npm install
npm run build

echo ""
echo "Done! SDK generated at sdk/typescript/"
echo "Test with: cd sdk/typescript && npm pack --dry-run"
