#!/usr/bin/env bash
# Project a repo-managed DAX dataset inventory into data_access_resources.
set -euo pipefail

INVENTORY_PATH="${HELIX_DAX_DATASET_INVENTORY_PATH:-}"
LINEAGE_CATALOG_PATH="${HELIX_DAX_LINEAGE_CATALOG_PATH:-}"
INTEGRATION_SLUG="${HELIX_DAX_DATASET_INTEGRATION_SLUG:-}"
SOURCE_VERSION="${HELIX_DAX_DATASET_SOURCE_VERSION:-}"
COMMIT="${HELIX_DAX_DATASET_COMMIT:-false}"
ALLOW_UNRESOLVED="${HELIX_DAX_DATASET_ALLOW_UNRESOLVED:-false}"
COMPOSE_FILE="${HELIX_COMPOSE_FILE:-/opt/helix/compose/docker-compose.prod.yml}"
CONTAINER_INVENTORY="/tmp/dax-dataset-inventory.json"
CONTAINER_LINEAGE_CATALOG="/tmp/dax-lineage-catalog.json"

if [[ -z "${INVENTORY_PATH}" ]]; then
  echo "ERROR: HELIX_DAX_DATASET_INVENTORY_PATH is required." >&2
  exit 2
fi

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

if [[ -z "${LINEAGE_CATALOG_PATH}" ]]; then
  echo "ERROR: HELIX_DAX_LINEAGE_CATALOG_PATH is required." >&2
  exit 8
fi

if [[ ! -f "${LINEAGE_CATALOG_PATH}" ]]; then
  echo "ERROR: lineage catalog file not found: ${LINEAGE_CATALOG_PATH}" >&2
  exit 9
fi

if [[ -z "${SOURCE_VERSION}" ]]; then
  echo "ERROR: HELIX_DAX_DATASET_SOURCE_VERSION is required." >&2
  exit 4
fi

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

case "${COMMIT}" in
  true|false) ;;
  *)
    echo "ERROR: HELIX_DAX_DATASET_COMMIT must be true or false." >&2
    exit 6
    ;;
esac

case "${ALLOW_UNRESOLVED}" in
  true|false) ;;
  *)
    echo "ERROR: HELIX_DAX_DATASET_ALLOW_UNRESOLVED must be true or false." >&2
    exit 7
    ;;
esac

docker compose -f "${COMPOSE_FILE}" cp \
  "${INVENTORY_PATH}" "backend:${CONTAINER_INVENTORY}"
docker compose -f "${COMPOSE_FILE}" cp \
  "${LINEAGE_CATALOG_PATH}" "backend:${CONTAINER_LINEAGE_CATALOG}"

args=(
  /app/.venv/bin/python
  scripts/seed_data_access_resources.py
  "${CONTAINER_INVENTORY}"
  --source-version "${SOURCE_VERSION}"
)

# The workflow has already assembled the inventory with the exact source
# revision's lineage code and artifact. Re-running lineage projection inside a
# potentially older Production image would create version-skewed catalog state.
echo "AUTOMATIC LINEAGE ROOTS: using preassembled workflow inventory"

if [[ -n "${INTEGRATION_SLUG}" ]]; then
  args+=(--integration-slug "${INTEGRATION_SLUG}")
fi

if [[ "${ALLOW_UNRESOLVED}" == "true" ]]; then
  args+=(--allow-unresolved)
fi

if [[ "${COMMIT}" == "true" ]]; then
  args+=(--commit)
fi

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