#!/usr/bin/env bash
# Upsert the DAX BigQuery data-access integration inside the running backend.
set -euo pipefail

COMPOSE_FILE="${HELIX_COMPOSE_FILE:-/opt/helix/compose/docker-compose.prod.yml}"
INTEGRATION_SLUG="${HELIX_DAX_BIGQUERY_INTEGRATION_SLUG:-dax-bigquery-prod}"
INTEGRATION_NAME="${HELIX_DAX_BIGQUERY_INTEGRATION_NAME:-DAX BigQuery}"
APPLY_MODE_ENABLED="${HELIX_DAX_BIGQUERY_APPLY_MODE_ENABLED:-false}"
PERSONAL_APPLY_ENABLED="${HELIX_DAX_BIGQUERY_PERSONAL_APPLY_ENABLED:-preserve}"
COMMIT="${HELIX_DAX_BIGQUERY_COMMIT:-false}"
DISABLE="${HELIX_DAX_BIGQUERY_DISABLE:-false}"
SSM_PARAMETER="${HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON_SSM_PARAMETER:-}"
JSON_PATH="${HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON_PATH:-}"
CONTAINER_JSON_PATH="/tmp/helix-dax-bigquery-service-account.json"
TMP_JSON_PATH=""

cleanup() {
  if [[ -n "${TMP_JSON_PATH}" && -f "${TMP_JSON_PATH}" ]]; then
    rm -f "${TMP_JSON_PATH}"
  fi
}
trap cleanup EXIT

if [[ ! -f "${COMPOSE_FILE}" ]]; then
  echo "ERROR: compose file not found: ${COMPOSE_FILE}" >&2
  exit 3
fi

if [[ -n "${SSM_PARAMETER}" ]]; then
  TMP_JSON_PATH="$(mktemp)"
  aws ssm get-parameter \
    --name "${SSM_PARAMETER}" \
    --with-decryption \
    --query Parameter.Value \
    --output text > "${TMP_JSON_PATH}"
  JSON_PATH="${TMP_JSON_PATH}"
elif [[ -z "${JSON_PATH}" && -n "${HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON:-}" ]]; then
  TMP_JSON_PATH="$(mktemp)"
  printf '%s' "${HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON}" > "${TMP_JSON_PATH}"
  JSON_PATH="${TMP_JSON_PATH}"
fi

if [[ -z "${JSON_PATH}" || ! -f "${JSON_PATH}" ]]; then
  echo "ERROR: provide HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON_SSM_PARAMETER, HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON_PATH, or HELIX_DAX_BIGQUERY_SERVICE_ACCOUNT_JSON." >&2
  exit 2
fi

docker compose -f "${COMPOSE_FILE}" cp "${JSON_PATH}" "backend:${CONTAINER_JSON_PATH}"

args=(
  /app/.venv/bin/python
  scripts/upsert_data_access_bigquery_integration.py
  --integration-slug "${INTEGRATION_SLUG}"
  --name "${INTEGRATION_NAME}"
  --service-account-json-file "${CONTAINER_JSON_PATH}"
  --apply-mode-enabled "${APPLY_MODE_ENABLED}"
  --personal-apply-enabled "${PERSONAL_APPLY_ENABLED}"
)
if [[ "${DISABLE}" == "true" ]]; then
  args+=(--disable)
fi
if [[ "${COMMIT}" == "true" ]]; then
  args+=(--commit)
fi

docker compose -f "${COMPOSE_FILE}" exec -T \
  --workdir /app \
  -e PYTHONPATH=/app \
  backend "${args[@]}"
docker compose -f "${COMPOSE_FILE}" exec -T backend rm -f "${CONTAINER_JSON_PATH}"
