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

readonly SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd -P)"
readonly REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd -P)"

source "$SCRIPT_DIR/tidb-data-lib.sh"

usage() {
  cat <<'EOF' >&2
Usage:
  scripts/tidb-export.sh <output-dir>

Exports schema-and-data SQL files for the database in AGENTTEAM_DATABASE_DSN by
using tiup dumpling.

Environment variables:
  AGENTTEAM_DATABASE_DSN                 (required)
  AGENTTEAM_TIUP_BIN                     (default: tiup)
  AGENTTEAM_TIDB_DUMPLING_COMPONENT      (default: dumpling)
  AGENTTEAM_TIDB_EXPORT_THREADS          (default: 8)
  AGENTTEAM_TIDB_EXPORT_ROWS             (default: 200000)
  AGENTTEAM_TIDB_EXPORT_FILE_SIZE        (default: 256MiB)
  AGENTTEAM_TIDB_EXPORT_CONSISTENCY      (default: snapshot)
  AGENTTEAM_TIDB_EXPORT_LOG_LEVEL        (default: info)
  AGENTTEAM_TIDB_TLS_CA_PATH             (optional)
  AGENTTEAM_TIDB_TLS_CERT_PATH           (optional)
  AGENTTEAM_TIDB_TLS_KEY_PATH            (optional)
EOF
}

case "${1:-}" in
  -h|--help|help)
    usage
    exit 0
    ;;
esac

if [[ $# -ne 1 ]]; then
  usage
  exit 1
fi

output_dir="$1"
agentteam_tidb_prepare_empty_dir "$output_dir"
agentteam_tidb_parse_core_storage_dsn "${AGENTTEAM_DATABASE_DSN:-${AGENTTEAM_CORE_STORAGE_DSN:-}}"
agentteam_tidb_validate_export_tls_support

tiup_bin="$(agentteam_tidb_resolve_tiup_bin)"
dumpling_component="${AGENTTEAM_TIDB_DUMPLING_COMPONENT:-dumpling}"
threads="${AGENTTEAM_TIDB_EXPORT_THREADS:-8}"
rows="${AGENTTEAM_TIDB_EXPORT_ROWS:-200000}"
file_size="${AGENTTEAM_TIDB_EXPORT_FILE_SIZE:-256MiB}"
consistency="${AGENTTEAM_TIDB_EXPORT_CONSISTENCY:-snapshot}"
log_level="${AGENTTEAM_TIDB_EXPORT_LOG_LEVEL:-info}"

dump_args=(
  "$dumpling_component"
  "--host" "$agentteam_tidb_host"
  "--port" "$agentteam_tidb_port"
  "--user" "$agentteam_tidb_user"
  "--database" "$agentteam_tidb_database"
  "--output" "$output_dir"
  "--filetype" "sql"
  "--consistency" "$consistency"
  "--threads" "$threads"
  "--rows" "$rows"
  "--filesize" "$file_size"
  "--loglevel" "$log_level"
)

if [[ -n "$agentteam_tidb_password" ]]; then
  dump_args+=("--password" "$agentteam_tidb_password")
fi
agentteam_tidb_append_tls_file_flags dump_args

"$tiup_bin" "${dump_args[@]}"

echo "agentteam tidb export finished: database=$agentteam_tidb_database output=$output_dir"
