#!/bin/bash
# Install the android sdk and add any packages named as arguments.
# A dev machine already has a working sdk, so this is a no-op there; CI runner images
# ship neither the sdk nor the jdk that sdkmanager needs.
#
# Prints the resolved ANDROID_HOME on stdout, everything else on stderr, so callers can:
#   export ANDROID_HOME=$(scripts/install_android_sdk.sh emulator platform-tools)
set -euo pipefail

# keep stdout clean for the ANDROID_HOME result
exec 3>&1 1>&2

host=$(uname -s)
case "$host" in
    Darwin)
        default_sdk="$HOME/Library/Android/sdk"
        tools_url=${CMDLINE_TOOLS_URL:-https://dl.google.com/android/repository/commandlinetools-mac-11076708_latest.zip}
        ;;
    Linux)
        default_sdk="${CI_PROJECT_DIR:-$HOME}/android-sdk"
        tools_url=${CMDLINE_TOOLS_URL:-https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip}
        ;;
    *)
        echo "unsupported host: $host"
        exit 1
        ;;
esac

sdk=${ANDROID_HOME:-${ANDROID_SDK_ROOT:-$default_sdk}}

if [ ! -x "$sdk/cmdline-tools/latest/bin/sdkmanager" ]; then
    if [ "$host" == "Darwin" ]; then
        echo "=== installing android command-line tools via homebrew ==="
        # temurin supplies the jdk sdkmanager runs on
        brew install --cask temurin android-commandlinetools
        sdk="$(brew --prefix)/share/android-commandlinetools"
    else
        echo "=== installing android command-line tools into $sdk ==="
        if ! command -v java > /dev/null; then
            apt-get update -qq
            # not a versioned jdk: debian trixie carries only 21 and 25, no 17
            apt-get install -y --no-install-recommends default-jdk-headless unzip
        fi
        mkdir -p "$sdk/cmdline-tools"
        curl -fsSL -o /tmp/cmdline-tools.zip "$tools_url"
        rm -rf "$sdk/cmdline-tools/latest" "$sdk/cmdline-tools/cmdline-tools"
        unzip -q /tmp/cmdline-tools.zip -d "$sdk/cmdline-tools"
        # the zip unpacks as 'cmdline-tools/', but sdkmanager requires the 'latest/' layout
        mv "$sdk/cmdline-tools/cmdline-tools" "$sdk/cmdline-tools/latest"
    fi
fi

sdkmanager="$sdk/cmdline-tools/latest/bin/sdkmanager"
[ -x "$sdkmanager" ] || {
    echo "sdkmanager not found at $sdkmanager"
    exit 1
}

if [ $# -gt 0 ]; then
    # packages land under ANDROID_HOME, which is the layout scripts/test_android.sh expects
    yes | ANDROID_HOME="$sdk" "$sdkmanager" --licenses > /dev/null 2>&1 || true
    echo "=== installing: $* ==="
    ANDROID_HOME="$sdk" "$sdkmanager" --install "$@"
fi

echo "$sdk" >&3
