#!/usr/bin/env bash
# gpu-pause — stop the active vast.ai instance (storage preserved, compute billing stops)
# Roll OpenCode back to Host A so it doesn't hit a dead tunnel.

set -euo pipefail
STATE_FILE=/var/lib/specker/vast-current.json
OPENCODE_CONFIG=/home/opencode/.config/opencode/opencode.json
OPENCODE_BACKUP=${OPENCODE_CONFIG}.host-a-backup
PATH="/root/.local/bin:$PATH"

[[ -f $STATE_FILE ]] || { echo "[!] no active instance (no state file)"; exit 1; }
INSTANCE_ID=$(jq -r '.instance_id' "$STATE_FILE")
CURRENT_STATE=$(jq -r '.state // "running"' "$STATE_FILE")
[[ "$CURRENT_STATE" == "running" ]] || { echo "[!] instance state is '$CURRENT_STATE', not 'running' — nothing to pause"; exit 1; }

echo "[*] stopping vast.ai instance $INSTANCE_ID (storage preserved) ..."
yes | vastai stop instance "$INSTANCE_ID" 2>&1 | head -5
echo "[+] stop requested (vast.ai will fully stop the container in ~10-30s)"

# update state
TMP=$(mktemp)
jq '. + {state: "paused", paused_at: now | todateiso8601}' "$STATE_FILE" > "$TMP" && mv "$TMP" "$STATE_FILE"

# roll opencode back to Host A so it doesn't keep hitting dead :11440
if [[ -f $OPENCODE_BACKUP ]]; then
  cp "$OPENCODE_BACKUP" "$OPENCODE_CONFIG"
  chown opencode:opencode "$OPENCODE_CONFIG"
  chmod 0640 "$OPENCODE_CONFIG"
  systemctl restart opencode-server.service
  echo "[+] opencode rolled back to Host A while paused"
else
  echo "[!] no Host A backup — opencode.json left as-is (it will fail until resumed)"
fi

echo "==================================================================="
echo "  gpu-pause complete"
echo "    instance:   $INSTANCE_ID (paused, storage retained)"
echo "    cost now:   ~\$0.001-0.005/h (storage only)"
echo "    resume:     gpu-resume"
echo "    destroy:    gpu-down  (irreversible — loses storage)"
echo "==================================================================="
