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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
ENV_FILE="${ENV_FILE:-${SCRIPT_DIR}/.env.staging}"
COMPOSE_FILE="${COMPOSE_FILE:-${SCRIPT_DIR}/docker-compose.staging.yml}"
PROJECT_NAME="${PROJECT_NAME:-banking-staging}"
BASE_URL="${BASE_URL:-http://localhost:8080}"
SKIP_COMPOSE="${SKIP_COMPOSE:-false}"
SKIP_SEED="${SKIP_SEED:-false}"

if [[ ! -f "${ENV_FILE}" ]]; then
  echo "Missing ${ENV_FILE}. Copy deploy/.env.staging.example to deploy/.env.staging and replace shared staging secrets." >&2
  exit 1
fi

set -a
source "${ENV_FILE}"
set +a

compose=(docker compose --env-file "${ENV_FILE}" -f "${COMPOSE_FILE}" -p "${PROJECT_NAME}")

if [[ "${SKIP_COMPOSE}" != "true" ]]; then
  docker version >/dev/null
  "${compose[@]}" up -d --build postgres api
fi

for _ in $(seq 1 60); do
  if curl -fsS "${BASE_URL}/readyz" >/dev/null 2>&1; then
    break
  fi
  sleep 2
done

curl -fsS "${BASE_URL}/readyz" >/dev/null

if [[ "${SKIP_SEED}" != "true" ]]; then
  "${compose[@]}" --profile seed run --rm seed
fi

(
  cd "${REPO_ROOT}/backend"
  export BANKING_E2E_BASE_URL="${BASE_URL}"
  export BANKING_E2E_CUSTOMER_EMAIL="${BANKING_STAGING_CUSTOMER_EMAIL:-customer.staging@swiftnet.test}"
  export BANKING_E2E_CUSTOMER_PASSWORD="${BANKING_STAGING_CUSTOMER_PASSWORD:-very-secure-passphrase}"
  go test ./e2e -count=1
)

echo "Staging smoke passed at ${BASE_URL}"
