#!/bin/bash
set -e

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
OUTPUT_DIR="$PROJECT_DIR/target/android"

echo "Building AIP for Android..."
echo "Project directory: $PROJECT_DIR"
echo "Output directory: $OUTPUT_DIR"

if [ -z "$ANDROID_NDK_HOME" ]; then
    if [ -d "$HOME/Android/Sdk/ndk" ]; then
        ANDROID_NDK_HOME=$(ls -d $HOME/Android/Sdk/ndk/*/ 2>/dev/null | head -1)
    elif [ -d "$HOME/Library/Android/sdk/ndk" ]; then
        ANDROID_NDK_HOME=$(ls -d $HOME/Library/Android/sdk/ndk/*/ 2>/dev/null | head -1)
    elif [ -d "/Volumes/SSD_1T/Applications/Unity/PlaybackEngines/AndroidPlayer/NDK" ]; then
        ANDROID_NDK_HOME="/Volumes/SSD_1T/Applications/Unity/PlaybackEngines/AndroidPlayer/NDK"
    fi
fi

if [ -z "$ANDROID_NDK_HOME" ]; then
    echo "Error: ANDROID_NDK_HOME not set and NDK not found"
    echo "Please set ANDROID_NDK_HOME or install NDK via Android Studio"
    exit 1
fi

echo "Using NDK: $ANDROID_NDK_HOME"

NDK_PREBUILT_DIR="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt"

if [ -d "$NDK_PREBUILT_DIR/darwin-arm64" ]; then
    NDK_HOST="darwin-arm64"
elif [ -d "$NDK_PREBUILT_DIR/darwin-x86_64" ]; then
    NDK_HOST="darwin-x86_64"
elif [ -d "$NDK_PREBUILT_DIR/linux-x86_64" ]; then
    NDK_HOST="linux-x86_64"
else
    echo "Error: No supported NDK host found in $NDK_PREBUILT_DIR"
    echo "Available:"
    ls -la "$NDK_PREBUILT_DIR"
    exit 1
fi

NDK_TOOLCHAIN="$NDK_PREBUILT_DIR/$NDK_HOST"
echo "Toolchain: $NDK_TOOLCHAIN"

mkdir -p "$OUTPUT_DIR"

API_LEVEL=24

build_android() {
    local TARGET=$1
    local ARCH=$2
    local TOOLCHAIN_PREFIX=$3
    
    echo ""
    echo "Building for $TARGET ($ARCH)..."
    
    if ! rustup target list | grep -q "$TARGET (installed)"; then
        echo "Installing $TARGET..."
        rustup target add "$TARGET"
    fi
    
    export CC="$NDK_TOOLCHAIN/bin/${TOOLCHAIN_PREFIX}${API_LEVEL}-clang"
    export CXX="$NDK_TOOLCHAIN/bin/${TOOLCHAIN_PREFIX}${API_LEVEL}-clang++"
    export AR="$NDK_TOOLCHAIN/bin/llvm-ar"
    export LD="$NDK_TOOLCHAIN/bin/ld.lld"
    export RANLIB="$NDK_TOOLCHAIN/bin/llvm-ranlib"
    export STRIP="$NDK_TOOLCHAIN/bin/llvm-strip"
    
    export CFLAGS="-DANDROID -fPIC"
    export CXXFLAGS="-DANDROID -fPIC"
    
    export RUSTFLAGS="-C linker=$CC"
    
    cargo build --release --target "$TARGET" --features ffi
    
    local LIB_PATH="$PROJECT_DIR/target/$TARGET/release/libaip.so"
    if [ -f "$LIB_PATH" ]; then
        mkdir -p "$OUTPUT_DIR/$ARCH"
        cp "$LIB_PATH" "$OUTPUT_DIR/$ARCH/libaip.so"
        $STRIP "$OUTPUT_DIR/$ARCH/libaip.so"
        echo "  Output: $OUTPUT_DIR/$ARCH/libaip.so"
    else
        echo "  Warning: Shared library not found at $LIB_PATH"
    fi
}

build_android "aarch64-linux-android" "arm64-v8a" "aarch64-linux-android"
build_android "armv7-linux-androideabi" "armeabi-v7a" "armv7a-linux-androideabi"
build_android "x86_64-linux-android" "x86_64" "x86_64-linux-android"
build_android "i686-linux-android" "x86" "i686-linux-android"

echo ""
echo "Build complete!"
echo ""
echo "Output files:"
ls -la "$OUTPUT_DIR/"*/
echo ""
echo "Usage:"
echo "  Copy libaip.so to your Android project's jniLibs/<arch>/ directory"
echo "  Load library: System.loadLibrary(\"aip\")"
