#!/usr/bin/env bash
# Respaldo comprimido de la base (usa DATABASE_URL del .env). Conserva 14 días.
# Uso: bash scripts/backup.sh [etiqueta]   → backups/db-AAAAMMDD-HHMM[-etiqueta].sql.gz
# Restaurar: gunzip -c backups/ARCHIVO.sql.gz | psql "$DATABASE_URL"   (o con docker, ver README)
set -euo pipefail
cd "$(dirname "$0")/.."
[ -f .env ] && { set -a; . ./.env; set +a; }
: "${DATABASE_URL:?Falta DATABASE_URL en .env}"
mkdir -p backups
FILE="backups/db-$(date +%Y%m%d-%H%M)${1:+-$1}.sql.gz"
if command -v pg_dump >/dev/null 2>&1; then
  pg_dump --no-owner "$DATABASE_URL" | gzip > "$FILE"
else
  # Sin pg_dump instalado: se usa el de una imagen de Postgres (sirve para bases 12 a 17).
  docker run --rm --network host postgres:17-alpine pg_dump --no-owner "$DATABASE_URL" | gzip > "$FILE"
fi
[ "$(gzip -cd "$FILE" | head -c 100 | wc -c)" -gt 0 ] || { echo "El respaldo salió vacío: revisá DATABASE_URL"; rm -f "$FILE"; exit 1; }
find backups -name 'db-*.sql.gz' -mtime +14 -delete
echo "$(date) respaldo ok: $FILE ($(du -h "$FILE" | cut -f1))"
