#!/usr/bin/env bash
# Mediops — восстановление MySQL/MariaDB из .sql.gz
# Гайд: https://mediops.ru/guides/bekapy-bazy-restore.html
#
# ВНИМАНИЕ: скрипт НЕ удаляет прод автоматически.
# Перед запуском: STOP сайт / maintenance, убедитесь что TARGET_DB — куда лить.
set -euo pipefail

DB_HOST="${DB_HOST:-127.0.0.1}"
DB_PORT="${DB_PORT:-3306}"
DB_USER="${DB_USER:-root}"
TARGET_DB="${TARGET_DB:-}"          # обязателен
DUMP_FILE="${DUMP_FILE:-}"          # путь к .sql.gz
CREATE_DB="${CREATE_DB:-1}"         # 1 = CREATE DATABASE IF NOT EXISTS
DEFAULTS_FILE="${DEFAULTS_FILE:-}"
I_UNDERSTAND="${I_UNDERSTAND:-}"    # должно быть YES

if [[ -z "$TARGET_DB" || -z "$DUMP_FILE" ]]; then
  echo "Usage: TARGET_DB=bitrix_restore DUMP_FILE=/path/to/bitrix_....sql.gz I_UNDERSTAND=YES $0" >&2
  exit 1
fi
if [[ "$I_UNDERSTAND" != "YES" ]]; then
  echo "Set I_UNDERSTAND=YES after you stopped the site and checked TARGET_DB / DUMP_FILE." >&2
  exit 1
fi
if [[ ! -f "$DUMP_FILE" ]]; then
  echo "Dump not found: $DUMP_FILE" >&2
  exit 1
fi

gzip -t "$DUMP_FILE"

AUTH_ARGS=()
if [[ -n "$DEFAULTS_FILE" ]]; then
  AUTH_ARGS+=(--defaults-extra-file="$DEFAULTS_FILE")
fi

MYSQL=(mysql "${AUTH_ARGS[@]}" -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER")

echo "[$(date -Is)] restore → ${TARGET_DB} from ${DUMP_FILE}"
if [[ "$CREATE_DB" == "1" ]]; then
  "${MYSQL[@]}" -e "CREATE DATABASE IF NOT EXISTS \`${TARGET_DB}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
fi

gzip -dc "$DUMP_FILE" | "${MYSQL[@]}" "$TARGET_DB"
echo "[$(date -Is)] done. Check app DB credentials / rights / clear cache."
