#!/bin/bash
# ─────────────────────────────────────────────────────────────────────────────
# backup-pg.sh — Backup quotidien de la BDD PostgreSQL d'IliaCloud
#
# Usage : ./backup-pg.sh
# Cron  : 0 3 * * * /home/ubuntu/iliacloud/scripts/backup-pg.sh >> /home/ubuntu/backups/backup.log 2>&1
# ─────────────────────────────────────────────────────────────────────────────

set -euo pipefail

# ── Configuration ────────────────────────────────────────────────────────────
BACKUP_DIR="/home/ubuntu/backups"
RETENTION_DAYS=7
DB_NAME="iliacloud"
DB_USER="iliacloud"
CONTAINER_NAME=$(docker ps --format '{{.Names}}' | grep '^iliacloud_postgres\.' | head -1)
TIMESTAMP=$(date +%Y-%m-%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/iliacloud_${TIMESTAMP}.sql.gz"

# Webhook Discord (laisser vide pour desactiver)
DISCORD_WEBHOOK_URL="https://discord.com/api/webhooks/1489043276341186611/D3DXHancMuUs_6WLv0pn3n27tHmgFfll8R7nbwMC0dIPdXyE4J4tIRmm2LxirHd_VSeT"

# ── Fonctions ────────────────────────────────────────────────────────────────

send_alert() {
  local message="$1"
  if [ -n "$DISCORD_WEBHOOK_URL" ]; then
    curl -s -H "Content-Type: application/json" \
      -d "{\"content\": \"$message\"}" \
      "$DISCORD_WEBHOOK_URL" > /dev/null 2>&1 || true
  fi
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] $message"
}

# ── Backup ───────────────────────────────────────────────────────────────────

mkdir -p "$BACKUP_DIR"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Debut backup PostgreSQL..."

if [ -z "$CONTAINER_NAME" ]; then
  send_alert "🚨 **Backup ECHOUE** — Conteneur PostgreSQL introuvable"
  exit 1
fi

# pg_dump depuis le conteneur Docker, compresse avec gzip
if docker exec "$CONTAINER_NAME" pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "$BACKUP_FILE"; then
  SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup OK : $BACKUP_FILE ($SIZE)"
  send_alert "✅ **Backup OK** — iliacloud_${TIMESTAMP}.sql.gz ($SIZE)"
else
  send_alert "🚨 **Backup ECHOUE** — pg_dump a echoue"
  rm -f "$BACKUP_FILE"
  exit 1
fi

# ── Rotation ─────────────────────────────────────────────────────────────────

DELETED=$(find "$BACKUP_DIR" -name "iliacloud_*.sql.gz" -mtime +"$RETENTION_DAYS" -print -delete | wc -l)
if [ "$DELETED" -gt 0 ]; then
  echo "[$(date '+%Y-%m-%d %H:%M:%S')] Rotation : $DELETED ancien(s) backup(s) supprime(s)"
fi

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backups presents :"
ls -lh "$BACKUP_DIR"/iliacloud_*.sql.gz 2>/dev/null || echo "  (aucun)"

echo "[$(date '+%Y-%m-%d %H:%M:%S')] Backup termine."
