#!/usr/bin/env bash
set -euo pipefail
VOL="pvc-f6714be0-39b1-47e6-baa2-2e1ae801d907"
SNAP="kube-bot-test-20260608230303"
BACKUP="${VOL}-${SNAP}"
echo '--- snapshot status ---'
sudo -n /usr/local/bin/kubectl -n longhorn-system get snapshot.longhorn.io "${SNAP}" -o jsonpath='ready={.status.readyToUse} error={.status.error} size={.status.size} creation={.status.creationTime}{"\n"}'
cat >/tmp/backup-cr.yaml <<YAML
apiVersion: longhorn.io/v1beta2
kind: Backup
metadata:
  name: ${BACKUP}
  namespace: longhorn-system
  labels:
    kube-bot-test: "true"
    backup-test-volume: "hf-matomo-matomo-pvc"
spec:
  snapshotName: ${SNAP}
  labels:
    kube-bot-test: "true"
    source-pvc: hf-matomo/matomo-pvc
YAML

echo '--- create backup with retries ---'
for i in $(seq 1 6); do
  echo "apply attempt ${i}"
  if sudo -n /usr/local/bin/kubectl apply -f /tmp/backup-cr.yaml; then
    break
  fi
  sleep 10
done
sudo -n /usr/local/bin/kubectl -n longhorn-system get backup.longhorn.io "${BACKUP}" >/dev/null

echo "BACKUP=${BACKUP}"
echo '--- wait backup completed ---'
for i in $(seq 1 120); do
  sudo -n /usr/local/bin/kubectl -n longhorn-system get backup.longhorn.io "${BACKUP}" -o jsonpath='state={.status.state} progress={.status.progress} size={.status.size} error={.status.error} url={.status.url}{"\n"}' 2>/dev/null || true
  state=$(sudo -n /usr/local/bin/kubectl -n longhorn-system get backup.longhorn.io "${BACKUP}" -o jsonpath='{.status.state}' 2>/dev/null || true)
  [ "${state}" = "Completed" ] && break
  [ "${state}" = "Error" ] && exit 3
  sleep 5
done

echo '--- final backup compact ---'
sudo -n /usr/local/bin/kubectl -n longhorn-system get backup.longhorn.io "${BACKUP}" -o jsonpath='name={.metadata.name}{"\n"}state={.status.state}{"\n"}progress={.status.progress}{"\n"}size={.status.size}{"\n"}url={.status.url}{"\n"}error={.status.error}{"\n"}'
echo '--- backup target files top ---'
sudo -n /usr/bin/find /srv/longhorn-backup-staging -maxdepth 5 -type f | sed -n '1,120p'
echo '--- staging usage ---'
df -hT /srv/longhorn-backup-staging
