#!/usr/bin/bash

# 获取当前脚本的绝对路径
SELF=$(readlink -f "$0")
#echo "当前脚本的绝对路径是: $SELF"

# 设置 WINE_APP 为当前脚本所在目录下的 kylin-wine-internal
export WINE_APP=$(dirname "$SELF")/kylin-wine-internal
#echo "WINE_APP 的路径是: $WINE_APP"

# 配置路径和其他变量
CONFIG_PATH=${HOME}/.config/kylin-wine
WINE_NORMAL_START=1

# 检查是否需要启动wine辅助启动程序
check_wine_start_helper_flag() {
    # 先检查目录是否存在，不存在则创建目录，创建不成功则让程序直接启动
    if [ ! -d "${CONFIG_PATH}" ] && ! mkdir -p "${CONFIG_PATH}"; then
        return 1
    else 
        # 判断是否需要启动wine辅助启动程序
        if [[ ! -f ${CONFIG_PATH}/enable_wine_start_helper ]];then
            #echo "enable_wine_start_helper not existed, normal start app"
            return 1
        else
            enable_start_helper=$(cat ${CONFIG_PATH}/enable_wine_start_helper)
            #echo "enable_start_helper=$enable_start_helper"
            if [[ $enable_start_helper == "0" ]];then
                #echo "normal start is 1"
                return 1
            else
                #echo "normal start is 0"
                return 0
            fi
        fi    
    fi
}

# 托盘程序的名称
TRAY_APP_NAME="kylinwine_tray"
TRAY_APP_PATH=$(dirname "$SELF")/$TRAY_APP_NAME

# 检查托盘程序是否已启动
is_tray_running() {
    # 使用 pgrep 检查进程是否存在
    if pgrep -x "$TRAY_APP_NAME" > /dev/null; then
        return 0 # 进程存在，返回 0 表示已启动
    else
        return 1 # 进程不存在，返回 1 表示未启动
    fi
}

# 启动托盘程序的函数
start_tray() {
    if [ "$XDG_SESSION_TYPE" = "wayland" ]; then
        echo "当前使用 Wayland，检查 XWayland 服务器状态..."
        if ! ps aux | grep -q "[X]wayland"; then
            echo "XWayland 未启动，正在启动 XWayland 服务器..."
            XWAYLAND_DISPLAY=:0 Xwayland :0 &
            sleep 1  # 等待 XWayland 启动
        else
            echo "XWayland 已启动。"
        fi
        # 设置 Wayland 环境运行 Qt 程序所需的环境变量
        export QT_QPA_PLATFORM=xcb
    else
        echo “X11”
    fi

    echo "托盘程序未运行，正在启动..."
    nohup $TRAY_APP_PATH &> /dev/null &
    sleep 2 # 等待程序启动完成
    if is_tray_running; then
        echo "托盘程序已成功启动！"
    else
        echo "托盘程序启动失败，请检查！"
    fi
}

# 检查$WINEPREFIX是否非空
if [ -n "$WINEPREFIX" ]; then
    echo "WINEPREFIX=$WINEPREFIX"

    # 检查是否需要启动wine辅助启动程序
    check_wine_start_helper_flag
    WINE_NORMAL_START=$?  # 使用 $? 捕获上一个命令（即函数）的返回值
        
    # 托盘主逻辑
    if is_tray_running; then
        echo "托盘程序已在运行中。"
    else
        start_tray
    fi
fi

# 根据 WINE_NORMAL_START 的值执行不同的逻辑
if [[ $WINE_NORMAL_START == 1 ]]; then
    # 使用 $WINE_APP 启动程序
    $WINE_APP "$@"
else
    # 使用 kylin-wine-starter 启动程序
    $(dirname "$SELF")/kylin-wine-starter.$(arch) "$@"
    if [[ $? == 171 ]]; then
        # 如果返回值为 171，则回退到 $WINE_APP
        $WINE_APP "$@"
    fi
fi


