#!/usr/bin/env bash
# bin/railiance — thin dispatcher; subcommands live in tools/cmd/*
set -euo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
PATH="${ROOT}/tools/cmd:${PATH}"

usage() {
  cat <<'EOF'
Usage: bin/railiance <command> [args]

Commands:
  doctor        Check workstation & provisioning toolchains
  next          Show canonical first-time sequence
  plan-host     Provider-neutral host specs & checklist
  gen-ssh-key   Generate SSH key and show public part
  cloudinit     Emit minimal cloud-init user-data
  init-repo     Idempotently furnish repo housekeeping
  create-overlay Scaffold a Railiance overlay repo for an upstream app
  run           Run Stage 1 local validation from railiance/app.toml
  deploy        Plan/apply Stage 2 canary deployment
  observe       Plan/run Stage 2 observation checks
  promote       Plan/apply Stage 3 stable promotion
  rollback      Plan/apply rollback to previous stable
  deploy-triage-robustness
                Deploy ACTIVITY-WP-0016 and prove daily-triage validation
  admin-sync-smoke
                Run activity-core no-restart POST /admin/sync smoke
  build-spore   Build a distributable "Spore" bundle
  seed-local    Run the seed script on this machine
  checklist     Pre-VM checklist
  backup        Backup postgres + config to Nextcloud (age-encrypted)
  preflight     Pre-migration safety gate (must pass before cluster work)
  help          Show this help
EOF
}

cmd="${1:-help}"; shift || true

case "$cmd" in
  help) usage ;;
  doctor) exec railiance-doctor "$@" ;;
  plan-host) exec railiance-plan-host "$@" ;;
  gen-ssh-key)
    if ! command -v ssh-keygen >/dev/null 2>&1; then echo "Missing: ssh-keygen" >&2; exit 1; fi
    key="${HOME}/.ssh/id_ed25519"
    [[ -f "$key" ]] || ssh-keygen -t ed25519 -N "" -f "$key"
    echo "Public key:"; cat "${key}.pub"
    ;;
  cloudinit) cat "$ROOT/cloudinit/user-data.yaml" ;;
  init-repo) bash "$ROOT/tools/furnish_railiance_repo.sh" ;;
  create-overlay) bash "$ROOT/tools/create_railiance_overlay_repo.sh" "$@" ;;
  run) exec railiance-run "$@" ;;
  deploy) exec railiance-stage2 deploy "$@" ;;
  observe) exec railiance-stage2 observe "$@" ;;
  promote) exec railiance-stage3 promote "$@" ;;
  rollback) exec railiance-stage3 rollback "$@" ;;
  deploy-triage-robustness) exec railiance-deploy-activity-core-triage-robustness "$@" ;;
  admin-sync-smoke) exec railiance-admin-sync-smoke "$@" ;;
  build-spore) bash "$ROOT/tools/build_spore.sh" ;;
  seed-local) bash "$ROOT/tools/seed_node.sh" ;;
  checklist)
    cat <<'CK'
Rent-a-VM Checklist
-------------------
[ ] Provider account ready (billing set)
[ ] Region chosen (low latency to you/users)
[ ] Image: Ubuntu 24.04 LTS
[ ] Size: 2 vCPU / 4–8 GB RAM / 60+ GB SSD
[ ] SSH key uploaded (see gen-ssh-key)
[ ] Cloud-init pasted (see: bin/railiance cloudinit)
[ ] Hostname set (e.g., railiance-seed-1)
[ ] Record public IP / DNS
CK
    ;;
  next) cat "$ROOT/QUICKSTART.md" ;;
  backup)    exec railiance-backup    "$@" ;;
  preflight) exec railiance-preflight "$@" ;;
  *) echo "Unknown command: $cmd" >&2; usage; exit 2 ;;
esac
