#!/usr/bin/env bash
export PID=$$
export GLIBCXX_FORCE_NEW=1

SED=sed
isMac=0
if test "$(uname)" == "Darwin"; then
    isMac=1
    SED=gsed
fi

if test -n "$ORIGINAL_PATH"; then
    # running in cygwin...
    PS='\'
    export EXT=".exe"
else
    export EXT=""
    PS='/'
fi;

export PORT=`expr 1024 + $RANDOM`

NUMA=""

if $(which numactl > /dev/null 2>&1); then
    NUMA="numactl --interleave=all"
fi

if [ `uname -s` == "Darwin" ]; then
  EXEC_PATH="$(dirname "$(dirname "$0")")"
else
  EXEC_PATH="$(dirname "$(dirname "$(readlink -m "$0")")")"
fi
declare -a EXTRA_ARGS

if [ -z "${ARANGOSH}" ];  then
    if [ -x build/bin/arangosh -a ! -d build/bin/arangosh ];  then
        ARANGOSH="build/bin/arangosh${EXT}"
    elif [ -x bin/arangosh -a ! -d bin/arangosh ];  then
        ARANGOSH="bin/arangosh${EXT}"
    elif [ -x arangosh -a ! -d arangosh ]; then
        ARANGOSH="arangosh${EXT}"
    elif [ -x usr/bin/arangosh -a ! -d usr/bin/arangosh ];  then
        ARANGOSH="usr/bin/arangosh${EXT}"
    else
        ARANGOSH="$(find "${EXEC_PATH}" -name "arangosh${EXT}" -perm -001 -type f | head -n 1)"
        [ -x "${ARANGOSH}" ] || {
          echo "$0: cannot locate arangosh"
          exit 1
        }
    fi
fi

[ "$(uname -s)" != "Darwin" -a -x "${ARANGOSH}" ] && ARANGOSH="$(readlink -m "${ARANGOSH}")"
[ "$(uname -s)" = "Darwin" -a -x "${ARANGOSH}" ] && ARANGOSH="$(cd -P -- "$(dirname -- "${ARANGOSH}")" && pwd -P)/$(basename -- "${ARANGOSH}")"

[[ " $@ " =~ "--build" ]] || {
  BUILD_PATH="$(dirname "$(dirname "${ARANGOSH}")")"
  BUILD_PATH="${BUILD_PATH#${EXEC_PATH}/}"

  if test -n "$ORIGINAL_PATH"; then
    # running in cygwin...
      BUILD_PATH=$(cygpath --windows "$BUILD_PATH")
  fi
  EXTRA_ARGS=("--build" "${BUILD_PATH}")
}

(
  cd "${EXEC_PATH}"
  exec $NUMA $ARANGOSH \
       -c etc${PS}relative${PS}arangosh.conf \
       --log.level warning \
       --server.endpoint none \
       --javascript.allow-external-process-control true \
       --javascript.execute UnitTests${PS}unittest.js \
       -- \
       "$@" "${EXTRA_ARGS[@]}"
)
