#!/bin/bash
#
# Sauvegarde quotidienne de la base SQLite de prod (handipartner).
# - copie horodatée + compressée, dans un dossier SŒUR de l'app (hors webroot,
#   hors rsync de déploiement) : jamais écrasée par un déploiement ;
# - rétention 30 jours (les archives plus vieilles sont purgées) ;
# - « hot backup » via sqlite3 si dispo (cohérent même si une écriture est en cours),
#   sinon copie simple.
#
# À appeler par une tâche cron OVH, 1×/jour. Idempotent, sans effet de bord.
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
DB="$SCRIPT_DIR/database/database.sqlite"
DEST="$SCRIPT_DIR/../backups-handipartner"      # dossier sœur, hors app
RETENTION_DAYS=30

if [ ! -f "$DB" ]; then
    echo "ERREUR : base introuvable ($DB)" >&2
    exit 1
fi

mkdir -p "$DEST"
TS="$(date +%Y%m%d-%H%M%S)"
OUT="$DEST/database-$TS.sqlite"

if command -v sqlite3 >/dev/null 2>&1; then
    sqlite3 "$DB" ".backup '$OUT'"
else
    cp "$DB" "$OUT"
fi

gzip -f "$OUT"

# Purge des sauvegardes de plus de RETENTION_DAYS jours.
find "$DEST" -name 'database-*.sqlite.gz' -type f -mtime "+$RETENTION_DAYS" -delete 2>/dev/null || true

echo "Sauvegarde OK : ${OUT}.gz ($(ls -1 "$DEST"/database-*.sqlite.gz 2>/dev/null | wc -l | tr -d ' ') archives conservées)"
