#!/usr/bin/env bash
# cargo shim: intercept `cargo tauri android android-studio-script` (the
# hidden subcommand the tauri gradle plugin's rustBuild task runs) and
# reproduce its effect with a PLAIN cargo build.
#
# Why: the cargo-tauri CLI (every subcommand that builds a Rust interface)
# starts an inotify debouncer on Cargo.toml. This host's per-user inotify
# WATCH quota (65536) is exhausted by the user's standalone syncthing
# (65,482 watches), so inotify_add_watch → ENOSPC and the CLI dies before
# doing anything. Plain cargo build uses no inotify.
#
# android-studio-script's output (verified on the tttest build): the lib .so
# placed at gen/android/app/src/main/jniLibs/<abi-dir>/lib<lib>.so.
set -euo pipefail

REAL_CARGO="$HOME/.cargo/bin/cargo"
PROJ=/mnt/Backup/prog/android/gallery/harnesses/ttimg
NDK="$HOME/android-sdk/ndk/27.0.12077973"

if [ "${1:-}" = "tauri" ] && [ "${2:-}" = "android" ] && [ "${3:-}" = "android-studio-script" ]; then
  shift 3
  release="" ; target="x86_64"
  while [ $# -gt 0 ]; do
    case "$1" in
      --release) release=1 ;;
      --target) shift; target="${1:-x86_64}" ;;
    esac
    shift
  done

  case "$target" in
    x86_64)  TRIPLE=x86_64-linux-android;        ABI_DIR=x86_64;       CLANG=x86_64-linux-android24-clang ;;
    aarch64) TRIPLE=aarch64-linux-android;       ABI_DIR=arm64-v8a;    CLANG=aarch64-linux-android24-clang ;;
    armv7)   TRIPLE=armv7-linux-androideabi;     ABI_DIR=armeabi-v7a;  CLANG=armv7a-linux-androideabi24-clang ;;
    i686)    TRIPLE=i686-linux-android;          ABI_DIR=x86;          CLANG=i686-linux-android24-clang ;;
    *) echo "shim: unknown target $target" >&2; exit 1 ;;
  esac
  prof="debug"; [ -n "$release" ] && prof="release"

  echo "ttimg shim: cargo build $TRIPLE $prof (bypassing cargo-tauri)"
  # env var names are CARGO_TARGET_<UPPER_TRIPLE>_... with HYPHENS → UNDERSCORES
  UPPER=$(echo "$TRIPLE" | tr 'a-z-' 'A-Z_')
  env \
    "CARGO_TARGET_${UPPER}_LINKER=$NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/$CLANG" \
    "CARGO_TARGET_${UPPER}_RUSTFLAGS=-Clink-arg=-landroid -Clink-arg=-llog -Clink-arg=-lOpenSLES" \
    "$REAL_CARGO" build --package ttimg --manifest-path "$PROJ/Cargo.toml" \
      --target "$TRIPLE" --features "tauri/custom-protocol" --lib --"$prof"

  SO="$PROJ/target/$TRIPLE/$prof/libttimg_lib.so"
  [ -f "$SO" ] || { echo "shim: $SO not produced" >&2; exit 1; }
  DEST="$PROJ/gen/android/app/src/main/jniLibs/$ABI_DIR/libttimg_lib.so"
  mkdir -p "$(dirname "$DEST")"
  # /mnt/Backup's stat identity is unreliable here (cp still reports
  # "same file"), so just break any link and copy fresh:
  rm -f "$DEST"
  cp "$SO" "$DEST"
  echo "ttimg shim: .so -> jniLibs/$ABI_DIR"
  exit 0
fi

exec "$REAL_CARGO" "$@"
