#!/usr/bin/env sh

NOT_CRAN=${NOT_CRAN:-"false"}
LIBPRQLR_BUILD=${LIBPRQLR_BUILD:-""}

LIBNAME="libprqlr.a"
LIBPRQLR_DEFAULT_PATH="$(pwd)/tools/${LIBNAME}"
LIBPRQLR_PATH=${LIBPRQLR_PATH:-${LIBPRQLR_DEFAULT_PATH}}

export PATH="$PATH:$HOME/.cargo/bin"

check_cargo() {
  if [ ! "$(command -v cargo)" ]; then
    echo ""
    echo "------------------------- [RUST NOT FOUND] -------------------------"
    echo "The 'cargo' command was not found on the PATH. Please install rustc"
    echo "from: https://www.rust-lang.org/tools/install"
    echo ""
    echo "Alternatively, you may install cargo from your OS package manager:"
    echo " - Debian/Ubuntu: apt-get install cargo"
    echo " - Fedora/CentOS: dnf install cargo"
    echo " - macOS: brew install rustc"
    echo "--------------------------------------------------------------------"
    echo ""
    exit 1
  else
    echo ""
    echo "--------------------------- [RUST FOUND] ---------------------------"
    cargo -V
    echo ""
    rustc -vV
    echo "--------------------------------------------------------------------"
    echo ""
  fi
}

check_bin_lib() {
  if [ "${NOT_CRAN}" = "true" ] && [ -z "${LIBPRQLR_BUILD}"  ]; then
    LIBPRQLR_BUILD="false"
  fi

  if [ "${LIBPRQLR_BUILD}" = "false" ] && [ -f "tools/lib-sums.tsv" ] && [ ! -f "${LIBPRQLR_PATH}" ] ; then
    echo ""
    echo "--------------- [ TRY TO DOWNLOAD PRE-BUILT BINARY ] ---------------"
    "${R_HOME}/bin${R_ARCH_BIN}/Rscript" "tools/prep-lib.R" || echo "Failed to download pre-built binary."
    echo "--------------------------------------------------------------------"
    echo ""
  fi

  if [ "${LIBPRQLR_BUILD}" = "false" ] && [ -f "${LIBPRQLR_PATH}" ]; then
    echo ""
    echo "---------------------- [LIBRARY BINARY FOUND] ----------------------"
    echo "The library was found at <${LIBPRQLR_PATH}>. No need to build it."
    echo "--------------------------------------------------------------------"
    echo ""
    sed -e "s|@RUST_TARGET@||" src/Makevars.in >src/Makevars
    if [ "${LIBPRQLR_PATH}" != "${LIBPRQLR_DEFAULT_PATH}" ]; then
      echo ""
      echo "------------------------ [COPYING BINARY] ------------------------"
      echo "Copying <${LIBPRQLR_PATH}> to <${LIBPRQLR_DEFAULT_PATH}>."
      mkdir -p "$(dirname "${LIBPRQLR_DEFAULT_PATH}")"
      cp "${LIBPRQLR_PATH}" "${LIBPRQLR_DEFAULT_PATH}" || echo "Failed to copy binary."
      echo "------------------------------------------------------------------"
      echo ""
    fi
    exit 0
  elif [ "${LIBR_POLARS_BUILD}" = "false" ] && [ -f "${LIBR_POLARS_DEFAULT_PATH}" ]; then
    echo ""
    echo "---------------------- [LIBRARY BINARY FOUND] ----------------------"
    echo "The library was not found at <${LIBR_POLARS_PATH}>,"
    echo "but was found at <${LIBR_POLARS_DEFAULT_PATH}>."
    echo "No need to build it."
    echo "--------------------------------------------------------------------"
    echo ""
    sed -e "s|@RUST_TARGET@||" src/Makevars.in >src/Makevars
    exit 0
  elif [ "${LIBPRQLR_BUILD}" = "false" ]; then
    echo ""
    echo "-------------------- [LIBRARY BINARY NOT FOUND] --------------------"
    echo "The library was not found at <${LIBPRQLR_PATH}>."
    echo "Falling back to building from source."
    echo "--------------------------------------------------------------------"
    echo ""
  fi
}

check_bin_lib
check_cargo

sed -e "s|@RUST_TARGET@|$(rustc -vV | grep host | cut -d' ' -f2)|" src/Makevars.in >src/Makevars

exit 0
