#!/usr/bin/env bash
# ============================================================
# Disaster-recovery database backup (complements the in-app
# restore points, which cover day-to-day content rollbacks).
#
# Dumps the whole database, gzips it, keeps the last 30 days.
# Schedule it on the server with cron, e.g. daily at 03:00:
#   0 3 * * *  /path/to/funfrock/backup-db.sh >> storage/logs/backup.log 2>&1
#
# Restore a dump:
#   gunzip < storage/backups/db-YYYY-MM-DD_HHMMSS.sql.gz | mysql -u <user> -p <database>
# ============================================================
set -euo pipefail
cd "$(dirname "$0")"

env_val() { grep -E "^$1=" .env | head -n1 | cut -d= -f2- | tr -d '"'; }

DB_DATABASE="$(env_val DB_DATABASE)"
DB_USERNAME="$(env_val DB_USERNAME)"
DB_PASSWORD="$(env_val DB_PASSWORD)"
DB_HOST="$(env_val DB_HOST)"; DB_HOST="${DB_HOST:-127.0.0.1}"

DIR="storage/backups"
mkdir -p "$DIR"
FILE="$DIR/db-$(date +%Y-%m-%d_%H%M%S).sql.gz"

echo "→ Dumping ${DB_DATABASE}…"
mysqldump --no-tablespaces --single-transaction --quick \
  -h "$DB_HOST" -u "$DB_USERNAME" -p"$DB_PASSWORD" "$DB_DATABASE" | gzip > "$FILE"
echo "✓ Saved $FILE"

find "$DIR" -name 'db-*.sql.gz' -mtime +30 -delete
echo "✓ Pruned dumps older than 30 days"
