#!/usr/bin/env bash
# Restauration depuis une sauvegarde créée par backup.sh
#
# ATTENTION : écrase la base et/ou public/uploads.
# Obligatoire : CONFIRM=RESTORE
#
# Usage :
#   CONFIRM=RESTORE ./restore.sh 20260719_043000 --db
#   CONFIRM=RESTORE ./restore.sh 20260719_043000 --uploads
#   CONFIRM=RESTORE ./restore.sh 20260719_043000 --all

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# shellcheck source=lib.sh
source "$SCRIPT_DIR/lib.sh"

if [[ "${CONFIRM:-}" != "RESTORE" ]]; then
  echo "Sécurité : définissez CONFIRM=RESTORE pour continuer." >&2
  echo "Exemple : CONFIRM=RESTORE $0 20260719_043000 --all" >&2
  exit 1
fi

STAMP="${1:-}"
shift || true
if [[ -z "$STAMP" ]]; then
  echo "Usage : CONFIRM=RESTORE $0 <stamp|chemin> [--db|--uploads|--all]" >&2
  exit 1
fi

MODE="all"
for arg in "$@"; do
  case "$arg" in
    --db) MODE="db" ;;
    --uploads) MODE="uploads" ;;
    --all) MODE="all" ;;
    -h|--help)
      sed -n '2,14p' "$0"
      exit 0
      ;;
    *)
      echo "Option inconnue : $arg" >&2
      exit 1
      ;;
  esac
done

ensure_dirs
SRC="$(resolve_backup_dir "$STAMP")"
load_database_url

echo ">>> Restauration depuis $SRC"
echo "    MODE=$MODE"
echo "    API_DIR=$API_DIR"
echo "    DB=$DB_NAME @$DB_HOST"
echo ""

if [[ "$MODE" == "all" || "$MODE" == "db" ]]; then
  DB_FILE="$SRC/database.sql.gz"
  if [[ ! -f "$DB_FILE" ]]; then
    echo "ERREUR : $DB_FILE introuvable" >&2
    exit 1
  fi
  echo ">>> Import MySQL (gunzip | mysql)…"
  gunzip -c "$DB_FILE" | mysql \
    --host="$DB_HOST" \
    --port="$DB_PORT" \
    --user="$DB_USER" \
    --password="$DB_PASS" \
    --default-character-set=utf8mb4 \
    "$DB_NAME"
  echo "    OK base restaurée"
fi

if [[ "$MODE" == "all" || "$MODE" == "uploads" ]]; then
  UP_FILE="$SRC/uploads.tar.gz"
  if [[ ! -f "$UP_FILE" ]]; then
    echo "ERREUR : $UP_FILE introuvable" >&2
    exit 1
  fi
  TARGET_PUBLIC="$API_DIR/public"
  mkdir -p "$TARGET_PUBLIC"
  # Sauvegarde locale rapide de l'uploads actuel (sécurité)
  if [[ -d "$TARGET_PUBLIC/uploads" ]]; then
    SAFETY="$BACKUP_ROOT/pre-restore_$(date +%Y%m%d_%H%M%S)_uploads.tar.gz"
    echo ">>> Copie de sécurité de l'uploads actuel → $SAFETY"
    tar -czf "$SAFETY" -C "$TARGET_PUBLIC" uploads || true
  fi
  echo ">>> Extraction uploads.tar.gz → $TARGET_PUBLIC/"
  tar -xzf "$UP_FILE" -C "$TARGET_PUBLIC"
  echo "    OK uploads restaurés"
fi

echo ""
echo ">>> Restauration terminée."
echo "Pensez à : cd $API_DIR && php bin/console cache:clear --env=prod --no-debug"
