#!/usr/bin/env bash
# =============================================================================
# dump-bdd-local.sh
# Dump la base faildaily_bdd depuis le MySQL embarque dans Docker Swarm (VPS)
# via SSH, vers le repo local.
# USAGE : ./scripts/dump-bdd-local.sh [--ssh-host ovh] [--min-size-kb 100]
# =============================================================================

set -euo pipefail

SSH_HOST="ovh"
MIN_SIZE_KB=100

usage() {
  cat <<'USAGE'
Usage:
  ./scripts/dump-bdd-local.sh [--ssh-host ovh] [--min-size-kb 100]

Options:
  --ssh-host, -s     Alias SSH ou user@host (defaut: ovh)
  --min-size-kb, -m  Taille mini attendue du dump SQL en KB (defaut: 100)
  --help             Afficher cette aide
USAGE
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    --ssh-host|-s)
      SSH_HOST="${2:-}"
      shift 2
      ;;
    --min-size-kb|-m)
      MIN_SIZE_KB="${2:-}"
      shift 2
      ;;
    --help)
      usage
      exit 0
      ;;
    *)
      echo "Argument inconnu: $1" >&2
      usage >&2
      exit 1
      ;;
  esac
done

if ! [[ "$MIN_SIZE_KB" =~ ^[0-9]+$ ]]; then
  echo "ERREUR: --min-size-kb doit etre un entier positif." >&2
  exit 1
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
OUTPUT_FILE="$REPO_ROOT/backend-api/migrations/faildaily_bdd.sql"

echo "==> Connexion SSH : ${SSH_HOST}"
echo "==> Sortie        : ${OUTPUT_FILE}"
echo

REMOTE_CMD=$(cat <<'REMOTE'
bash -o pipefail -c '
  CONTAINER=$(docker ps -q -f label=com.docker.swarm.service.name=faildaily_mysql)
  if [ -z "$CONTAINER" ]; then
    echo "ERREUR: conteneur faildaily_mysql introuvable" >&2
    exit 1
  fi
  docker exec "$CONTAINER" bash -c \
    "mysqldump -u root -p\"\$(cat /run/secrets/db_root_password)\" \
     --single-transaction --skip-lock-tables faildaily_bdd" \
  | sed "s/DEFINER=\`[^\`]*\`@\`[^\`]*\`//g"
'
REMOTE
)

if ! OUTPUT=$(ssh "$SSH_HOST" "$REMOTE_CMD" 2>&1); then
  EXIT_CODE=$?
  echo
  echo "ERREUR SSH/mysqldump (code $EXIT_CODE) :" >&2
  printf '%s\n' "$OUTPUT" >&2
  exit "$EXIT_CODE"
fi

# Filtrer les warnings mysqldump de la sortie SQL.
printf '%s\n' "$OUTPUT" \
  | grep -Ev '^\[Warning\]|^mysqldump: \[Warning\]' \
  > "$OUTPUT_FILE" || true

SIZE_BYTES="$(wc -c < "$OUTPUT_FILE" | tr -d '[:space:]')"
MIN_SIZE_BYTES=$((MIN_SIZE_KB * 1024))

if (( SIZE_BYTES < MIN_SIZE_BYTES )); then
  echo
  echo "ERREUR : dump suspect (${SIZE_BYTES} bytes < ${MIN_SIZE_BYTES} bytes minimum)." >&2
  echo "         Verifier que le conteneur MySQL tourne et que les secrets sont lisibles." >&2
  rm -f "$OUTPUT_FILE"
  exit 1
fi

SIZE_KB=$(( (SIZE_BYTES + 1023) / 1024 ))
DATE_NOW="$(date '+%Y-%m-%d %H:%M:%S')"

echo
echo "DUMP TERMINE avec succes !"
echo "  Fichier : $OUTPUT_FILE"
echo "  Taille  : ${SIZE_KB} KB"
echo "  Date    : $DATE_NOW"
echo
echo "Etapes suivantes :"
echo "  1. git add backend-api/migrations/faildaily_bdd.sql"
echo "  2. git commit -m \"chore: update db dump $(date +%F)\""
echo "  3. Mettre a jour 'Last verified' dans claude.md"
