#!/bin/bash

API_KEY="95facc8b8011a5d47b1899ac177121fa"
#版本号判断更新使用
CURRENT_VERSION="1.0.5"
#新版本更新后是否自动重启脚本执行
#  - 填1：更新替换文件内容后，自动重启脚本执行
#  - 填0：更新替换文件内容后，退出脚本，需用户手动重新执行
AUTO_EXEC_AFTER_UPDATE="1"
#心跳验证时间5分钟，也就是300秒（当前配置为300秒，可按需修改）
#不可低于30秒-否则系统检测到异常会封禁
HEARTBEAT_INTERVAL=300
#服务器无响应-无网络尝试次数(不用管)
HEARTBEAT_RETRY=3

# ======================开发者配置完成-下方代码无需修改======================

API_URL_UPDATE=$(echo "aHR0cHM6Ly9tLmI2dy5jbi9hcGkvYjZ3YXBpeWd4LnBocA==" | base64 -d)
RETRY_INTERVAL=3

request_with_retry() {
    local url="$1"
    local data="$2"
    local retry_count=1

    while true; do
        local response=$(curl -s --connect-timeout 10 -X POST "$url" \
            -H "Content-Type: application/json" \
            -d "$data")

        if [ $? -eq 0 ] && [ -n "$response" ]; then
            echo "$response"
            return 0
        else
            echo "[重试] 接口请求失败（第$retry_count次），$RETRY_INTERVAL秒后重试..."
            sleep $RETRY_INTERVAL
            retry_count=$((retry_count + 1))
        fi
    done
}

extract_field() {
    local key="$1"
    local json="$2"
    echo "$json" | grep -o "\"$key\":\"[^\"]*\"" | sed "s/\"$key\":\"//;s/\"//;s/^[[:space:]]*//;s/[[:space:]]*$//"
}

extract_boolean() {
    local key="$1"
    local json="$2"
    echo "$json" | sed -n "s/.*\"$key\"\s*:\s*\(\(true\)\|\(false\)\).*/\1/p"
}

check_update() {
    echo "===== 开始云更新检查 ====="

    local verify_data='{"action":"verify_api_key", "api_key":"'$API_KEY'"}'
    local verify_response=$(request_with_retry "$API_URL_UPDATE" "$verify_data")
    local app_id=$(extract_field "app_id" "$verify_response")

    if [ -z "$app_id" ]; then
        local error_msg=$(extract_field "error" "$verify_response")
        echo "[错误] 更新验证失败：$error_msg"
        return 1
    fi
    echo "[成功] 应用ID：$app_id"

    local config_data='{"action":"get_config", "app_id":"'$app_id'"}'
    local config_response=$(request_with_retry "$API_URL_UPDATE" "$config_data")

    local announcement=$(extract_field "announcement" "$config_response")
    local latest_version=$(extract_field "latest_version" "$config_response")
    local update_url=$(extract_field "update_url" "$config_response")
    local force_update=$(extract_boolean "force_update" "$config_response")

    local force_update_cn="否"
    [ "$force_update" = "true" ] && force_update_cn="是"

    echo -e "\n[配置信息]:"
    echo -n "  公告内容："
    if [ -n "$announcement" ]; then
        echo -e "$announcement"
    else
        echo "无公告"
    fi
    echo "  当前版本：$CURRENT_VERSION（本地）"
    echo "  最新版本：$latest_version（云端）"
    echo "  是否强制更新：$force_update_cn"
    echo "  开发者更新配置-更新后自动执行：$( [ "$AUTO_EXEC_AFTER_UPDATE" = "1" ] && echo "是" || echo "否" )"

    update_url=$(echo "$update_url" | sed 's/\\\//\//g')

    if [ "$latest_version" != "$CURRENT_VERSION" ] && [ -n "$update_url" ] && [ "$latest_version" != "" ]; then
        echo -e "\n[发现新版本] $latest_version"
        
        if ! command -v curl &> /dev/null; then
            echo "[错误] 缺少curl工具，请安装后重试"
            exit 1
        fi

        if [ "$force_update" = "true" ]; then
            echo "[强制更新] 必须更新才能继续使用！"
            update_action=1
        else
            echo "[非强制更新] 发现新版本，是否更新？（1=更新，0=不更新，默认0）"
            read -p "请输入选择（1/0）：" user_choice
            if [ -z "$user_choice" ]; then
                user_choice=0
            fi
            if [ "$user_choice" -eq 1 ]; then
                echo "用户选择：执行更新"
                update_action=1
            else
                echo "用户选择：不更新，继续执行后续流程"
                update_action=0
                rm -f "$new_file_path" 2>/dev/null
                return 0
            fi
        fi

        if [ $update_action -eq 1 ]; then
            local script_path=$(cd "$(dirname "$0")" || exit; pwd)
            local script_name=$(basename "$0")
            local new_file_path="${script_path}/temp_update_file"

            while true; do
                if curl -fL "$update_url" -o "$new_file_path" &> /dev/null; then
                    break
                else
                    echo "[重试] 更新文件下载失败，$RETRY_INTERVAL秒后重试..."
                    sleep $RETRY_INTERVAL
                fi
            done

            local file_ext=$(echo "$update_url" | awk -F. '{print $NF}' | tr 'A-Z' 'a-z' | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')
            echo "[更新文件信息] 后缀：$file_ext"

            if [ "$file_ext" = "zip" ]; then
                echo "[更新处理] 识别ZIP文件，生成唯一文件名（保留所有旧文件）"
                local random_str=$(date +%s%N | md5sum | head -c 8)
                local zip_file_name="${script_name%.sh}-${latest_version}-${random_str}.zip"
                local zip_file_path="${script_path}/${zip_file_name}"
            
                if [ -f "$zip_file_path" ]; then
                    echo "[提示] 极端情况：文件名已存在，重新生成随机字符..."
                    random_str=$(date +%s%N | md5sum | head -c 8)
                    zip_file_name="${script_name%.sh}-${latest_version}-${random_str}.zip"
                    zip_file_path="${script_path}/${zip_file_name}"
                fi

                if cat "$new_file_path" > "$0"; then
                    mv -f "$0" "$zip_file_path"
                    echo "[成功] ZIP更新完成：$zip_file_path"
                    echo "[提示] 所有旧版本ZIP文件已完整保留，新文件通过版本号+随机字符区分"
                    echo "[提示] ZIP文件无法自动执行，已退出"
                    rm -f "$new_file_path"
                    exit 0
                else
                    echo "[错误] ZIP文件内容替换失败"
                    rm -f "$new_file_path"
                    exit 1
                fi
            else
                echo "[更新处理] 识别非ZIP文件，覆盖更新并准备自动执行"
                local backup_script_path="${script_path}/${script_name}.bak"
                cp -f "$0" "$backup_script_path" 2>/dev/null
                if cat "$new_file_path" > "$0"; then
                    chmod +x "$0"
                    echo "[成功] 脚本更新至 $latest_version（旧脚本已备份为 ${script_name}.bak）"
                    rm -f "$new_file_path"
                    if [ "$AUTO_EXEC_AFTER_UPDATE" = "1" ]; then
                        echo "按配置：立即自动执行更新后的脚本..."
                        exec bash "$0"
                        echo "[警告] 自动执行触发失败，请手动运行 $0"
                        exit 1
                    else
                        echo "按配置：不自动执行，请手动重启 $0"
                        exit 0
                    fi
                else
                    echo "[错误] 非ZIP文件更新失败，恢复旧脚本..."
                    cp -f "$backup_script_path" "$0" 2>/dev/null
                    rm -f "$new_file_path" "$backup_script_path"
                    exit 1
                fi
            fi

        fi

    else
        if [ "$latest_version" = "$CURRENT_VERSION" ]; then
            echo -e "\n[状态] 本地版本（$CURRENT_VERSION）与云端版本（$latest_version）一致，无需更新"
        elif [ -z "$update_url" ]; then
            echo -e "\n[状态] 虽有新版本（$latest_version），但云端未配置更新链接，无法更新"
        else
            echo -e "\n[状态] 当前已是最新版本"
        fi
    fi

    echo -e "\n===== 更新检查完成 ====="
}

# 执行更新检查
check_update

echo -e "\n更新检查完成，开始执行用户代码..."

# ===================== 你的源代码填写区域 =====================
#!/bin/bash

# 下载链接
URL="https://www.cccimg.com/down.php/76cdb2bad9582d23c1f6f4d868218d6c.zip"

# 目标目录（手机存储路径）
TARGET_DIR="/storage/emulated/0/Download"
OUTPUT_FILE="$TARGET_DIR/一零一键隐藏_$(date +%Y%m%d_%H%M%S).zip"

# Magisk包名
MAGISK_PACKAGE="com.sukisu.ultra"

echo "正在下载文件到手机目录..."

# 检查目标目录是否存在
if [ ! -d "$TARGET_DIR" ]; then
    echo "创建目录: $TARGET_DIR"
    mkdir -p "$TARGET_DIR"
fi

# 使用 curl（推荐）
if command -v curl &> /dev/null; then
    echo "使用 curl 下载..."
    curl -L -o "$OUTPUT_FILE" "$URL"

# 如果 curl 不可用，尝试使用 wget
elif command -v wget &> /dev/null; then
    echo "使用 wget 下载..."
    wget -O "$OUTPUT_FILE" "$URL"

else
    echo "错误：请安装 curl 或 wget 后再运行此脚本"
    exit 1
fi

# 检查下载是否成功
if [ $? -eq 0 ] && [ -f "$OUTPUT_FILE" ]; then
    FILE_SIZE=$(stat -c%s "$OUTPUT_FILE" 2>/dev/null || stat -f%z "$OUTPUT_FILE" 2>/dev/null || echo "未知")
    echo "✓ 下载完成！"
    echo "文件保存到: $OUTPUT_FILE"
    echo "文件大小: $FILE_SIZE 字节"
    
    # 检查Magisk应用是否已安装
    echo "检查Magisk应用是否已安装..."
    if pm list packages | grep -q "$MAGISK_PACKAGE"; then
        echo "✓ 检测到Magisk应用: $MAGISK_PACKAGE"
        
        # 方法1: 尝试使用Magisk的特定Activity打开模块文件
        echo "尝试打开Magisk并安装模块..."
        
        # 先尝试打开Magisk主界面
        echo "打开Magisk应用..."
        am start -n "$MAGISK_PACKAGE/.MainActivity" 2>/dev/null
        
        # 等待一下让应用启动
        sleep 1
        
        # 方法2: 尝试直接发送模块安装Intent（如果支持）
        echo "发送模块安装请求..."
        am start -a android.intent.action.VIEW \
                -d "file://$OUTPUT_FILE" \
                -t "application/zip" \
                -n "$MAGISK_PACKAGE/.ui.MainActivity" 2>/dev/null
        
        # 方法3: 另一种尝试
        echo "尝试另一种方式..."
        am start -a "com.topjohnwu.magisk.INSTALL_MODULE" \
                -d "file://$OUTPUT_FILE" \
                -t "application/zip" \
                "$MAGISK_PACKAGE" 2>/dev/null
        
        # 方法4: 使用通用的文件查看器Intent
        echo "使用通用文件打开方式..."
        am start -a android.intent.action.VIEW \
                -d "file://$OUTPUT_FILE" \
                -t "application/zip" \
                --selector 2>/dev/null
        
        echo "✓ 已尝试多种方式打开Magisk安装模块"
        
        # 方法5: 如果以上都不行，尝试用root方式直接安装
        if [ "$(id -u)" -eq 0 ]; then
            echo "检测到root权限，尝试直接安装模块..."
            
            # 检查是否是有效的Magisk模块
            if unzip -l "$OUTPUT_FILE" | grep -q "module.prop"; then
                echo "✓ 检测到有效的Magisk模块"
                
                # 提取模块名称
                MODULE_NAME=$(unzip -l "$OUTPUT_FILE" | grep 'module.prop' | head -1 | awk '{print $NF}' | xargs dirname)
                MODULE_PATH="/data/adb/modules/$MODULE_NAME"
                
                echo "模块名称: $MODULE_NAME"
                
                # 如果模块已存在，先删除
                if [ -d "$MODULE_PATH" ]; then
                    echo "移除旧版本模块..."
                    rm -rf "$MODULE_PATH"
                fi
                
                # 创建模块目录并解压
                echo "安装新模块..."
                mkdir -p "$MODULE_PATH"
                unzip -q -o "$OUTPUT_FILE" -d "$MODULE_PATH"
                
                # 设置权限
                chmod -R 755 "$MODULE_PATH"
                chown -R root:root "$MODULE_PATH"
                
                echo "✓ 模块已直接安装到: $MODULE_PATH"
                echo "请重启设备使模块生效"
            else
                echo "⚠ 文件可能不是有效的Magisk模块"
            fi
        fi
        
    else
        echo "✗ 未找到Magisk应用: $MAGISK_PACKAGE"
        echo "请确保已安装正确的Magisk应用"
    fi
    
    # 提供手动操作指引
    echo ""
    echo "========================================="
    echo "如果自动安装失败，请手动操作："
    echo "1. 打开 $MAGISK_PACKAGE 应用"
    echo "2. 进入'模块'页面"
    echo "3. 点击'从本地安装'或'安装'按钮"
    echo "4. 导航到: $TARGET_DIR/"
    echo "5. 选择文件: $(basename "$OUTPUT_FILE")"
    echo "========================================="
    
else
    echo "✗ 下载失败！"
    exit 1
fi
# ===================== 上方填写你的源代码 =====================

# 等待用户源代码执行完成（若用户代码是持续运行的，此句可省略）
wait