#!/bin/bash

workpath=/opt/ktouch
tmppath=/tmp/ktouch
INPUT_FILE="$workpath/touch_dis_table.txt"
OUTPUT_FILE="$workpath/config"
LOG_FILE="$workpath/touchscreen.log"

# 日志函数
log_message() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') kscreen-setup : $1" | tee -a "$LOG_FILE"
}

mkdir -p /tmp/ktouch
cd $workpath

# 首先往setflag写入1停止监控
echo -n "1" > $tmppath/setflag

# 消灭监控进程
log_message "关闭监控进程"
sleep 2

# 环境变量
export DISPLAY=:0

# 备份config文件
echo -n "" > $workpath/config.bk
cp $workpath/config $workpath/config.bk

# 启动检测
log_message "启动GUI化配置程序"
$workpath/screen_binder
log_message "配置过程结束"


# ==============解析文件===============

# 检查输入文件是否存在
if [[ ! -f "$INPUT_FILE" ]]; then
    log_message "错误: 输入文件 $INPUT_FILE 不存在"
    exit 1
fi

echo -n "" > $workpath/config

log_message "开始处理触摸屏设备信息"
# 逐行读取输入文件
while IFS='|' read -r display_name touchscreen_name touchscreen_id event_path; do
    # 去除可能的空白字符
    display_name=$(echo "$display_name" | xargs)
    touchscreen_name=$(echo "$touchscreen_name" | xargs)
    event_path=$(echo "$event_path" | xargs)
    
    log_message "处理设备: $touchscreen_name, 事件路径: $event_path"
    
    # 检查事件路径是否为空
    if [[ -z "$event_path" ]]; then
        log_message "警告: 事件路径为空，跳过此行"
        continue
    fi
    
    # 检查设备是否存在
    if [[ ! -e "$event_path" ]]; then
        log_message "警告: 设备路径 $event_path 不存在，跳过"
        continue
    fi
    
    # 使用udevadm查询设备信息
    vid=""
    pid=""
    usb_path=""
    
    # 获取设备信息
    device_info=$(udevadm info --query=property --path="$(udevadm info --query=path --name="$event_path" 2>/dev/null)" 2>/dev/null)
    
    if [[ -n "$device_info" ]]; then
        # 提取VID和PID
        vid=$(echo "$device_info" | grep -i "ID_VENDOR_ID" | cut -d= -f2 | head -n1)
        pid=$(echo "$device_info" | grep -i "ID_MODEL_ID" | cut -d= -f2 | head -n1)
        
        # 提取USB路径
        usb_path=$(echo "$device_info" | grep -i "ID_PATH" | grep -i "usb" | cut -d= -f2 | head -n1)
        
        # # 如果没找到USB路径，尝试其他方式
        # if [[ -z "$usb_path" ]]; then
        #     usb_path=$(echo "$device_info" | grep -i "DEVPATH" | cut -d= -f2 | head -n1)
        # fi
    fi
    
    
    log_message "获取到信息: VID=$vid, PID=$pid, USB路径=$usb_path"
    
    # 组合新格式并写入输出文件
    new_line="${display_name}|${touchscreen_name}|${vid}|${pid}|${usb_path}"
    echo "$new_line" >> "$OUTPUT_FILE"
    log_message "写入: $new_line"
    
done < "$INPUT_FILE"

# 清空UOS的触摸屏设置信息
if [ -f /usr/bin/gsettings ];then
    gsettings set com.deepin.dde.display map-output ''> /dev/null 2>&1
    if [ "$?" == "0" ];then
        log_message "成功清除UOS系统设置中的触摸屏设置信息"
    fi
fi

# 配置文件更新完成，进行一次试用
log_message "开始进行触摸效果测试，并进行二次确认。"
$workpath/screen_ds_once $tmppath/screen.txt
$workpath/touch_set

sleep 0.5

# 试用后询问用户是否保存
$workpath/check_save
if [ ! "$?" = "0" ];then
    # 用户点击了取消，恢复之前的设置
    log_message 用户点击了取消，恢复之前的设置.
    rm $workpath/config
    mv $workpath/config.bk $workpath/config

    # 最后写入0重新开启监控
    echo -n "0" > $tmppath/setflag
    
    notify-send -u low --icon=view-fullscreen -t 15000  "取消保存，已恢复之前的配置。"
else
    log_message 用户点击了确认,新的config将会保存

    # 最后写入0重新开启监控
    echo -n "0" > $tmppath/setflag

    log_message "处理完成，结果已保存到 $OUTPUT_FILE"
    notify-send -u low --icon=view-fullscreen -t 15000  "触摸屏映射工具 ktouch" "设置完成，请稍等15秒查看效果。"
fi

    if [ -f $workpath/config.bk ];then
        rm $workpath/config.bk
    fi

