#!/usr/bin/env bash
set -euo pipefail
home_dir=$(cd -- "$(dirname -- "$0")/.." && pwd -P)
java_cmd=${JAVA_HOME:+$JAVA_HOME/bin/java}
java_cmd=${java_cmd:-$(command -v java || true)}
[[ -n $java_cmd && -x $java_cmd ]] || { echo 'JDK 21 required; set JAVA_HOME.' >&2; exit 2; }
"$java_cmd" -version 2>&1 | head -1 | grep -Eq 'version "21[.\"]' || { echo 'JDK 21 required; set JAVA_HOME.' >&2; exit 2; }
case "${1:-}" in
  --runtime|--update-agent|--mount-ro|--mount-rw) echo 'Legacy Docker options retired. Install the Java package into a new workspace.' >&2; exit 2 ;;
esac
if [[ -f $home_dir/lib/datenportal-integrator.jar ]]; then
  export DATENPORTAL_AGENT_HOME=$home_dir
  jar=$home_dir/lib/datenportal-integrator.jar
else
  [[ ! -f $home_dir/.datenportal-workspace.json ]] || { echo 'Installed package is incomplete.' >&2; exit 2; }
  cd "$home_dir"
  if [[ ${1:-} == gradle ]]; then shift; exec "$home_dir/gradlew" --console=plain "$@"; fi
  "$home_dir/gradlew" --console=plain jar >&2
  jar=$home_dir/build/libs/datenportal-integrator.jar
fi
args=("$@")
command_index=0
if [[ ${args[0]:-} == --config ]]; then command_index=2; fi
if [[ ${args[$command_index]:-} == acceptance && ${args[$((command_index+1))]:-} == delivery && ${#args[@]} == $((command_index+2)) ]]; then
  prefix=("${args[@]:0:$command_index}")
  fixture=$("$java_cmd" -jar "$jar" "${prefix[@]}" acceptance-prepare)
  [[ -f $fixture/SYNTHETIC_TEST_FIXTURE ]] || exit 2
  cleanup() { result=$?; trap - EXIT; "$java_cmd" -jar "$jar" "${prefix[@]}" acceptance-cleanup "$fixture" || result=2; exit "$result"; }
  trap cleanup EXIT
  COMPOSE_PROJECT_NAME="delivery-test-$(basename "$fixture")" bash "$fixture/datenportal-dev-stack/scripts/up.sh" --infrastructure-only > "$fixture/startup.log" 2>&1
  "$java_cmd" -jar "$jar" "${prefix[@]}" acceptance-run "$fixture"
  exit $?
fi
exec "$java_cmd" -jar "$jar" "$@"
