#!/bin/bash
# ════════════════════════════════════════════════════════════════
# Daily DB Backup script — schedule via cron
# Cron entry (jalan jam 02:00 setiap hari):
#   0 2 * * * /var/www/sarana-gemilang/backup.sh >> /var/log/sg-backup.log 2>&1
# ════════════════════════════════════════════════════════════════
set -e

BACKUP_DIR="/var/backups/sarana-gemilang"
RETENTION_DAYS=30                        # Simpan backup 30 hari
DB_NAME="sarana_gemilang"                # ← GANTI sesuai DATABASE_URL
DB_USER="postgres"                       # ← GANTI
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

mkdir -p "$BACKUP_DIR"

echo "[$(date)] Starting backup..."

# Dump + compress
pg_dump -U "$DB_USER" -F c "$DB_NAME" | gzip > "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz"

# Verify backup
if [ -s "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz" ]; then
  SIZE=$(du -h "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz" | cut -f1)
  echo "[$(date)] ✅ Backup OK: ${DB_NAME}_${TIMESTAMP}.sql.gz ($SIZE)"
else
  echo "[$(date)] ❌ Backup FAILED — file kosong!"
  exit 1
fi

# Cleanup backup lama (>30 hari)
find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" -mtime +$RETENTION_DAYS -delete

# Count file tersisa
COUNT=$(find "$BACKUP_DIR" -name "${DB_NAME}_*.sql.gz" | wc -l)
echo "[$(date)] Cleanup done. $COUNT backup files retained."

# Optional: upload ke S3/GCS untuk off-site backup
# aws s3 cp "$BACKUP_DIR/${DB_NAME}_${TIMESTAMP}.sql.gz" s3://your-bucket/sg-backup/