#!/data/data/com.termux/files/usr/bin/bash
set -e

AB_HOME="${ANDROID_BUILDER_HOME:-$HOME/android-builder}"
SDK="$HOME/android-sdk"
PLATFORM="${ANDROID_BUILDER_PLATFORM:-android-33}"

install_packages() {
  echo "==> Installing Termux packages"
  pkg update -y
  pkg install -y git curl wget unzip zip nano \
    openjdk-21 gradle aapt2 apksigner d8 dx android-tools
}

configure_java() {
  echo "==> Configuring Java"

  JAVA_BIN="$(command -v java || true)"

  if [ -z "$JAVA_BIN" ]; then
    echo "ERROR: java not found after installing openjdk-21."
    exit 1
  fi

  JAVA_HOME_DETECTED="$(dirname "$(dirname "$(readlink -f "$JAVA_BIN")")")"

  export JAVA_HOME="$JAVA_HOME_DETECTED"
  export PATH="$JAVA_HOME/bin:$PATH"

  touch "$HOME/.bashrc"

  grep -q 'ANDROID_BUILDER_JAVA_HOME' "$HOME/.bashrc" || cat >> "$HOME/.bashrc" <<EOF

# Java for AndroidBuilder
export JAVA_HOME=$JAVA_HOME_DETECTED
export PATH=\$JAVA_HOME/bin:\$PATH
export ANDROID_BUILDER_JAVA_HOME=\$JAVA_HOME
EOF

  java -version
  echo "JAVA_HOME=$JAVA_HOME"
}

install_cmdline_tools() {
  echo "==> Installing Android SDK cmdline-tools"

  mkdir -p "$SDK/cmdline-tools"
  cd "$SDK/cmdline-tools"

  if [ ! -d latest ]; then
    wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip
    unzip -q cmdline-tools.zip
    mv cmdline-tools latest
    rm cmdline-tools.zip
  fi
}

configure_android_environment() {
  echo "==> Configuring Android SDK environment"

  touch "$HOME/.bashrc"

  grep -q 'ANDROID_HOME' "$HOME/.bashrc" || cat >> "$HOME/.bashrc" <<'EOF'

# AndroidBuilder SDK environment
export ANDROID_HOME=$HOME/android-sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
export PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$PATH
EOF

  export ANDROID_HOME="$SDK"
  export ANDROID_SDK_ROOT="$SDK"
  export PATH="$SDK/cmdline-tools/latest/bin:$PATH"
}

accept_licenses() {
  echo "==> Accepting Android SDK licenses"

  mkdir -p "$SDK/licenses"

  cat > "$SDK/licenses/android-sdk-license" <<'EOF'
24333f8a63b6825ea9c5514f83c2829b004d1fee
d56f5187479451eabf01fb78af6dfcb131a6481e
8933bad161af4178b1185d1a37fbf41ea5269c55
EOF
}

install_sdk_platform() {
  echo "==> Installing SDK platform: $PLATFORM"

  command -v java >/dev/null || {
    echo "ERROR: Java is not available."
    exit 1
  }

  command -v sdkmanager >/dev/null || {
    echo "ERROR: sdkmanager not found."
    exit 1
  }

  sdkmanager "platforms;$PLATFORM"
}

configure_gradle() {
  echo "==> Writing Gradle config"

  mkdir -p "$HOME/.gradle"

  cat > "$HOME/.gradle/gradle.properties" <<EOF
org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
org.gradle.daemon=true
org.gradle.parallel=true
org.gradle.caching=true
android.aapt2FromMavenOverride=$PREFIX/bin/aapt2
EOF
}

setup() {
  install_packages
  configure_java
  install_cmdline_tools
  configure_android_environment
  accept_licenses
  install_sdk_platform
  configure_gradle

  echo
  echo "Setup complete."
  echo "Run:"
  echo "  source ~/.bashrc"
  echo "  android-builder doctor"
}

doctor() {
  echo "AndroidBuilder Doctor"
  echo

  echo "Java:"
  java -version || true
  echo

  echo "Gradle:"
  gradle -v | grep Gradle || true
  echo

  echo "AAPT2:"
  aapt2 version || true
  echo

  echo "SDK:"
  echo "$SDK"
  test -f "$SDK/platforms/$PLATFORM/android.jar" \
    && echo "android.jar: found" \
    || echo "android.jar: missing"
}

build() {
  test -f local.properties || echo "sdk.dir=$SDK" > local.properties

  if [ -f ./gradlew ]; then
    chmod +x ./gradlew
    ./gradlew assembleDebug
  else
    gradle assembleDebug
  fi
}

install_apk() {
  APK=$(find . -path "*/build/outputs/apk/debug/*.apk" -type f | head -n 1)

  if [ -z "$APK" ]; then
    echo "No debug APK found."
    exit 1
  fi

  termux-open "$APK"
}

help() {
  echo "AndroidBuilder"
  echo
  echo "Usage:"
  echo "  android-builder setup"
  echo "  android-builder doctor"
  echo "  android-builder build"
  echo "  android-builder install"
}

COMMAND="$1"
shift || true

case "$COMMAND" in
  setup) setup "$@" ;;
  doctor) doctor "$@" ;;
  build) build "$@" ;;
  install) install_apk "$@" ;;
  help|-h|--help|"") help ;;
  *)
    echo "Unknown command: $COMMAND"
    echo "Run: android-builder help"
    exit 1
    ;;
esac
