#!/bin/bash
# scripts/backup-mysql.sh - Backup automatique MySQL pour Docker Swarm
# Usage: ./backup-mysql.sh [retention_days]

set -e

# Configuration
BACKUP_DIR="${BACKUP_DIR:-/home/taaazzz/FailDaily/backups/mysql}"
RETENTION_DAYS="${1:-7}"  # Par défaut 7 jours
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${BACKUP_DIR}/faildaily_backup_${TIMESTAMP}.sql.gz"

# Couleurs
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'

echo -e "${YELLOW}🗄️  BACKUP MySQL FailDaily - $(date)${NC}"

# Créer répertoire backup si nécessaire
mkdir -p "$BACKUP_DIR"

# Récupérer le conteneur MySQL
MYSQL_CONTAINER=$(docker ps --filter "name=faildaily_mysql" --format "{{.ID}}" | head -n1)

if [ -z "$MYSQL_CONTAINER" ]; then
  echo -e "${RED}❌ Conteneur MySQL introuvable${NC}"
  exit 1
fi

# Récupérer le mot de passe root depuis le secret Docker
ROOT_PASS=$(docker exec "$MYSQL_CONTAINER" cat /run/secrets/mysql_root_password)

# Effectuer le dump (avec compression)
echo -e "${YELLOW}⏳ Dump en cours...${NC}"
docker exec "$MYSQL_CONTAINER" bash -c \
  "mysqldump -uroot -p'$ROOT_PASS' \
    --all-databases \
    --routines \
    --triggers \
    --events \
    --single-transaction \
    --quick \
    --lock-tables=false" | gzip > "$BACKUP_FILE"

# Vérifier la taille du backup
BACKUP_SIZE=$(du -h "$BACKUP_FILE" | cut -f1)
echo -e "${GREEN}✅ Backup créé: $BACKUP_FILE ($BACKUP_SIZE)${NC}"

# Nettoyer les anciens backups
echo -e "${YELLOW}🧹 Nettoyage backups > ${RETENTION_DAYS} jours...${NC}"
find "$BACKUP_DIR" -name "faildaily_backup_*.sql.gz" -mtime +${RETENTION_DAYS} -delete

# Compter les backups restants
BACKUP_COUNT=$(find "$BACKUP_DIR" -name "faildaily_backup_*.sql.gz" | wc -l)
echo -e "${GREEN}✅ Backups conservés: ${BACKUP_COUNT}${NC}"

# Log
echo "$(date): Backup MySQL réussi - $BACKUP_FILE ($BACKUP_SIZE)" >> "${BACKUP_DIR}/backup.log"

# Afficher les 5 derniers backups
echo -e "\n${YELLOW}📋 Derniers backups:${NC}"
ls -lht "$BACKUP_DIR"/faildaily_backup_*.sql.gz | head -n 5
