#!/usr/bin/env bash
set -euo pipefail

ARCHIVE="${1:-}"
ENV_FILE="${BAYLINE_ENV_FILE:-/var/www/bayline/api/.env}"

if [[ -z "$ARCHIVE" ]]; then
  echo "Usage: restore.sh /var/backups/bayline/<stamp>/<database>.sql.gz.enc" >&2
  exit 1
fi

if [[ -z "${BAYLINE_BACKUP_PASSPHRASE:-}" ]]; then
  echo "BAYLINE_BACKUP_PASSPHRASE is not set." >&2
  exit 1
fi

read_env() {
  grep -E "^${1}=" "$ENV_FILE" | tail -n1 | cut -d= -f2- | tr -d '"'
}

DB_DATABASE="$(read_env DB_DATABASE)"
DB_USERNAME="$(read_env DB_USERNAME)"
DB_PASSWORD="$(read_env DB_PASSWORD)"
DB_HOST="$(read_env DB_HOST)"

TARGET_DB="${BAYLINE_RESTORE_DATABASE:-${DB_DATABASE}_restore_check}"

echo "Restoring ${ARCHIVE} into ${TARGET_DB}"

mysql --host="$DB_HOST" --user="$DB_USERNAME" --password="$DB_PASSWORD" \
  -e "DROP DATABASE IF EXISTS \`${TARGET_DB}\`; CREATE DATABASE \`${TARGET_DB}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

openssl enc -d -aes-256-cbc -pbkdf2 -pass env:BAYLINE_BACKUP_PASSPHRASE -in "$ARCHIVE" \
  | gunzip \
  | mysql --host="$DB_HOST" --user="$DB_USERNAME" --password="$DB_PASSWORD" "$TARGET_DB"

TABLES="$(mysql --host="$DB_HOST" --user="$DB_USERNAME" --password="$DB_PASSWORD" -N -B \
  -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='${TARGET_DB}';")"

if [[ "$TABLES" -lt 1 ]]; then
  echo "Restore produced no tables. FAILED." >&2
  exit 1
fi

echo "Restore verified: ${TABLES} tables in ${TARGET_DB}"
