#!/usr/bin/env bash

# Enables a narrowly scoped compatibility layer when a DrvFS mount reports chmod as unsupported
# for the selected, non-root WSL build user. The wrapper only converts EPERM to success for targets
# below the supplied Linux build root; all other chmod errors retain their original behavior.
configure_drvfs_gradle_compatibility() {
    local linux_root="$1"
    local project_root="$2"
    local permission_probe="$linux_root/.gradle-permission-probe.$$"
    local filesystem_type
    local shim_directory="$linux_root/.tools/drvfs-compat"
    local shim_library="$shim_directory/drvfs-chmod-compat.so"

    mkdir -p "$permission_probe"
    if chmod 700 "$permission_probe" 2>/dev/null; then
        rm -rf -- "$permission_probe"
        return 0
    fi

    filesystem_type="$(findmnt -T "$linux_root" -no FSTYPE 2>/dev/null || true)"
    if [[ "$filesystem_type" != "9p" && "$filesystem_type" != "drvfs" ]]; then
        rm -rf -- "$permission_probe"
        echo "Linux-Build blockiert: Der aktuelle Benutzer $(id -un) darf auf $linux_root keine POSIX-Dateimodi setzen." >&2
        return 1
    fi
    if ! command -v cc >/dev/null 2>&1; then
        rm -rf -- "$permission_probe"
        echo "Linux-Build blockiert: Der vorhandene C-Compiler 'cc' fehlt für die projektlokale DrvFS-Kompatibilität." >&2
        return 1
    fi

    mkdir -p "$shim_directory"
    cc -shared -fPIC -O2 -Wall -Wextra -Werror \
        -o "$shim_library" \
        "$project_root/scripts/drvfs-chmod-compat.c" \
        -ldl
    export MAPTOOLS_DRVFS_ROOT="$linux_root"
    export LD_PRELOAD="$shim_library${LD_PRELOAD:+:$LD_PRELOAD}"

    if ! chmod 700 "$permission_probe"; then
        rm -rf -- "$permission_probe"
        echo "Linux-Build blockiert: Die projektlokale DrvFS-Kompatibilitätsprüfung ist fehlgeschlagen." >&2
        return 1
    fi
    rm -rf -- "$permission_probe"
    export MAPTOOLS_DRVFS_CHMOD_SHIM="$shim_library"
    echo "Hinweis: Projektlokale DrvFS-chmod-Kompatibilität für $(id -un) aktiviert."
}
