#!/usr/bin/env sh
set -e

echo "==> Compiling Java sources for ReebGraphPairing"

# Classpath separator
case "$(uname -s)" in
  MINGW*|MSYS*|CYGWIN*) CPSEP=';';;
  *)                    CPSEP=':';;
esac

# Address issue with using plain `R` below
# https://stackoverflow.com/a/75543023
R_HOME="$R_HOME/bin/R"

# Prefer R-configured tools; fall back to PATH
JAVAC="$(R_HOME CMD config JAVAC || true)"; [ -z "$JAVAC" ] && JAVAC="$(command -v javac || echo javac)"
JAR="$(R_HOME CMD config JAR || true)";     [ -z "$JAR" ]   && JAR="$(command -v jar   || echo jar)"

SRC_DIR="java/src"
CLS_DIR="inst/java/classes"
JAR_OUT="inst/java/ReebGraphPairing.jar"

mkdir -p "$CLS_DIR"

# Collect sources
if command -v find >/dev/null 2>&1; then
  find "$SRC_DIR" -name '*.java' > sources.txt
else
  R --vanilla --slave -e "writeLines(list.files('$SRC_DIR', pattern='\\\\.java$', recursive=TRUE, full.names=TRUE), 'sources.txt')"
fi

# Build compile classpath: compiled classes + any jars in inst/java/lib
CP="$CLS_DIR"
if ls inst/java/lib/*.jar >/dev/null 2>&1; then
  # join all jars with the OS-specific separator
  CP_JARS=$(printf "%s$CPSEP" inst/java/lib/*.jar); CP_JARS=${CP_JARS%$CPSEP}
  CP="${CP}${CPSEP}${CP_JARS}"
fi

echo "Using JAVAC: $JAVAC"
echo "Classpath: $CP"

# Compile with classpath (so org.jocl.* is visible)
"$JAVAC" -encoding UTF-8 -d "$CLS_DIR" -cp "$CP" @sources.txt

# Bundle jar (optional)
"$JAR" cf "$JAR_OUT" -C "$CLS_DIR" .

rm -f sources.txt
rm -rf inst/java/classes
echo "==> Java build complete -> $JAR_OUT"
