#!/usr/bin/env bash
# Script de sauvegarde automatique de la base de données FailDaily (Docker OVH)
# À exécuter via cron sur le serveur.
#
# ⚠️ Ne hardcode jamais de mots de passe ici : on réutilise les variables
# d'environnement déjà injectées dans les conteneurs MySQL.

set -euo pipefail

BACKUP_DIR="${BACKUP_DIR:-/home/taaazzz/backups/faildaily}"
RETENTION_DAYS="${RETENTION_DAYS:-30}"
TIMESTAMP="$(date +%Y%m%d_%H%M%S)"

MYSQL_CONTAINER="${MYSQL_CONTAINER:-faildaily_db_ovh}"
MYSQL_DB_NAME="${MYSQL_DB_NAME:-faildaily}"

LOGS_MYSQL_CONTAINER="${LOGS_MYSQL_CONTAINER:-faildaily_logs_db_ovh}"
LOGS_MYSQL_DB_NAME="${LOGS_MYSQL_DB_NAME:-faildaily_logs}"

mkdir -p "$BACKUP_DIR"

main_out="$BACKUP_DIR/faildaily_${TIMESTAMP}.sql"
logs_out="$BACKUP_DIR/faildaily_logs_${TIMESTAMP}.sql"

echo "🗄️  Backup FailDaily: ${TIMESTAMP}"
echo "📁 Dossier: ${BACKUP_DIR}"

echo "⏳ Dump DB principale (${MYSQL_CONTAINER}:${MYSQL_DB_NAME})..."
docker exec "$MYSQL_CONTAINER" sh -lc \
  'test -n "${MYSQL_ROOT_PASSWORD:-}" && mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" \
    --routines --triggers --events \
    --single-transaction --quick --lock-tables=false \
    --default-character-set=utf8mb4 \
    "$0"' "$MYSQL_DB_NAME" > "$main_out"

echo "⏳ Dump DB logs (${LOGS_MYSQL_CONTAINER}:${LOGS_MYSQL_DB_NAME})..."
docker exec "$LOGS_MYSQL_CONTAINER" sh -lc \
  'test -n "${MYSQL_ROOT_PASSWORD:-}" && mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" \
    --routines --triggers --events \
    --single-transaction --quick --lock-tables=false \
    --default-character-set=utf8mb4 \
    "$0"' "$LOGS_MYSQL_DB_NAME" > "$logs_out"

echo "📦 Compression..."
gzip -f "$main_out"
gzip -f "$logs_out"

echo "🧹 Rotation (>${RETENTION_DAYS} jours)..."
find "$BACKUP_DIR" -name "faildaily_*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
find "$BACKUP_DIR" -name "faildaily_logs_*.sql.gz" -mtime +"$RETENTION_DAYS" -delete

echo "✅ Sauvegarde terminée: ${TIMESTAMP}"
