#!/bin/bash
# ============================================================
# AFINET — Offsite backup push script
# Run via cron on the host: 0 */6 * * * /path/to/scripts/backup-offsite.sh
# ============================================================

set -euo pipefail

BACKUP_DIR="$(dirname "$0")/../backups"
LOG_FILE="$(dirname "$0")/../backups/backup.log"
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

# --- Load env vars from root .env ---
if [ -f "$(dirname "$0")/../.env" ]; then
  export $(grep -v '^#' "$(dirname "$0")/../.env" | xargs)
fi

# Required: set these in your root .env
# BACKUP_S3_BUCKET=s3://afinet-backups
# BACKUP_RCLONE_REMOTE=backblaze:afinet-backups   # alternative to S3
# BACKUP_RETENTION_DAYS=30

echo "[$TIMESTAMP] Starting offsite backup push..." >> "$LOG_FILE"

# Find the latest backup file
LATEST=$(ls -t "$BACKUP_DIR"/*.sql.gz 2>/dev/null | head -1)

if [ -z "$LATEST" ]; then
  echo "[$TIMESTAMP] ERROR: No backup files found in $BACKUP_DIR" >> "$LOG_FILE"
  exit 1
fi

FILENAME=$(basename "$LATEST")

# --- Option A: Push to AWS S3 ---
if [ -n "${BACKUP_S3_BUCKET:-}" ]; then
  aws s3 cp "$LATEST" "${BACKUP_S3_BUCKET}/$(date +%Y/%m)/${FILENAME}" \
    --storage-class STANDARD_IA \
    --no-progress
  echo "[$TIMESTAMP] Pushed $FILENAME to S3: ${BACKUP_S3_BUCKET}" >> "$LOG_FILE"
fi

# --- Option B: Push via rclone (Backblaze B2, GCS, etc.) ---
if [ -n "${BACKUP_RCLONE_REMOTE:-}" ]; then
  rclone copy "$LATEST" "${BACKUP_RCLONE_REMOTE}/$(date +%Y/%m)/" \
    --log-level INFO
  echo "[$TIMESTAMP] Pushed $FILENAME via rclone to ${BACKUP_RCLONE_REMOTE}" >> "$LOG_FILE"
fi

# --- Prune old offsite backups (S3 lifecycle rules handle this automatically) ---
# For rclone remotes, delete files older than BACKUP_RETENTION_DAYS
if [ -n "${BACKUP_RCLONE_REMOTE:-}" ] && [ -n "${BACKUP_RETENTION_DAYS:-}" ]; then
  rclone delete "${BACKUP_RCLONE_REMOTE}" \
    --min-age "${BACKUP_RETENTION_DAYS}d" \
    --log-level INFO
fi

echo "[$TIMESTAMP] Offsite backup push complete." >> "$LOG_FILE"
