#!/usr/bin/env bash
#
# Save a timestamped snapshot before/after Node or Fly changes (rollback aid).
# Run from repo root. Uses only your local fly/flyctl authentication.
#
# Usage:
#   export FLY_APP=nodejs-small-wildflower-8030   # optional; default below
#   export NODE_REPO_DIR="$HOME/path/to/nodejs"   # optional; if set, runs git status + bundle
#   ./scripts/wi-node-fly-backup.sh
#
set -euo pipefail
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
BACKUP_ROOT="${ROOT}/scripts/node-live-backups"
STAMP="$(date +%Y%m%d-%H%M%S)"
OUT="${BACKUP_ROOT}/${STAMP}"
mkdir -p "${OUT}"

FLY_BIN="$(command -v fly || command -v flyctl || true)"
APP="${FLY_APP:-nodejs-small-wildflower-8030}"

{
  echo "stamp=${STAMP}"
  echo "host=$(hostname)"
  echo "user=$(whoami)"
  date -u
} > "${OUT}/meta.txt"

if [[ -n "${FLY_BIN}" ]]; then
  "${FLY_BIN}" version > "${OUT}/fly-version.txt" 2>&1 || true
  "${FLY_BIN}" status -a "${APP}" > "${OUT}/fly-status.txt" 2>&1 || true
  "${FLY_BIN}" releases -a "${APP}" --json > "${OUT}/fly-releases.json" 2>&1 || true
  "${FLY_BIN}" config show -a "${APP}" > "${OUT}/fly-config-show.txt" 2>&1 || true
else
  echo "fly/flyctl not in PATH — skipped Fly snapshot. Install: https://fly.io/docs/hands-on/install-flyctl/" > "${OUT}/fly-skipped.txt"
fi

if [[ -n "${NODE_REPO_DIR:-}" && -d "${NODE_REPO_DIR}/.git" ]]; then
  git -C "${NODE_REPO_DIR}" status -sb > "${OUT}/node-git-status.txt" 2>&1 || true
  git -C "${NODE_REPO_DIR}" rev-parse HEAD > "${OUT}/node-git-head.txt" 2>&1 || true
  git -C "${NODE_REPO_DIR}" bundle create "${OUT}/node-repo.bundle" --all 2>&1 || true
fi

echo "Backup written to: ${OUT}"
