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

SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../.." && pwd)"

COMMON_ARGS=()
E2E_CASES=()

while [[ $# -gt 0 ]]; do
  case "$1" in
    workspace-timeline)
      E2E_CASES+=("$1")
      ;;
    --mode|--config-file)
      COMMON_ARGS+=("$1")
      shift
      [[ $# -gt 0 ]] || {
        printf '[ticket-manager-e2e] ERROR: %s requires a value\n' "${COMMON_ARGS[-1]}" >&2
        exit 1
      }
      COMMON_ARGS+=("$1")
      ;;
    --dry-run|--cleanup|--keep-artifacts|--help|-h)
      COMMON_ARGS+=("$1")
      ;;
    *)
      printf '[ticket-manager-e2e] ERROR: unknown argument or case: %s\n' "$1" >&2
      exit 1
      ;;
  esac
  shift
done

if [[ ${#E2E_CASES[@]} -eq 0 ]]; then
  E2E_CASES=(workspace-timeline)
fi

source "${SCRIPT_DIR}/lib/ticket-manager-e2e-common.sh"

if [[ ${#COMMON_ARGS[@]} -gt 0 ]]; then
  ticket_manager_e2e_init "${COMMON_ARGS[@]}"
else
  ticket_manager_e2e_init
fi
ticket_manager_e2e_start

for e2e_case in "${E2E_CASES[@]}"; do
  case_file="${SCRIPT_DIR}/e2e-cases/${e2e_case}.sh"
  [[ -f "$case_file" ]] || fail "case file not found: ${case_file}"
  source "$case_file"
  case_func="run_${e2e_case//-/_}_case"
  declare -F "$case_func" >/dev/null || fail "case function not found: ${case_func}"
  log "running e2e case: ${e2e_case}"
  "$case_func"
done

STATUS="passed"
log "e2e cases passed: ${E2E_CASES[*]}"
log "inspect HTTP artifacts under ${HTTP_DIR}"
log "inspect Agent Gateway log at ${ARTIFACT_ROOT}/agent-gateway.log"
