#!/bin/bash
set -e

APP_DIR="/usr/share/mr-vixie-launcher"
OPT_DIR="/opt/mr-vixie-launcher"
DATA_DIR="$HOME/.mr-vixie"
MODULES="javafx.controls,javafx.web"
MAIN="launcher.Main"
SRC="$APP_DIR/Main.java"
CLASSES="$OPT_DIR/classes"
LOCAL_CLASSES="$DATA_DIR/classes"

mkdir -p "$DATA_DIR"

JAVAC_BIN=""; JAVA_BIN=""
if command -v javac &>/dev/null; then
    JAVAC_BIN="javac"; JAVA_BIN="java"
elif [ -x "$OPT_DIR/jdk/bin/javac" ]; then
    JAVAC_BIN="$OPT_DIR/jdk/bin/javac"; JAVA_BIN="$OPT_DIR/jdk/bin/java"
else
    echo "[!] Java not found. Run: sudo dpkg-reconfigure mr-vixie-launcher"; exit 1
fi

JFX_MODPATH=""
# Maven cache (JavaFX 21) — best
M2="$HOME/.m2/repository/org/openjfx"
if [ -z "$JFX_MODPATH" ] && [ -d "$M2" ]; then
    VER=$(ls "$M2/javafx-controls/" 2>/dev/null | sort -V | tail -1)
    if [ -n "$VER" ] && [ -d "$M2/javafx-controls/$VER" ]; then
        JFX_MODPATH=$(mktemp -d)
        for m in base graphics controls web media; do
            for j in "$M2/javafx-$m/$VER/javafx-$m-$VER.jar" "$M2/javafx-$m/$VER/javafx-$m-$VER-linux.jar"; do
                [ -f "$j" ] && ln -sf "$j" "$JFX_MODPATH/"
            done
        done
    fi
fi
# Pre-installed by deb (JavaFX 21)
if [ -z "$JFX_MODPATH" ] && [ -d "$OPT_DIR/jfx/lib" ]; then
    JFX_MODPATH="$OPT_DIR/jfx/lib"
fi
# System JavaFX 11 — last resort
if [ -z "$JFX_MODPATH" ] && [ -d "/usr/share/openjfx/lib" ]; then
    JFX_MODPATH="/usr/share/openjfx/lib"
fi
if [ -z "$JFX_MODPATH" ]; then echo "[!] JavaFX not found. Run: sudo dpkg-reconfigure mr-vixie-launcher"; exit 1; fi

if [ -d "$CLASSES" ] && [ -f "$CLASSES/launcher/Main.class" ] && [ "$CLASSES/launcher/Main.class" -nt "$SRC" ]; then
    CLS="$CLASSES"
else
    mkdir -p "$LOCAL_CLASSES"
    "$JAVAC_BIN" -d "$LOCAL_CLASSES" --module-path "$JFX_MODPATH" --add-modules "$MODULES" "$SRC"
    CLS="$LOCAL_CLASSES"
fi

exec "$JAVA_BIN" --module-path "$JFX_MODPATH" --add-modules "$MODULES" -cp "$CLS" "$MAIN"
