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

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
MANIFEST_FILE="${ROOT_DIR}/deployments/offline/runtime/reference-data/manifest.json"
OUTPUT_DIR=""
STATE_FILE=""
SUMMARY_FILE=""
OBJECTS="${PACK_REFERENCE_DATA_OBJECTS:-${PROD_REFERENCE_DATA_OBJECTS:-Industry_Vertical__c,ReportFolder,_System_EmailTemplate}}"
DRY_RUN=0

usage() {
  cat <<'EOF'
Usage:
  scripts/apply_pack_reference_data.sh [--manifest-file path] [--output-dir path] [--state-file path] [--summary-file path] [--objects A,B,C] [--dry-run]

Purpose:
  Apply the manifest-defined, pack-owned reference data through mysql CLI.
  This is the governed production-safe path for durable reference records; it
  does not run the broad environment baseline.
EOF
}

while [[ $# -gt 0 ]]; do
  case "$1" in
    --manifest-file)
      MANIFEST_FILE="${2:-}"
      shift 2
      ;;
    --output-dir)
      OUTPUT_DIR="${2:-}"
      shift 2
      ;;
    --state-file)
      STATE_FILE="${2:-}"
      shift 2
      ;;
    --summary-file)
      SUMMARY_FILE="${2:-}"
      shift 2
      ;;
    --objects)
      OBJECTS="${2:-}"
      shift 2
      ;;
    --dry-run)
      DRY_RUN=1
      shift
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      echo "unknown argument: $1" >&2
      usage >&2
      exit 2
      ;;
  esac
done

if [[ "${MANIFEST_FILE}" != /* ]]; then
  MANIFEST_FILE="${ROOT_DIR}/${MANIFEST_FILE#./}"
fi
if [[ ! -f "${MANIFEST_FILE}" ]]; then
  echo "pack reference data manifest not found: ${MANIFEST_FILE}" >&2
  exit 1
fi

if [[ -z "${OUTPUT_DIR}" ]]; then
  OUTPUT_DIR="$(mktemp -d -t pack-reference-data.XXXXXX)"
else
  mkdir -p "${OUTPUT_DIR}"
fi
if [[ "${OUTPUT_DIR}" != /* ]]; then
  OUTPUT_DIR="${ROOT_DIR}/${OUTPUT_DIR#./}"
fi

if [[ -z "${STATE_FILE}" ]]; then
  STATE_FILE="${OUTPUT_DIR}/runtime-state.json"
elif [[ "${STATE_FILE}" != /* ]]; then
  STATE_FILE="${ROOT_DIR}/${STATE_FILE#./}"
fi

if [[ -z "${SUMMARY_FILE}" ]]; then
  SUMMARY_FILE="${OUTPUT_DIR}/summary.json"
elif [[ "${SUMMARY_FILE}" != /* ]]; then
  SUMMARY_FILE="${ROOT_DIR}/${SUMMARY_FILE#./}"
fi

echo "[pack-reference-data] manifest_file=${MANIFEST_FILE}"
echo "[pack-reference-data] output_dir=${OUTPUT_DIR}"
echo "[pack-reference-data] state_file=${STATE_FILE}"
echo "[pack-reference-data] summary_file=${SUMMARY_FILE}"
echo "[pack-reference-data] objects=${OBJECTS}"

MYSQL_CLIENT="$(command -v mysql || command -v mariadb || true)"
if [[ "${DRY_RUN}" != "1" ]] && [[ -z "${MYSQL_CLIENT}" ]]; then
  echo "mysql or mariadb CLI is required to apply pack reference data" >&2
  exit 1
fi
if [[ -n "${MYSQL_CLIENT}" ]]; then
  echo "[pack-reference-data] mysql_client=${MYSQL_CLIENT}"
fi

args=(
  "${ROOT_DIR}/scripts/apply_pack_reference_data.py"
  --manifest-file "${MANIFEST_FILE}"
  --state-file "${STATE_FILE}"
  --summary-file "${SUMMARY_FILE}"
  --objects "${OBJECTS}"
)
if [[ "${DRY_RUN}" == "1" ]]; then
  args+=(--dry-run)
fi

PACK_REFERENCE_DATA_MYSQL_CLIENT="${MYSQL_CLIENT}" python3 "${args[@]}"
