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

if [ "$#" -lt 1 ]; then
  echo "usage: load-runner <python-module> [args...]" >&2
  exit 2
fi

export UV_PROJECT_ENVIRONMENT="${UV_PROJECT_ENVIRONMENT:-/tmp/pingcap-datalake-load-venv}"
SOURCE_ROOT="${DATALAKE_AIRFLOW_REPO_ROOT:-/opt/datalake}"
DATALAKE_ROOT="${DATALAKE_LOAD_WORKSPACE:-${SOURCE_ROOT}}"
ARGS=("$@")

if [ "${DATALAKE_ROOT}" != "${SOURCE_ROOT}" ]; then
  mkdir -p "${DATALAKE_ROOT}"
  rsync -a --delete \
    --exclude ".git" \
    --exclude ".venv" \
    --exclude "*/contracts/proposed/***" \
    --exclude "orchestration/airflow/logs" \
    --exclude "*/runs/***" \
    "${SOURCE_ROOT}/" \
    "${DATALAKE_ROOT}/"
  export DATALAKE_AIRFLOW_REPO_ROOT="${DATALAKE_ROOT}"

  for index in "${!ARGS[@]}"; do
    if [ "${ARGS[$index]}" = "--source" ] && [ "$((index + 1))" -lt "${#ARGS[@]}" ]; then
      source_arg="${ARGS[$((index + 1))]}"
      if [[ "${source_arg}" == "${SOURCE_ROOT}/"* ]]; then
        ARGS[$((index + 1))]="${DATALAKE_ROOT}/${source_arg#"${SOURCE_ROOT}/"}"
      fi
    fi
  done
fi

cd "${DATALAKE_ROOT}"

UV_ARGS=(run --project "${DATALAKE_ROOT}")
if [ -f "${DATALAKE_ROOT}/.env" ]; then
  UV_ARGS+=(--env-file "${DATALAKE_ROOT}/.env")
fi

uv "${UV_ARGS[@]}" \
  -- \
  python -m "${ARGS[@]}"
