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

command -v python3 >/dev/null 2>&1 || { echo "ERROR: python3 not found."; exit 1; }
command -v databuilder >/dev/null 2>&1 || { echo "ERROR: databuilder CLI not found."; exit 1; }

CATALOG="${CATALOG:-catalog_op}"
SCHEMA="${SCHEMA:-default}"
OP_NAME="${OP_NAME:-triple_op}"
VER_NAME="${VER_NAME:-v5}"
SRC_FILE="${SRC_FILE:-/root/work/databuilder_vendor_operators-0.3.2-py3-none-any.whl}"
WORK_DIR="${WORK_DIR:-/tmp/operator_cli_test}"
mkdir -p "${WORK_DIR}"

if [[ ! -f "${SRC_FILE}" ]]; then
  echo "ERROR: source code file not found: ${SRC_FILE}"
  echo "Set SRC_FILE to a real local operator package before running."
  exit 1
fi

UPLOAD_OUT="${WORK_DIR}/upload_response.json"
databuilder operator-file upload \
  --catalog-name "${CATALOG}" \
  --schema-name "${SCHEMA}" \
  --operator-name "${OP_NAME}" \
  --version-name "${VER_NAME}" \
  --file "${SRC_FILE}" \
  | tee "${UPLOAD_OUT}"

STORAGE_LOCATION="$(python3 -c '
import json
import sys
with open(sys.argv[1]) as f:
    payload = json.load(f)
result = payload.get("result", payload) if isinstance(payload, dict) else {}
print(result.get("storageLocation", ""))
' "${UPLOAD_OUT}")"

if [[ -z "${STORAGE_LOCATION}" || "${STORAGE_LOCATION}" == "None" ]]; then
  echo "ERROR: failed to parse storageLocation from ${UPLOAD_OUT}"
  exit 1
fi

echo "${STORAGE_LOCATION}" > "${WORK_DIR}/storage_location.txt"

cat > "${WORK_DIR}/create_version.json" <<JSON
{
  "versionName": "${VER_NAME}",
  "comment": "first version created by sdk test",
  "language": "Python",
  "category": "TRANSFORM",
  "storageLocation": "${STORAGE_LOCATION}",
  "properties": {"className": "TripleOp"},
  "input": [],
  "output": [],
  "execParams": [],
  "defaultParams": [],
  "engineType": ["RAY"],
  "resourceType": "CPU"
}
JSON

echo "Resolved storageLocation = ${STORAGE_LOCATION}"
echo "Wrote ${WORK_DIR}/create_version.json"
