#!/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
