#!/bin/sh

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

# 检查是否以root权限运行脚本
if [ "$(id -u)" != "0" ]; then
  echo -e "${COLOR_GREEN}错误提示:${RESET_SEQ} 请使用root权限运行此脚本。" 1>&2
  exit 1
fi

# 获取当前内核版本
kernel_version=$(uname -r)
echo -e "${YELLOW} 当前手机内核版本: $kernel_version${NC}\n"

# 查找当前目录下所有 .ko 文件
ko_files=$(ls *.ko 2>/dev/null)
if [ -z "$ko_files" ]; then
    echo -e "${RED} 错误：当前目录下未找到任何 .ko 驱动文件。${NC}"
    echo -e "${RED} 错误：检查是否成功全部解压。${NC}"
    echo -e "${RED} 错误：检查是否成功全部解压。${NC}"
    echo -e "${RED} 错误：检查是否成功全部解压。${NC}"
    exit 1
fi

# 将文件列表设置为位置参数
set -- $ko_files
file_count=$#

# 显示驱动列表
echo -e "\n${GREEN} 可用驱动文件：${NC}"
i=1
for f in "$@"; do
    echo " ($i) $f"
    i=$((i+1))
done

# 选择驱动文件
while true; do
    printf "\n 请输入驱动文件序号 (1-$file_count，或输入 0 退出): "
    read choice

    # 去除可能的回车符（解决 Windows 换行问题）
    choice=$(printf "%s" "$choice" | tr -d '\r')

    if [ "$choice" = "0" ]; then
        echo " 退出。"
        exit 0
    fi

    # 检查输入是否为纯数字
    case "$choice" in
        ''|*[!0-9]*)
            echo -e "${RED} 无效输入，请输入数字。${NC}"
            continue
            ;;
    esac

    # 检查数字范围
    if [ "$choice" -ge 1 ] 2>/dev/null && [ "$choice" -le "$file_count" ] 2>/dev/null; then
        # 使用 eval 获取对应位置参数的值
        eval "selected_file=\${$choice}"
        echo -e "${GREEN} 已选择: $selected_file${NC}"
        break
    else
        echo -e "${RED} 序号超出范围，请重新输入。${NC}"
    fi
done

# 提取模块名（去掉 .ko 后缀）
module_name=$(basename "$selected_file" .ko)

# 操作菜单
while true; do
    echo -e "\n${GREEN} 请选择操作：${NC}"
    echo " (1) 安装驱动"
    echo " (2) 卸载驱动"
    echo " (3) 重新选择驱动"
    echo " (0) 退出"
    printf " 请输入选项 (0/1/2/3): "
    read op
    op=$(printf "%s" "$op" | tr -d '\r')   # 同样去除回车

    case $op in
        1)
            echo -e "${YELLOW} 正在安装 $selected_file ...${NC}"
            if insmod "$selected_file" 2>/dev/null; then
                echo -e "${GREEN} 驱动安装成功！${NC}"
            else
                dmesg | tail -50
                echo -e "${RED} 驱动安装失败，请检查权限或驱动文件是否兼容。${NC}"
                
                echo -e "${GREEN} 把上面的失败日志保存文本发送给牛逼哥${NC}"
                echo -e "${GREEN} 把上面的失败日志保存文本发送给牛逼哥${NC}"
                echo -e "${GREEN} 把上面的失败日志保存文本发送给牛逼哥${NC}"
            fi
            ;;
        2)
            echo -e "${YELLOW} 正在卸载模块 $module_name ...${NC}"
            if rmmod "$module_name" 2>/dev/null; then
                echo -e "${GREEN} 驱动卸载成功！${NC}"
            else
                echo -e "\n${RED} 卸载失败，已隐藏驱动无法卸载。${NC}"
                echo -e "${RED} 需要卸载重启手机即可。${NC}"
                
                echo -e "\n${YELLOW} 当前已加载的模块中可能包含：${NC}"
                lsmod | grep -E "^$module_name" || echo " 未找到相关模块。"
            fi
            ;;
        3)
            # 重新选择驱动：重新执行脚本
            exec "$0"
            ;;
        0)
            echo " 退出。"
            exit 0
            ;;
        *)
            echo -e "${RED} 无效选项，请重新输入。${NC}"
            ;;
    esac
done