#!/bin/bash

# 当前脚本版本
SCRIPT_VERSION="v8.00"

# 调试模式开关 (false) -  已关闭调试模式，移除所有调试代码
DEBUG="false"

# 设置 APK 版本号 JSON 文件所在目录
VERSION_DIR="/storage/emulated/0/0网站/下载专用/影视安装包更新/版本文件夹"

# 设置 GitHub 用户代理
user_agent="Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Mobile Safari/537.36 EdgA/121.0.0.0"

# 设置 GitHub 仓库地址
REPO="hc990275/apkdown"

# 下载加速服务地址，默认为空，表示不加速
ACCELERATION_BASE_URL=""

# 可选的加速服务列表，用户可以选择 (移除加速服务3)
declare -A ACCELERATION_OPTIONS=(
    ["1"]="不加速 (默认，可能需要 VPN/梯子)"
    ["2"]="加速服务1 (https://gh.xxooo.cf)"
    ["3"]="代理服务 - gh-proxy.com (备选代理，需测试)" # 原来的选项 4，编号改为 3
)

# TVbox 接口列表 (从用户提供的信息中提取) - 初始为空
declare -A TVBOX_INTERFACES=()


# 随机颜色函数
random_color() {
    echo $((31 + RANDOM % 7))  # 从 31 到 37 的颜色代码
}

# 带颜色的打印函数（加高亮和空格）
print_color() {
    color_code=$(random_color)
    echo -e "\e[${color_code}m\e[1m$1\e[0m"  # 使用 ANSI 颜色代码和高亮
    echo ""  # 添加额外空行
}
# 检查 MT 管理器拓展包是否安装
check_mt_extension() {
    print_color "🔍 正在检测 MT 管理器拓展包..."
    if pm list packages | grep -q "bin.mt.termex"; then
        print_color "✅ MT 管理器拓展包已安装"
    else
        print_color "❌ 未检测到 MT 管理器拓展包"
        print_color "⚠️ 请先安装 MT 管理器拓展包以确保脚本正常运行"
    fi
    print_color "请使用拓展包环境运行，不要使用系统环境运行。"
    echo "" # 增加空行
    print_color "请使用拓展包环境运行，不要使用系统环境运行。"
    echo "" # 增加空行
    print_color "请使用拓展包环境运行，不要使用系统环境运行。"
    echo "" # 增加空行
}

# 打印脚本版本
print_script_version() {
    print_color "🌟 当前脚本版本: $SCRIPT_VERSION"
}

# 检查并更新脚本 (使用 [ ] 替换 [[ ]] 增强 sh 兼容性)
check_and_update_script() {
    print_color "🔍 正在检查脚本更新..."

    # 获取最新发布信息
    response=$(curl -s -A "$user_agent" "https://api.github.com/repos/$REPO/releases/latest")
    latest_version=$(echo "$response" | grep -o '"tag_name": *"[^"]*"' | cut -d '"' -f 4)
    download_url=$(echo "$response" | grep -o '"browser_download_url": *"[^"]*\.sh"' | cut -d '"' -f 4)

    # 如果获取失败，则退出
    if [[ -z "$latest_version" || -z "$download_url" ]]; then
        print_color "❌ 无法获取最新版本信息，跳过更新。"
        return
    fi

    # 检查版本号 (使用 [ ] 替换 [[ ]])
    if [ "$latest_version" != "$SCRIPT_VERSION" ]; then
        print_color "⬇️ 发现新版本：$SCRIPT_VERSION -> $latest_version，正在更新..."
        new_script_name="软件更新脚本_$latest_version.sh"
        old_script_name="$0" # 获取当前脚本文件名

        # 下载新版本脚本
        curl -s -L -A "$user_agent" -o "$new_script_name" "$download_url"

        if [[ -f "$new_script_name" ]]; then
            chmod +x "$new_script_name"
            print_color "✅ 更新完成，新的脚本已下载为: $new_script_name"

            #  新增: 删除旧脚本
            rm -f "$old_script_name"
            print_color "🧹  旧脚本已删除: $old_script_name"

            print_color "🔁 请运行新脚本并退出当前脚本。"
            exit 0  # 退出当前脚本
        else
            print_color "❌ 脚本下载失败，保持当前版本。"
        fi
    else
        print_color "✅ 脚本已是最新版本（$SCRIPT_VERSION）"
    fi
}

# 询问用户是否使用加速服务 (使用 case 语句增强 sh 兼容性)
ask_acceleration_preference() {
    print_color "🚀 请选择下载加速服务："
    for key in "${!ACCELERATION_OPTIONS[@]}"; do
        print_color "   ${key}. ${ACCELERATION_OPTIONS[$key]}"
    done
    read -p "请选择 (1-${#ACCELERATION_OPTIONS[@]}): " choice

    # 输入校验：使用 case 语句兼容 sh，不再使用 [[ ]] 和 =~
    case "$choice" in
        1)
            ACCELERATION_BASE_URL="" # 选项 1，不加速
            print_color "✅ 已选择: ${ACCELERATION_OPTIONS[$choice]}"
            ;;
        2)
            ACCELERATION_BASE_URL="https://gh.xxooo.cf" # 选项 2，加速服务1
            print_color "✅ 已选择: ${ACCELERATION_OPTIONS[$choice]}"
            ;;
        3)
            ACCELERATION_BASE_URL="https://gh-proxy.com" # 选项 3，代理服务 - gh-proxy.com
            print_color "✅ 已选择: ${ACCELERATION_OPTIONS[$choice]}"
            ;;
        *) # 默认情况 (包括空输入或非法输入)
            ACCELERATION_BASE_URL=""
            print_color "❌ 无效选择，已设置为不加速 (默认)"
            ;;
    esac
    echo "" # 增加空行
}


# APK JSON 下载地址 (新增 OK版Pro)
declare -A urls=(
    ["OK版手机"]="https://raw.githubusercontent.com/FongMi/Release/okjack/apk/release/mobile.json"
    ["OK版电视"]="https://raw.githubusercontent.com/FongMi/Release/okjack/apk/release/leanback.json"
    ["蜜蜂版手机"]="https://raw.githubusercontent.com/FongMi/Release/fongmi/apk/release/mobile.json"
    ["蜜蜂版电视"]="https://raw.githubusercontent.com/FongMi/Release/fongmi/apk/release/leanback.json"
    ["OK版Pro"]="https://raw.githubusercontent.com/FongMi/Release/okjack/apk/pro/v.txt" # 新增 OK版Pro JSON 地址
)

# APK 下载链接 (新增 OK版Pro)
declare -A apk_links=(
    ["OK版手机_PY32"]="okjack/apk/release/mobile-python-armeabi_v7a.apk"
    ["OK版手机_PY64"]="okjack/apk/release/mobile-python-arm64_v8a.apk"
    ["OK版手机_JAVA32"]="okjack/apk/release/mobile-java-armeabi_v7a.apk"
    ["OK版手机_JAVA64"]="okjack/apk/release/mobile-java-arm64_v8a.apk"

    ["OK版电视_PY32"]="okjack/apk/release/leanback-python-armeabi_v7a.apk"
    ["OK版电视_PY64"]="okjack/apk/release/leanback-python-arm64_v8a.apk"
    ["OK版电视_JAVA32"]="okjack/apk/release/leanback-java-armeabi_v7a.apk"
    ["OK版电视_JAVA64"]="okjack/apk/release/leanback-java-arm64_v8a.apk"

    ["蜜蜂版手机_PY32"]="fongmi/apk/release/mobile-python-armeabi_v7a.apk"
    ["蜜蜂版手机_PY64"]="fongmi/apk/release/mobile-python-arm64_v8a.apk"
    ["蜜蜂版手机_JAVA32"]="fongmi/apk/release/mobile-java-armeabi_v7a.apk"
    ["蜜蜂版手机_JAVA64"]="fongmi/apk/release/mobile-java-arm64_v8a.apk"

    ["蜜蜂版电视_PY32"]="fongmi/apk/release/leanback-python-armeabi_v7a.apk"
    ["蜜蜂版电视_PY64"]="fongmi/apk/release/leanback-python-arm64_v8a.apk"
    ["蜜蜂版电视_JAVA32"]="fongmi/apk/release/leanback-java-armeabi_v7a.apk"
    ["蜜蜂版电视_JAVA64"]="fongmi/apk/release/leanback-java-arm64_v8a.apk"

    ["OK版Pro_手机Pro"]="okjack/apk/pro/mobile-pro.apk" # 新增 OK版Pro APK 下载链接
    ["OK版Pro_手机emu-Pro"]="okjack/apk/pro/mobile-emu-pro.apk" # 新增 OK版Pro APK 下载链接
    ["OK版Pro_电视Pro"]="okjack/apk/pro/leanback-pro.apk" # 新增 OK版Pro APK 下载链接
)

# 下载目录
download_dir="/storage/emulated/0/0网站/下载专用/影视安装包更新"
version_folder="$download_dir/版本文件夹"
mkdir -p "$version_folder"

# 下载 JSON 并比较版本号 (兼容 OK版Pro 的 v.txt 纯文本版本号)
check_json_update() {
    name=$1
    url=${urls[$name]}
    old_json_file="$version_folder/$name.json"
    new_json_file="$version_folder/${name}新.json"
    temp_json_file="$version_folder/${name}临时.json" #  新增: 临时 JSON 文件路径

    #  添加加速服务逻辑到 JSON 下载 URL
    local original_json_url="$url"
    if [[ -n "$ACCELERATION_BASE_URL" ]]; then
        url="${ACCELERATION_BASE_URL}/${original_json_url}"
    fi

    # 下载新 JSON 到临时文件
    curl -s -o "$temp_json_file" "$url"

    # 检查临时文件下载是否成功
    if [[ ! -f "$temp_json_file" || ! -s "$temp_json_file" ]]; then
        print_color "❌ 下载失败: $name JSON 文件"
        return 1  # 返回失败
    fi

    old_version=""
    new_version=""

    #  判断是否为 OK版Pro (v.txt 纯文本版本号)
    if [[ "$name" == "OK版Pro" ]]; then
        #  OK版Pro JSON (v.txt) 处理逻辑 (纯文本版本号)
        if [[ -f "$old_json_file" ]]; then
            old_version=$(head -n 1 "$old_json_file" | tr -d '\r')  # 读取第一行并去掉回车符
        fi
        new_version=$(head -n 1 "$temp_json_file" | tr -d '\r')  # 读取第一行并去掉回车符
    else
        #  其他 JSON 处理逻辑 (JSON 格式版本号)
        if [[ -f "$old_json_file" ]]; then
            old_version=$(grep '"name"' "$old_json_file" | cut -d '"' -f 4)
        fi
        new_version=$(grep '"name"' "$temp_json_file" | cut -d '"' -f 4)
    fi


    # 输出旧 JSON 的时间和版本号
    print_color "$name 旧.JSON的时间: $(stat --format='%y' "$old_json_file" 2>/dev/null | cut -d '.' -f 1) 版本号 $old_version"

    # 输出新 JSON 的时间和版本号
    print_color "$name 新.JSON的时间: $(stat --format='%y' "$temp_json_file" | cut -d '.' -f 1) 版本号 $new_version"

    # 版本号对比更新
    if [ "$new_version" != "$old_version" ]; then # 使用 [ ] 替换 [[ ]]
        print_color "🔄 发现新版本，更新 JSON 并下载 APK..."
        #  下载成功才替换，将临时文件重命名为正式文件
        mv -f "$temp_json_file" "$old_json_file"
        return 0
    else
        print_color "✅ 版本未变更，无需更新。"
        #  即使版本未更新，也删除临时文件，保持目录整洁
        rm -f "$temp_json_file"
        return 1  # 如果没有更新则返回 1
    fi
}

# 下载 APK
download_apk() {
    apk_name=$1
    apk_github_path="${apk_links[$apk_name]}"
    apk_path="$download_dir/$apk_name.apk"
    temp_apk_path="$download_dir/${apk_name}临时.apk" # 新增: 临时 APK 文件路径

    # 原始的 GitHub 文件 URL
    original_apk_url="https://raw.githubusercontent.com/FongMi/Release/${apk_github_path}"

    # 判断是否使用加速服务构建下载链接
    if [[ -n "$ACCELERATION_BASE_URL" ]]; then
        apk_url="${ACCELERATION_BASE_URL}/${original_apk_url}"
    else
        apk_url="$original_apk_url"
    fi

    print_color "⬇️ 正在下载: $apk_name.apk"

    # 下载 APK 到临时文件
    wget -q --show-progress -O "$temp_apk_path" "$apk_url"

    # 检测临时 APK 文件下载是否成功
    if [[ -f "$temp_apk_path" && -s "$temp_apk_path" ]]; then
        print_color "✅ 下载完成: $apk_name.apk"
        # 下载成功，将临时文件重命名为正式 APK 文件
        mv -f "$temp_apk_path" "$apk_path"
    else
        print_color "❌ 下载失败: $apk_name.apk"
        #  修改: 下载失败，删除临时文件，保持目录整洁
        rm -f "$temp_apk_path"
    fi
}

# 从 饭太硬 网站提取接口地址
extract_fantaiying_interfaces() {
    print_color "🔍 正在从 饭太硬 网站提取接口地址..."
    local jkurl="https://www.xn--sss604efuw.com/"
    local content=$(curl -s "$jkurl")
    echo "$content" | awk -v nc="$NC" 'BEGIN {
      FS="data-clipboard-text=\""
      srand()
    }
    /data-clipboard-text=/ {
      color_code = int(rand() * 6) + 31
      color = sprintf("\033[0;%sm", color_code)
      split($2,a,"\"")
      interface_name="饭太硬接口"  # 你可以使接口名称更具描述性
      TVBOX_INTERFACES[interface_name]=a[1] # 将提取的 URL 存储在 TVBOX_INTERFACES 数组中
      printf "  %s%s%s\n", color, a[1], nc
    }'
}

# 从 片库 提取接口地址
extract_pianku_interfaces() {
    print_color "🔍 正在从 片库 提取接口地址..."
    local jkurl1="https://jihulab.com/pk1/pianku/-/raw/master/square.json"
    local content=$(curl -s "$jkurl1")
    echo "$content" | awk -v nc="$NC" 'BEGIN {
      FS="\"url\":"
      srand()
    }
    /"url":/ {
      color_code = int(rand() * 6) + 31
      color = sprintf("\033[0;%sm", color_code)
      split($2,a,"\"")
      interface_name="片库接口" # 你可以使接口名称更具描述性
      TVBOX_INTERFACES[interface_name]=a[2] # 将提取的 URL 存储在 TVBOX_INTERFACES 数组中
      printf "  %s%s%s\n", color, a[2], nc
    }'
}


# 打印 TVbox 接口列表
print_tvbox_interfaces() {
    print_color "📢 欢迎关注我的公众号："
    print_color "👉  阿博可行笔记  |  阿博AI"
    print_color "获取更多实用工具和技术分享！"
    echo ""

    print_color "**TVbox 接口 (自动提取)**" #  表明接口是自动提取的
    if [ -z "${TVBOX_INTERFACES[@]}" ]; then # 检查数组是否为空
        print_color "❌  未能提取到接口地址，请检查网站是否可访问。"
    else
        for name in "${!TVBOX_INTERFACES[@]}"; do
            interface_url="${TVBOX_INTERFACES[$name]}"
            echo "  * **${name}:** [${interface_url}](${interface_url})"
        done
    fi
    echo ""
}



# 运行版本检查与更新
check_mt_extension
print_script_version
check_and_update_script
ask_acceleration_preference # 询问是否使用加速服务


# 可以开启 Shell 脚本的 xtrace 模式来进行更详细的调试
# set -x # 开启 xtrace 模式，会打印每一行命令的执行
# 检查 JSON 更新并下载 APK
for name in "${!urls[@]}"; do
    if check_json_update "$name"; then
        print_color "$name 检测到有更新，准备下载 APK..."
        #  根据不同的 name 下载不同的 APK
        if [[ "$name" == "OK版Pro" ]]; then
            download_apk "OK版Pro_手机Pro"
            download_apk "OK版Pro_手机emu-Pro"
            download_apk "OK版Pro_电视Pro"
        else
            download_apk "${name}_PY32"
            download_apk "${name}_PY64"
            download_apk "${name}_JAVA32"
            download_apk "${name}_JAVA64"
        fi
    fi
done
# set +x # 关闭 xtrace 模式

extract_fantaiying_interfaces # 提取饭太硬接口
#extract_pianku_interfaces # 提取片库接口

print_color "🎉 脚本全部操作完成！"
