#!/usr/bin/env bash

# shellcheck disable=SC2148
# Ensure the build toolchains are set up correctly for android builds.
#
# This is intended for use in CI, so it verifies only the minimum that is needed
# to build in CI. For local development use `verify-android-environment.sh`.
#
# This file should be used via `./libs/verify-android-ci-environment.sh`.

set -e

RUST_TARGETS=("aarch64-linux-android" "armv7-linux-androideabi" "x86_64-linux-android")

if [[ ! -f "$(pwd)/libs/build-all.sh" ]]; then
  echo "ERROR: verify-android-ci-environment.sh should be run from the root directory of the repo"
  exit 1
fi

"$(pwd)/libs/verify-common.sh"

# If you add a dependency below, mention it in building.md in the Android section!

if [[ -z "${ANDROID_HOME}" ]]; then
  echo "Could not find Android SDK:"
  echo 'Please install the Android SDK and then set ANDROID_HOME.'
  exit 1
fi

rustup target add "${RUST_TARGETS[@]}"

# Determine the Java command to use to start the JVM.
# Same implementation as gradlew
if [[ -n "$JAVA_HOME" ]] ; then
    if [[ -x "$JAVA_HOME/jre/sh/java" ]] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD="$JAVA_HOME/jre/sh/java"
    else
        JAVACMD="$JAVA_HOME/bin/java"
    fi
    if [[ ! -x "$JAVACMD" ]] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD="java"
    command -v $JAVACMD >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi

JAVA_VERSION=$("$JAVACMD" -version 2>&1 | grep -i version | cut -d'"' -f2 | cut -d'.' -f1-2)
if [[ "${JAVA_VERSION}" != "17.0" ]]; then
  echo "Incompatible java version: ${JAVA_VERSION}. JDK 17 must be installed."
  echo "Try switching versions and re-running. Using sdkman: sdk install java 17.0.7-tem || sdk use 17.0.7-tem"
  exit 1
fi

# NDK ez-install
if [[ ! -d "$ANDROID_HOME/cmdline-tools" ]]; then
  echo "Android SDK is missing command line tools. Install them via Android Studio -> SDK Manager -> SDK Tools."
  exit 1
fi
"$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" "ndk;$(./gradlew -q printNdkVersion | tail -1)"

# CI just downloads these libs anyway.
if [[ -z "${CI}" ]]; then
  if [[ ! -d "${PWD}/libs/android/arm64-v8a/nss" ]]; then
    pushd libs || exit 1
    ./build-all.sh android
    popd || exit 1
  fi
fi
