# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit desktop xdg

HOMEPAGE="https://github.com/ShadowMario/FNF-PsychEngine"
DESCRIPTION="Engine originally used on Mind Games mod"
SRC_URI="https://github.com/ShadowMario/FNF-PsychEngine/releases/download/${PV}/PsychEngine-Linux.zip -> ${P}.zip"

S="${WORKDIR}"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="amd64"

BDEPEND="app-arch/unzip"
RDEPEND="
    media-libs/alsa-lib
    media-libs/mesa
    sys-apps/util-linux
    x11-libs/libX11
    =media-video/vlc-3.0.23-r1*
"

src_install() {
    insinto /opt/psych-engine
    doins -r *

    fperms +x /opt/psych-engine/PsychEngine

    cat <<'EOF' > "${T}/psych-engine"
#!/usr/bin/env bash
REAL_USER="${SUDO_USER:-$USER}"
USER_HOME=$(getent passwd "$REAL_USER" | cut -d: -f6)
DATA_DIR="${USER_HOME}/.local/share/psych-engine"

mkdir -p "${DATA_DIR}"

if [ "$(stat -c '%U' "${DATA_DIR}" 2>/dev/null)" = "root" ]; then
    chown -R "$REAL_USER:$REAL_USER" "${DATA_DIR}"
fi

if [[ ! -f "${DATA_DIR}/modsList.txt" ]]; then
    if [[ -f "/opt/psych-engine/modsList.txt" ]]; then
        cp "/opt/psych-engine/modsList.txt" "${DATA_DIR}/modsList.txt"
    else
        touch "${DATA_DIR}/modsList.txt"
    fi
fi

if [[ ! -d "${DATA_DIR}/mods" ]]; then
    mkdir -p "${DATA_DIR}/mods"
    if [[ -d "/opt/psych-engine/mods" && -n "$(ls -A "/opt/psych-engine/mods" 2>/dev/null)" ]]; then
        cp -r "/opt/psych-engine/mods/." "${DATA_DIR}/mods/"
    fi
fi

if [[ ! -d "${DATA_DIR}/plugins" ]]; then
    mkdir -p "${DATA_DIR}/plugins"
    if [[ -d "/opt/psych-engine/plugins" && -n "$(ls -A "/opt/psych-engine/plugins" 2>/dev/null)" ]]; then
        cp -r "/opt/psych-engine/plugins/." "${DATA_DIR}/plugins/"
    fi
fi

for item in /opt/psych-engine/*; do
    base=$(basename "${item}")
    case "${base}" in
        mods|plugins|modsList.txt|icon.png)
            ;;
        *)
            if [[ ! -e "${DATA_DIR}/${base}" ]]; then
                ln -s "${item}" "${DATA_DIR}/${base}"
            fi
            ;;
    esac
done

cd "${DATA_DIR}" || exit 1
exec ./PsychEngine "$@"
EOF

    dobin "${T}/psych-engine"

    if [[ -n "${icon_file}" ]]; then
        make_desktop_entry psych-engine "FNF: Psych Engine" psych-engine "Game;"
    else
        make_desktop_entry psych-engine "FNF: Psych Engine" application-games "Game;"
    fi
}

pkg_postinst() {
    xdg_pkg_postinst
    elog "Psych Engine's main folder should be located in"
    elog " '~/.local/share' folder!" 
}