#!/usr/bin/env bash

### Check if the script is being run with root privileges
if [ "$EUID" -ne 0 ]; then
    echo -e "\033[91m limine-snapper-sync must be run with root privileges.\033[0m" >&2
    exit 1
fi

### Path to lock file
RESTORE_LOCKFILE="/tmp/limine-snapper-restore.lock"
LIMINE_LOCK_FILE="/tmp/limine-global.lock"

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

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


# Main logic
if [ -e "${RESTORE_LOCKFILE}" ]; then
    echo -e "\033[91m limine-snapper-restore is already running.\033[0m" >&2
    exit 1
fi

# Check if JAVA_BIN_PATH is set and valid
CHECK_JAVA_VERSION="/usr/lib/limine/lss-check-java"
# shellcheck disable=SC2034
SCRIPT_NAME="limine-snapper-sync"
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

# Run the Java application
mutex_lock "limine-snapper-sync"
"$JAVA_CMD" -jar /usr/share/java/limine-snapper-sync.jar --update "$@"
exit_code="$?"
mutex_unlock

exit "$exit_code"
