#!/usr/bin/env bash
set -euo pipefail
# Requires Java 25, protoc, the pinned ProtoMolt checkout, its runtime classpath,
# and an already-running TEI gRPC server serving all-MiniLM-L6-v2.
: "${PROTOMOLT_SOURCE:?Set the ProtoMolt source checkout}"
: "${PROTOMOLT_CLASSPATH:?Set the compiled ProtoMolt runtime and dependency classpath}"
: "${TEI_TARGET:?Set the existing TEI gRPC host:port}"
demo_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
demo_build="$(mktemp -d "${TMPDIR:-/tmp}/protomolt-contract-demo.XXXXXX")"
mkdir -p "$demo_build/generated" "$demo_build/classes"
protoc -I "$demo_dir" \
  -I "$PROTOMOLT_SOURCE/transform/projection/src/main/proto" \
  -I "$PROTOMOLT_SOURCE/protobuf/validation/src/main/proto" \
  -I "$PROTOMOLT_SOURCE/search/index/spi/src/main/proto" \
  --java_out="$demo_build/generated" --include_imports --include_source_info \
  --descriptor_set_out="$demo_build/court-search.pb" "$demo_dir/court-search.proto"
protoc -I "$PROTOMOLT_SOURCE/search/embedding/tei/src/main/proto" \
  --include_imports --descriptor_set_out="$demo_build/tei.pb" tei/v1/tei.proto
# Compile the small chunking module from the pinned source into temporary output.
# Other ProtoMolt components come from the supplied runtime classpath.
mapfile -t chunk_sources < <(find "$PROTOMOLT_SOURCE/search/chunk/src/main/java" -name '*.java' -type f)
javac -cp "$PROTOMOLT_CLASSPATH" -d "$demo_build/classes" \
  "${chunk_sources[@]}" "$demo_build/generated/demo/CourtTypes.java" "$demo_dir/ContractDemo.java"
java -cp "$demo_build/classes:$PROTOMOLT_CLASSPATH" ContractDemo \
  "$demo_build/tei.pb" "$TEI_TARGET" "${1:-$demo_dir/result.json}"
printf 'Descriptor set and compiled classes retained at %s\n' "$demo_build"
