#!/usr/bin/env bash
# test-common.sh - load test.env and normalize toolkit, generated, and result directories
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TOOL_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
REPO_ROOT="$(git -C "${TOOL_ROOT}" rev-parse --show-toplevel)"
ENV_DIR="${TOOL_ROOT}/env"
CONFIG_ROOT="${TOOL_ROOT}/configs"
GENERATED_DIR="${TOOL_ROOT}/generated"
GENERATED_CONFIG_DIR="${GENERATED_DIR}/configs"
GENERATED_BIN_DIR="${GENERATED_DIR}/bin"
RESULTS_BASE_DIR="${GENERATED_DIR}/results"
TEST_ENV_FILE="${LOCAL_VERIFICATION_ENV_FILE:-${ENV_DIR}/test.env}"
DEFAULT_BASELINE_REF="main"
DEFAULT_BASELINE_WORKTREE="${REPO_ROOT}/../metrics-integration-main"
BASELINE_REF="${LOCAL_VERIFICATION_BASELINE_REF:-${DEFAULT_BASELINE_REF}}"
BASELINE_WORKTREE="${LOCAL_VERIFICATION_BASELINE_WORKTREE:-${LOCAL_VERIFICATION_MAIN_WORKTREE:-${DEFAULT_BASELINE_WORKTREE}}}"
BASELINE_LABEL="${LOCAL_VERIFICATION_BASELINE_LABEL:-main}"

if [[ ! -f "${TEST_ENV_FILE}" ]]; then
  echo "❌ Local verification env file not found: ${TEST_ENV_FILE}"
  echo "   First copy ${ENV_DIR}/test.env.template to ${ENV_DIR}/test.env and fill in the required fields"
  exit 1
fi

source "${TEST_ENV_FILE}"

# Set the test round explicitly in test.env. If unchanged, the default directory is reused.
TEST_ROUND_NAME="${TEST_ROUND_NAME:-default}"

if [[ -z "${TEST_ROUND_NAME}" ]]; then
  echo "❌ TEST_ROUND_NAME must not be empty. Please edit ${TEST_ENV_FILE}"
  exit 1
fi

if [[ "${TEST_ROUND_NAME}" == *"/"* ]]; then
  echo "❌ TEST_ROUND_NAME must not contain /. Please use a directory-safe name"
  exit 1
fi

if [[ ! "${BASELINE_LABEL}" =~ ^[A-Za-z0-9._-]+$ ]]; then
  echo "❌ LOCAL_VERIFICATION_BASELINE_LABEL must match [A-Za-z0-9._-]+"
  exit 1
fi

RESULTS_DIR="${RESULTS_BASE_DIR}/${TEST_ROUND_NAME}"

mkdir -p "${GENERATED_DIR}" "${GENERATED_CONFIG_DIR}" "${GENERATED_BIN_DIR}" "${RESULTS_DIR}"
