#!/usr/bin/env bash
# Lumen Launcher AppImage entry point.
HERE="$(dirname "$(readlink -f "$0")")"
export PATH="$HERE/usr/bin:$PATH"
# Qt environment set up by linuxdeploy (plugin/QML paths)
for hook in "$HERE"/apprun-hooks/*.sh; do [ -f "$hook" ] && . "$hook"; done
LUMEN_HOME="${LUMEN_HOME:-$HOME/Lumen}"

notify() {
  echo "Lumen Launcher: $1" >&2
  command -v notify-send >/dev/null 2>&1 && notify-send "Lumen Launcher" "$1" || true
}

# The game engine is bundled in this AppImage (the flatpak is only a fallback).
if [ ! -x "$HERE/usr/lib/lumen/mcpelauncher-engine" ] || [ "${LUMEN_USE_FLATPAK:-0}" = 1 ]; then
  if ! command -v flatpak >/dev/null 2>&1 || ! flatpak info io.mrarm.mcpelauncher >/dev/null 2>&1; then
    notify "No game engine found. Install one with:  flatpak install flathub io.mrarm.mcpelauncher"
  fi
fi

# Lumen's data folder (versions, worlds, client, settings) is a visible folder in the home directory.
mkdir -p "$LUMEN_HOME/mods" "$HOME/.local/share/lumen-launcher"
ln -sfn "$LUMEN_HOME" "$HOME/.local/share/lumen-launcher/mcpelauncher"

# Install/update the bundled Lumen client (never while the game runs). It is only replaced when it is missing, or still
# byte-identical to the bundled build installed last time. A client installed locally (a dev build, or a newer one) is left alone.
BUNDLED="$HERE/usr/share/lumen/liblumen.so"
LIVE="$LUMEN_HOME/mods/liblumen.so"
REC="$LUMEN_HOME/mods/.lumen-bundled-md5"
if [ -f "$BUNDLED" ]; then
  NEWSUM="$(md5sum "$BUNDLED" | cut -d' ' -f1)"
  DO=0
  if [ ! -f "$LIVE" ]; then DO=1
  elif [ -f "$REC" ]; then
    [ "$(md5sum "$LIVE" | cut -d' ' -f1)" = "$(cat "$REC")" ] && [ "$NEWSUM" != "$(cat "$REC")" ] && DO=1
  elif [ "$(stat -c %s "$LIVE")" -lt 4000000 ] && [ "$NEWSUM" != "$(md5sum "$LIVE" | cut -d' ' -f1)" ]; then DO=1
  fi
  if [ "$DO" = 1 ]; then
    if ps -eo comm | grep -q mcpelauncher-cl; then
      notify "A newer Lumen client is bundled but the game is running. Restart the launcher after closing the game."
    else
      [ -f "$LIVE" ] && cp "$LIVE" "$LUMEN_HOME/mods/liblumen.so.bak"
      cp "$BUNDLED" "$LUMEN_HOME/mods/.liblumen.so.new" && mv "$LUMEN_HOME/mods/.liblumen.so.new" "$LIVE" && echo "$NEWSUM" > "$REC"
    fi
  fi
fi

# data files of the bundled engine (libsqliteX.so, gamecontrollerdb.txt) live in <XDG_DATA_DIRS>/mcpelauncher
export XDG_DATA_DIRS="$HERE/usr/share:${XDG_DATA_DIRS:-/usr/local/share:/usr/share}"
export XDG_DATA_HOME="$HOME/.local/share/lumen-launcher" XDG_CONFIG_HOME="$HOME/.config/lumen-launcher" XDG_CACHE_HOME="$HOME/.cache/lumen-launcher"
# Always XWayland/X11: only the xcb Qt platform plugin is bundled, and many sessions export QT_QPA_PLATFORM=wayland
# globally (which would make this start fail). Override with LUMEN_QPA_PLATFORM=... if you know what you are doing.
export QT_QPA_PLATFORM="${LUMEN_QPA_PLATFORM:-xcb}"
export LUMEN_APPIMAGE=1
exec "$HERE/usr/bin/mcpelauncher-ui-qt" "$@"
