#!/usr/bin/env bash
# Launch one disposable engine worker with stdin reserved for its JSON request.

set -euo pipefail

if (( $# != 0 )); then
  printf '%s\n' 'jerbsearch engine worker: arguments are not accepted' >&2
  exit 64
fi

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
JCODE_ROOT="$(cd "$PROJECT_ROOT/../.." && pwd)"
JERBOA_HOME="${JERBSEARCH_JERBOA_HOME:-${JERBOA_HOME:-$HOME/mine/jerboa}}"
WORKER_SOURCE="$PROJECT_ROOT/support/search-engine-worker.ss"
LOCKED_WEBSEARCH_SRC="$JCODE_ROOT/vendor/jerboa-websearch/src"
LIBDIRS="$PROJECT_ROOT/src:$LOCKED_WEBSEARCH_SRC:$JERBOA_HOME/lib"

exec_jerbuild() {
  local jerbuild=$1
  local bundled_home
  bundled_home="$("$jerbuild" --jerboa-home)"
  exec "$jerbuild" exec \
    --libdirs "$PROJECT_ROOT/src:$LOCKED_WEBSEARCH_SRC:$bundled_home/lib" \
    "$WORKER_SOURCE"
}

if [[ -n "${JERBSEARCH_SCHEME:-}" ]]; then
  exec "$JERBSEARCH_SCHEME" -q --libdirs "$LIBDIRS" --script "$WORKER_SOURCE"
fi

if [[ -n "${JERBUILD:-}" ]] && [[ -x "$JERBUILD" ]]; then
  exec_jerbuild "$JERBUILD"
fi

for candidate in \
  "$PROJECT_ROOT/jerbuild" \
  "$PROJECT_ROOT/.jerboa/bin/jerbuild" \
  "$JCODE_ROOT/jerbuild" \
  "$JCODE_ROOT/.jerboa/bin/jerbuild" \
  "$JCODE_ROOT/../jerboa/dist/jerbuild" \
  "$JCODE_ROOT/../jerboa/jerbuild"
do
  if [[ -x "$candidate" ]]; then
    exec_jerbuild "$candidate"
  fi
done

if command -v jerbuild >/dev/null 2>&1; then
  exec_jerbuild "$(command -v jerbuild)"
fi

if command -v scheme >/dev/null 2>&1; then
  exec "$(command -v scheme)" -q --libdirs "$LIBDIRS" --script "$WORKER_SOURCE"
fi

printf '%s\n' 'jerbsearch engine worker: no Jerboa Scheme runtime found' >&2
exit 127
