#!/bin/bash
set -euo pipefail

export RAVEOS_BASE_ETC_DIR="${RAVEOS_BASE_ETC_DIR:-/etc/raveos-app-installer}"
export RAVEOS_STATE_ROOT="${RAVEOS_STATE_ROOT:-/var/lib/raveos-app-installer}"
export RAVEOS_CACHE_ROOT="${RAVEOS_CACHE_ROOT:-/var/cache/raveos-app-installer}"
export RAVEOS_AUDIT_LOG_DIR="${RAVEOS_AUDIT_LOG_DIR:-/var/log/raveos-app-installer}"
export RAVEOS_INSTALL_LIB_DIR="${RAVEOS_INSTALL_LIB_DIR:-/usr/lib/raveos-app-installer}"
export RAVEOS_INSTALL_SHARE_DIR="${RAVEOS_INSTALL_SHARE_DIR:-/usr/share/raveos-app-installer}"
export RAVEOS_ACTIONS_DIR="${RAVEOS_ACTIONS_DIR:-$RAVEOS_INSTALL_LIB_DIR/actions}"
export RAVEOS_CONFIG_PACKAGE_DIR="${RAVEOS_CONFIG_PACKAGE_DIR:-$RAVEOS_INSTALL_SHARE_DIR/configs}"
export RAVEOS_THEME_PACKAGE_DIR="${RAVEOS_THEME_PACKAGE_DIR:-$RAVEOS_INSTALL_SHARE_DIR/themes}"

APP_ENTRY="${RAVEOS_INSTALL_LIB_DIR}/raveos-app-installer-root-launcher"
USER_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"
DE="${XDG_CURRENT_DESKTOP:-unknown}"
DE_LOWER="$(printf '%s' "$DE" | tr '[:upper:]' '[:lower:]')"
CALLER_USER="$(id -un)"
CALLER_UID="$(id -u)"
CALLER_GID="$(id -g)"
CALLER_HOME="${HOME:-$(getent passwd "$CALLER_USER" | cut -d: -f6)}"

COMMON_ENV=(
    "RAVEOS_TARGET_USER=$CALLER_USER"
    "RAVEOS_TARGET_HOME=$CALLER_HOME"
    "RAVEOS_TARGET_UID=$CALLER_UID"
    "RAVEOS_TARGET_GID=$CALLER_GID"
    "PYTHONPATH=${RAVEOS_INSTALL_LIB_DIR}/src"
    "RAVEOS_BASE_ETC_DIR=$RAVEOS_BASE_ETC_DIR"
    "RAVEOS_STATE_ROOT=$RAVEOS_STATE_ROOT"
    "RAVEOS_CACHE_ROOT=$RAVEOS_CACHE_ROOT"
    "RAVEOS_AUDIT_LOG_DIR=$RAVEOS_AUDIT_LOG_DIR"
    "RAVEOS_INSTALL_LIB_DIR=$RAVEOS_INSTALL_LIB_DIR"
    "RAVEOS_INSTALL_SHARE_DIR=$RAVEOS_INSTALL_SHARE_DIR"
    "RAVEOS_ACTIONS_DIR=$RAVEOS_ACTIONS_DIR"
    "RAVEOS_CONFIG_PACKAGE_DIR=$RAVEOS_CONFIG_PACKAGE_DIR"
    "RAVEOS_THEME_PACKAGE_DIR=$RAVEOS_THEME_PACKAGE_DIR"
    "XDG_CURRENT_DESKTOP=${XDG_CURRENT_DESKTOP:-}"
    "XDG_SESSION_TYPE=${XDG_SESSION_TYPE:-}"
    "XDG_SESSION_DESKTOP=${XDG_SESSION_DESKTOP:-}"
    "XDG_RUNTIME_DIR=$USER_RUNTIME_DIR"
    "WAYLAND_DISPLAY=${WAYLAND_DISPLAY:-}"
    "HYPRLAND_INSTANCE_SIGNATURE=${HYPRLAND_INSTANCE_SIGNATURE:-}"
)

if [[ "$#" -eq 0 ]]; then
    export PYTHONPATH="${RAVEOS_INSTALL_LIB_DIR}/src"
    exec "$APP_ENTRY"
fi

if [[ "$DE_LOWER" == *"hyprland"* ]] || [[ "$DE_LOWER" == *"sway"* ]]; then
    xhost +local: 2>/dev/null || true
    if [[ -n "${DISPLAY:-}" ]]; then
        exec pkexec env \
            DISPLAY="$DISPLAY" \
            XAUTHORITY="${XAUTHORITY:-}" \
            QT_QPA_PLATFORM=xcb \
            "${COMMON_ENV[@]}" \
            "$APP_ENTRY" "$@"
    fi

    exec pkexec env \
        DISPLAY="${DISPLAY:-}" \
        XAUTHORITY="${XAUTHORITY:-}" \
        WAYLAND_DISPLAY="${WAYLAND_DISPLAY:-wayland-1}" \
        QT_QPA_PLATFORM=wayland \
        "${COMMON_ENV[@]}" \
        "$APP_ENTRY" "$@"
fi

exec pkexec env \
    DISPLAY="${DISPLAY:-:0}" \
    XAUTHORITY="${XAUTHORITY:-}" \
    QT_QPA_PLATFORM=xcb \
    "${COMMON_ENV[@]}" \
    "$APP_ENTRY" "$@"
