#! /usr/bin/env bash
# Compile main + Asn1Rlp equivalence tests and run them.
# Prefers Homebrew OpenJDK when /usr/bin/java is a macOS stub.

set -euo pipefail

abs_dir="$(cd -P "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
project_dir="$(dirname "$abs_dir")"

if [[ -x /opt/homebrew/opt/openjdk/bin/javac ]]; then
  export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"
elif [[ -x /opt/homebrew/opt/openjdk@25/bin/javac ]]; then
  export PATH="/opt/homebrew/opt/openjdk@25/bin:$PATH"
elif [[ -x /opt/homebrew/opt/openjdk@21/bin/javac ]]; then
  export PATH="/opt/homebrew/opt/openjdk@21/bin:$PATH"
fi

if ! command -v javac >/dev/null || ! javac -version >/dev/null 2>&1; then
  echo "No working JDK found (javac)." >&2
  exit 1
fi

classes="$project_dir/build/classes"
test_classes="$project_dir/build/test-classes"
mkdir -p "$classes" "$test_classes"

echo "Using $(javac -version 2>&1)"

# Portable source collection (bash 3.2 has no mapfile)
main_sources=$(find "$project_dir/src/main/java" -name '*.java' | sort)
# shellcheck disable=SC2086
javac --release 21 -d "$classes" $main_sources

test_sources=$(find "$project_dir/src/test/java" -name '*Asn1Rlp*.java' | sort)
# shellcheck disable=SC2086
javac --release 21 -cp "$classes" -d "$test_classes" $test_sources

echo "Running Asn1RlpEquivalenceTest..."
java -cp "$classes:$test_classes" swiss.qpq.gajumaru.core.serialization.Asn1RlpEquivalenceTest
