#!/bin/sh
set -eu

INSTALL_ROOT=${KRYPTIC_INSTALL_ROOT:-/opt/kryptic-client}
case "$INSTALL_ROOT" in
    /*) ;;
    *)
        printf '%s\n' 'Kryptic cannot start: the installation path is invalid.' >&2
        exit 1
        ;;
esac

if [ -n "${XDG_DATA_HOME:-}" ]; then
    case "$XDG_DATA_HOME" in
        /*) DATA_ROOT=$XDG_DATA_HOME ;;
        *) DATA_ROOT=${HOME:?}/.local/share ;;
    esac
else
    DATA_ROOT=${HOME:?}/.local/share
fi

KRYPTIC_HOME=$DATA_ROOT/kryptic
CLIENT_JAR=$KRYPTIC_HOME/Kryptic-Public.jar
SEED_JAR=$INSTALL_ROOT/lib/app/Kryptic-Public.jar
LAUNCHER_JAR=$INSTALL_ROOT/lib/app/Kryptic-Launcher.jar
JAVA=$INSTALL_ROOT/lib/runtime/bin/java

if [ ! -x "$JAVA" ] || [ ! -f "$SEED_JAR" ] || [ ! -f "$LAUNCHER_JAR" ]; then
    printf '%s\n' 'Kryptic cannot start: the installed client is incomplete.' >&2
    exit 1
fi

mkdir -p -- "$KRYPTIC_HOME"
if [ ! -f "$CLIENT_JAR" ]; then
    TEMP_JAR=$KRYPTIC_HOME/.Kryptic-Public.jar.seed-$$
    trap 'rm -f -- "$TEMP_JAR"' EXIT HUP INT TERM
    cp -- "$SEED_JAR" "$TEMP_JAR"
    chmod 0600 "$TEMP_JAR"
    mv -f -- "$TEMP_JAR" "$CLIENT_JAR"
    trap - EXIT HUP INT TERM
fi

exec "$JAVA" \
    -Dkryptic.home="$KRYPTIC_HOME" \
    -Dkryptic.java="$JAVA" \
    -jar "$LAUNCHER_JAR" "$@"
