#!/usr/bin/env bash
set -euo pipefail
VOL="pvc-f6714be0-39b1-47e6-baa2-2e1ae801d907"
TS="$(date -u +%Y%m%d%H%M%S)"
SNAP="kube-bot-test-${TS}"
BACKUP="${VOL}-${SNAP}"
cat <<YAML | sudo -n /usr/local/bin/kubectl apply -f -
apiVersion: longhorn.io/v1beta2
kind: Snapshot
metadata:
  name: ${SNAP}
  namespace: longhorn-system
  labels:
    kube-bot-test: "true"
    backup-test-volume: "hf-matomo-matomo-pvc"
spec:
  volume: ${VOL}
  createSnapshot: true
  labels:
    kube-bot-test: "true"
    source-pvc: hf-matomo/matomo-pvc
YAML

echo "SNAPSHOT=${SNAP}"
echo '--- wait snapshot ready ---'
for i in $(seq 1 60); do
  line=$(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"}' 2>/dev/null || true)
  echo "check ${i}: ${line}"
  ready=$(sudo -n /usr/local/bin/kubectl -n longhorn-system get snapshot.longhorn.io "${SNAP}" -o jsonpath='{.status.readyToUse}' 2>/dev/null || true)
  [ "${ready}" = "true" ] && break
  sleep 5
done
ready=$(sudo -n /usr/local/bin/kubectl -n longhorn-system get snapshot.longhorn.io "${SNAP}" -o jsonpath='{.status.readyToUse}' 2>/dev/null || true)
if [ "${ready}" != "true" ]; then
  echo "Snapshot not ready, aborting backup creation" >&2
  exit 2
fi

cat <<YAML | sudo -n /usr/local/bin/kubectl apply -f -
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 "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 ---'
sudo -n /usr/local/bin/kubectl -n longhorn-system get backup.longhorn.io "${BACKUP}" -o yaml | sed -n '1,220p'
echo '--- backup target files ---'
sudo -n /usr/bin/find /srv/longhorn-backup-staging -maxdepth 4 -type f | sed -n '1,80p'
