#!/usr/bin/env bash
# ============================================================================
# backup.sh — Respaldo de la BD SQLite + imágenes subidas (ejecutar EN el VPS)
# ----------------------------------------------------------------------------
# Usa la API de backup online de better-sqlite3 (consistente aunque la app esté
# escribiendo, gracias a WAL) y empaqueta las imágenes. Rota: conserva 14 copias.
#
# Programar con cron (diario 3:15 AM):
#   crontab -e
#   15 3 * * * /var/www/peninsula/deploy/scripts/backup.sh >> /var/log/peninsula/backup.log 2>&1
# ============================================================================
set -euo pipefail

APP_DIR="${APP_DIR:-/var/www/peninsula}"
BACKUP_DIR="${BACKUP_DIR:-/var/backups/peninsula}"
KEEP="${KEEP:-14}"
STAMP="$(date +%Y%m%d-%H%M%S)"
DB_PATH="${PF_DB_PATH:-$APP_DIR/.data/peninsula.sqlite}"
UPLOADS_DIR="${PF_UPLOADS_DIR:-$APP_DIR/.data/uploads/products}"

mkdir -p "$BACKUP_DIR"
cd "$APP_DIR"

echo "[backup $STAMP] BD → $BACKUP_DIR/db-$STAMP.sqlite"
SRC="$DB_PATH" DST="$BACKUP_DIR/db-$STAMP.sqlite" node -e "
const Database = require('better-sqlite3');
const db = new Database(process.env.SRC, { readonly: true });
db.backup(process.env.DST).then(() => { db.close(); console.log('  ok'); })
  .catch((e) => { console.error('  error', e.message); process.exit(1); });
"

if [ -d "$UPLOADS_DIR" ]; then
  echo "[backup $STAMP] uploads → $BACKUP_DIR/uploads-$STAMP.tar.gz"
  tar -czf "$BACKUP_DIR/uploads-$STAMP.tar.gz" -C "$(dirname "$UPLOADS_DIR")" "$(basename "$UPLOADS_DIR")"
fi

echo "[backup $STAMP] Rotando (conservando $KEEP)"
ls -1t "$BACKUP_DIR"/db-*.sqlite 2>/dev/null      | tail -n +$((KEEP + 1)) | xargs -r rm -f
ls -1t "$BACKUP_DIR"/uploads-*.tar.gz 2>/dev/null | tail -n +$((KEEP + 1)) | xargs -r rm -f

echo "[backup $STAMP] ✔ completado"
