#!/usr/bin/env bash
set -euo pipefail
root=$(cd "$(dirname "$0")" && pwd)
sdk=${ANDROID_SDK_ROOT:-${ANDROID_HOME:-}}
if [[ -z "$sdk" ]]; then echo 'Set ANDROID_SDK_ROOT first.' >&2; exit 1; fi
android="$sdk/platforms/android-35/android.jar"
tools="$sdk/build-tools/35.0.0"
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
out=${1:-"$root/build/Music_Platform_Android_Test.apk"}
key=${MUSIC_DEBUG_KEYSTORE:-"$root/build/debug.keystore"}
mkdir -p "$(dirname "$out")" "$(dirname "$key")" "$work/classes" "$work/dex"
if [[ ! -f "$key" ]]; then
    keytool -genkeypair -keystore "$key" -storetype PKCS12 -storepass android \
        -keypass android -alias androiddebugkey -keyalg RSA -keysize 2048 \
        -validity 10000 -dname 'CN=Android Debug,O=Music Platform,C=IN'
    chmod 600 "$key"
fi
"$tools/aapt2" compile --dir "$root/app/src/main/res" -o "$work/resources.zip"
sed 's/<manifest /<manifest package="app.musicplatform.client" /' "$root/app/src/main/AndroidManifest.xml" > "$work/AndroidManifest.xml"
"$tools/aapt2" link -I "$android" --manifest "$work/AndroidManifest.xml" \
    -o "$work/base.apk" "$work/resources.zip"
mapfile -t sources < <(find "$root/app/src/main/kotlin" -name '*.kt' | sort)
if [[ -n "${MUSIC_KOTLIN_COMPILER_DIR:-}" ]]; then
    kotlin_compiler_dir=$(cd "$MUSIC_KOTLIN_COMPILER_DIR" && pwd)
    stdlib="$kotlin_compiler_dir/kotlin-stdlib-2.1.0.jar"
    compiler=(java -Dkotlin.colors.enabled=false -cp "$kotlin_compiler_dir/*" org.jetbrains.kotlin.cli.jvm.K2JVMCompiler)
else
    kotlin_bin=$(command -v kotlinc || true)
    if [[ -z "$kotlin_bin" ]]; then echo 'Install the Kotlin CLI or set MUSIC_KOTLIN_COMPILER_DIR.' >&2; exit 1; fi
    kotlin_root=$(cd "$(dirname "$(readlink -f "$kotlin_bin")")/.." && pwd)
    stdlib="$kotlin_root/lib/kotlin-stdlib.jar"
    compiler=("$kotlin_bin")
fi
if [[ ! -f "$stdlib" ]]; then echo 'The Kotlin standard library was not found.' >&2; exit 1; fi
"${compiler[@]}" -no-stdlib -no-reflect -jvm-target 1.8 \
    -classpath "$android:$stdlib" -d "$work/classes" "${sources[@]}"
(cd "$work/classes" && zip -qr "$work/classes.jar" .)
cat > "$work/shrink.pro" <<'RULES'
-dontobfuscate
-dontwarn org.jetbrains.annotations.**
-keep class app.musicplatform.client.MainActivity { *; }
RULES
java -cp "$tools/lib/d8.jar" com.android.tools.r8.R8 --release --min-api 26 \
    --lib "$android" --pg-conf "$work/shrink.pro" --output "$work/dex" "$work/classes.jar" "$stdlib"
zip -qj "$work/base.apk" "$work/dex/classes.dex"
"$tools/zipalign" -f 4 "$work/base.apk" "$work/aligned.apk"
"$tools/apksigner" sign --ks "$key" --ks-key-alias androiddebugkey \
    --ks-pass pass:android --key-pass pass:android --out "$out" "$work/aligned.apk"
"$tools/apksigner" verify --verbose "$out"
"$tools/aapt" dump badging "$out" | awk '/^package:|^sdkVersion:|^targetSdkVersion:|^launchable-activity:/'
