#!/usr/bin/env bash

if [[ $EUID -ne 0 ]]; then
    echo -e "\033[91m limine-entry-tool must be run with root privileges.\033[0m" >&2
    exit 1
fi

LIMINE_LOCK_FILE="/tmp/limine-global.lock"
ENABLE_MUTEX="yes"
ARGS=()

for arg in "$@"; do
    if [[ "$arg" == "--no-mutex" ]]; then
        ENABLE_MUTEX="no"
    else
        ARGS+=("$arg")
    fi
done

mutex_lock() {
    local name=$1
    exec 200>${LIMINE_LOCK_FILE} || {
        #echo -e "\033[1;31m Failed to open the lock file ${LIMINE_LOCK_FILE}.\033[0m" >&2
        #return 1
        rm -f ${LIMINE_LOCK_FILE}
        exec 200>${LIMINE_LOCK_FILE}
    }
    flock --timeout=10 200 || {
        echo -e "\033[1;31m Mutex lock timeout on ${name}.\033[0m" >&2
        return 1
    }
}

mutex_unlock() {
    # Release the lock
    flock --unlock 200
    #exec 200>&-
}

# Check if JAVA_BIN_PATH is set and valid
CHECK_JAVA_VERSION="/usr/lib/limine/let-check-java"
# shellcheck disable=SC2034
SCRIPT_NAME="limine-entry-tool"
if [[ -f "${CHECK_JAVA_VERSION}" ]]; then
    # shellcheck disable=SC1090
    if source "${CHECK_JAVA_VERSION}"; then
        JAVA_CMD=$(get_java_command) || exit 1
    else
        echo -e "\033[1;31m Error: Failed to source '${CHECK_JAVA_VERSION}'.\033[0m" >&2
        JAVA_CMD="java"
    fi
else
    JAVA_CMD="java"
fi

if [[ "${ENABLE_MUTEX}" == "yes" ]]; then
    mutex_lock "limine-entry-tool"
fi

"$JAVA_CMD" -jar /usr/share/java/limine-entry-tool.jar "${ARGS[@]}"

if [[ "${ENABLE_MUTEX}" == "yes" ]]; then
    mutex_unlock
fi
