#!/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() {
    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"
    # 判断是否是首次启动，仅在首次启动时根据set_dpi脚本计算推荐DPI值并设置DPI，非首次启动不设置（每个容器共用一个first_run.flag）
    FIRST_RUN_FLAG_FILE=${WINEPREFIX}/first_run.flag   
    SET_DPI_SCRIPT="$(dirname $SELF)/set_dpi"  # 假设 set_dpi 是一个可执行的脚本

    # 检查文件是否存在
    if [[ ! -f "$FIRST_RUN_FLAG_FILE" ]]; then
        # 如果文件不存在，则创建它, 是首次启动
        echo "$FIRST_RUN_FLAG_FILE not existed, create one, it means first start"
        touch "$FIRST_RUN_FLAG_FILE"   
        # 调用 set_dpi 脚本
        if [[ -x "$SET_DPI_SCRIPT" ]]; then
            echo "Calling script '$SET_DPI_SCRIPT'..."
            "$SET_DPI_SCRIPT"
        else
            echo "Error: Script '$SET_DPI_SCRIPT' is not executable or does not exist."
        fi
    fi
    
    # 检查是否需要启动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


