#!/bin/bash

# SPDX-FileCopyrightText: 2022 - 2023 UnionTech Software Technology Co., Ltd.
#
# SPDX-License-Identifier: GPL-3.0-or-later

function get_scale_factor() {
    user_name=$(logname)
    scaling=$(sudo -u "$user_name" dbus-launch gsettings get com.deepin.xsettings scale-factor)

    if (( $(bc <<< "$scaling >= 1 && $scaling <= 10") )); then
        echo $scaling
    else
        echo "Error: Invalid scaling factor: $scaling" >&2
        echo 1
    fi
}

function run_pkexec() {
        # 创建临时文件保存原始会话类型
        TEMP_SESSION_FILE="/tmp/.dde-fm-session-$$"
        echo "$XDG_SESSION_TYPE" > "$TEMP_SESSION_FILE"
        
        xhost +SI:localuser:root
        echo "run in pkexec: $@"
        pkexec --disable-internal-agent "$@" `id -u` "$TEMP_SESSION_FILE"
        
        # 清理临时文件
        rm -f "$TEMP_SESSION_FILE"
        
        xhost -SI:localuser:root
        xhost
}

function run_app() {
        echo "param in run_app: $@"
        user_name=$(logname)
        uid=$(id -u "$user_name")
        echo "runner uid: $uid"
        
        # 获取原始会话类型
        ORIGINAL_SESSION_TYPE=""
        TEMP_SESSION_FILE="$2"  # 第二个参数是临时文件路径
        if [ -f "$TEMP_SESSION_FILE" ]; then
            ORIGINAL_SESSION_TYPE=$(cat "$TEMP_SESSION_FILE")
            echo "Read original session type: $ORIGINAL_SESSION_TYPE"
        else
            ORIGINAL_SESSION_TYPE="$XDG_SESSION_TYPE"
            echo "Using current session type: $ORIGINAL_SESSION_TYPE"
        fi
        
        export XDG_RUNTIME_DIR=/run/user/$uid
        
        # Set environment variables based on session type
        if [ "$ORIGINAL_SESSION_TYPE" == "x11" ]; then
            export DISPLAY=:0
            export QT_QPA_PLATFORM=dxcb;xcb
            export GDK_BACKEND=x11
            export XDG_SESSION_TYPE=x11
        else
            export WAYLAND_DISPLAY=wayland-0
            export DISPLAY=:0
            export QT_WAYLAND_SHELL_INTEGRATION=kwayland-shell
            export XDG_SESSION_TYPE=wayland
            export QT_QPA_PLATFORM=
            export GDK_BACKEND=x11
        fi
        
        export $(dbus-launch)

        scale_factor=$(get_scale_factor)
        if [ "$scale_factor" != "1" ]; then
            echo "export scaling: $scale_factor"
            # 暂时屏蔽，v25 下造成缩放异常
            # export QT_SCALE_FACTOR=$scale_factor
        fi

        file-manager.sh "$1" -w "$(pwd)"
}

echo "run dde-file-manager in $XDG_SESSION_TYPE"
echo "current file: $0"
if [ x$(id -u) != "x0" ];then
        run_pkexec "$0" "$@"
        exit 0
fi

echo "run app: $@"
run_app "$@"
