#!/bin/bash

# ==================== 配置参数 ====================
URL="https://www.luoyeyun.icu/"
APPID="填自己的。"
APPKEY="填自己的。"
KAMI_FILE="/storage/emulated/0/kami.txt"
LOG_FILE="/storage/emulated/0/kami.log"

# 浏览器User-Agent
USER_AGENT="Mozilla/5.0 (Linux; Android 10; SM-G960F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36"

# ==================== 获取设备码 ====================
get_device_id() {
    if [[ -f "/system/build.prop" ]]; then
        local android_id=$(getprop ro.serialno 2>/dev/null)
        if [[ -n "$android_id" ]]; then
            echo "$android_id"
            return
        fi
    fi
    
    local mac=$(ifconfig 2>/dev/null | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}' | head -n 1)
    if [[ -n "$mac" ]]; then
        echo "$mac"
        return
    fi
    
    echo "DEV-$(date +%s)-$RANDOM"
}

# ==================== HTTP请求函数 ====================
http_request() {
    local api="$1"
    local kami="$2"
    local t=$(date +%s)
    
    # 生成MD5签名
    local sign_string="kami=${kami}&markcode=${MARKCODE}&t=${t}&${APPKEY}"
    local md5=$(echo -n "$sign_string" | md5sum | awk '{print $1}')
    
    # Base64编码数据
    local data="kami=${kami}&markcode=${MARKCODE}&t=${t}"
    local data1=$(echo -n "$data" | base64 -w 0)
    
    # 构建请求URL
    local api_url="${URL}api.php?api=${api}&app=${APPID}&kami=${kami}&markcode=${MARKCODE}&t=${t}&data=${data1}&sign=${md5}"
    
    # 发送请求（跟随重定向）
    local response=$(curl -s -L -k --connect-timeout 15 -A "$USER_AGENT" "${api_url}")
    
    if [[ -z "$response" ]]; then
        echo "❌ 请求失败，响应为空"
        return 1
    fi
    
    # 尝试解码
    local decoded=$(echo "$response" | base64 -d 2>/dev/null)
    
    if [[ $? -eq 0 ]] && [[ -n "$decoded" ]]; then
        echo "$decoded"
    else
        echo "$response"
    fi
}

# ==================== 处理API响应（修复版） ====================
handle_response() {
    local decoded="$1"
    
    # 使用更精确的方式提取JSON字段
    # 提取code（数字）
    local code=$(echo "$decoded" | grep -o '"code":[0-9]*' | grep -o '[0-9]*')
    
    # 提取msg中的kami
    local kami=$(echo "$decoded" | grep -o '"kami":"[^"]*"' | cut -d'"' -f4)
    
    # 提取msg中的vip
    local vip=$(echo "$decoded" | grep -o '"vip":"[^"]*"' | cut -d'"' -f4)
    
    # 提取time
    local time=$(echo "$decoded" | grep -o '"time":[0-9]*' | grep -o '[0-9]*')
    
    # 提取check
    local check=$(echo "$decoded" | grep -o '"check":"[^"]*"' | cut -d'"' -f4)
    
    echo ""
    echo "═══════════════════════════════════════"
    echo "📥 解析结果"
    echo "───────────────────────────────────────"
    echo "状态码: $code"
    echo "卡密: $kami"
    echo "VIP时间戳: $vip"
    echo "时间戳: $time"
    echo "校验码: $check"
    echo "───────────────────────────────────────"
    
    # 判断结果
    if [[ "$code" == "200" ]]; then
        echo "✅ 登录成功！"
        echo "🔑 卡密: $kami"
        
        if [[ -n "$vip" ]]; then
            # 判断是否为永久VIP（时间戳很大）
            if [[ "$vip" -gt 9999999999 ]]; then
                echo "⏰ 到期时间: 永久有效"
            else
                local expire_time=$(date -d "@$vip" "+%Y-%m-%d %H:%M:%S" 2>/dev/null)
                if [[ -n "$expire_time" ]]; then
                    echo "⏰ 到期时间: $expire_time"
                else
                    echo "⏰ 到期时间戳: $vip"
                fi
            fi
        fi
        
        # 保存卡密到文件
        echo "$kami" > "$KAMI_FILE"
        log_message "卡密登录成功: $kami"
        return 0
    else
        echo "❌ 操作失败"
        echo "📊 状态码: $code"
        
        # 尝试提取错误信息
        local msg=$(echo "$decoded" | grep -o '"msg":"[^"]*"' | cut -d'"' -f4)
        if [[ -n "$msg" ]]; then
            echo "💬 错误信息: $msg"
        fi
        return 1
    fi
}

# ==================== 日志函数 ====================
log_message() {
    local msg="$1"
    local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
    echo "[$timestamp] $msg" >> "$LOG_FILE"
}

# ==================== 主程序 ====================
main() {
    # 获取设备ID
    MARKCODE=$(get_device_id)
    echo "🖥️  设备标识: $MARKCODE"
    echo ""
    
    # 主循环
    local logged_in=false
    local current_kami=""
    
    while true; do
        if [[ "$logged_in" == true ]]; then
            echo ""
            echo "✅ 已登录状态，执行验证代码..."
            echo "═══════════════════════════════════════"
            echo "💡 提示: 按 Ctrl+C 退出"
            sleep 5
            continue
        fi
        
        echo ""
        echo "请选择操作:"
        echo "───────────────────────────────────────"
        echo "1. 🔑 卡密登录"
        echo "2. 🔓 卡密解绑"
        echo "3. ℹ️  获取应用配置"
        echo "4. 🔄 更换卡密"
        echo "5. 🚪 退出脚本"
        echo "───────────────────────────────────────"
        echo -n "请输入选项 [1-5]: "
        read option
        
        case "$option" in
            1)
                if [[ -f "$KAMI_FILE" ]]; then
                    current_kami=$(cat "$KAMI_FILE")
                    echo "📂 读取到卡密: $current_kami"
                    echo -n "是否使用此卡密登录？[Y/n]: "
                    read confirm
                    if [[ "$confirm" == "n" ]] || [[ "$confirm" == "N" ]]; then
                        echo -n "请输入新卡密: "
                        read current_kami
                    fi
                else
                    echo -n "请输入卡密: "
                    read current_kami
                fi
                
                current_kami=$(echo "$current_kami" | tr -d ' \t\n\r')
                
                decoded=$(http_request "kmlogon" "$current_kami")
                if [[ $? -eq 0 ]] && [[ -n "$decoded" ]]; then
                    if handle_response "$decoded"; then
                        logged_in=true
                    fi
                else
                    echo "❌ 请求失败"
                fi
                ;;
                
            2)
                echo -n "请输入要解绑的卡密: "
                read current_kami
                current_kami=$(echo "$current_kami" | tr -d ' \t\n\r')
                
                decoded=$(http_request "kmunmachine" "$current_kami")
                if [[ $? -eq 0 ]] && [[ -n "$decoded" ]]; then
                    handle_response "$decoded"
                fi
                ;;
                
            3)
                decoded=$(http_request "ini" "")
                if [[ $? -eq 0 ]] && [[ -n "$decoded" ]]; then
                    echo "$decoded" | jq '.' 2>/dev/null || echo "$decoded"
                fi
                ;;
                
            4)
                echo -n "请输入新的卡密: "
                read new_kami
                new_kami=$(echo "$new_kami" | tr -d ' \t\n\r')
                echo "$new_kami" > "$KAMI_FILE"
                echo "✅ 卡密已更新: $new_kami"
                current_kami="$new_kami"
                log_message "卡密已更换"
                ;;
                
            5)
                echo "👋 感谢使用，再见！"
                exit 0
                ;;
                
            *)
                echo "❌ 无效选项，请重新选择"
                ;;
        esac
    done
}

# ==================== 脚本入口 ====================
# 检查依赖
if ! command -v curl &> /dev/null; then
    echo "❌ 未找到 curl 命令，请安装 curl"
    exit 1
fi

if ! command -v md5sum &> /dev/null; then
    echo "❌ 未找到 md5sum 命令，请安装 coreutils"
    exit 1
fi

# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null

# 执行主程序
main "$@"