#!/bin/sh
# DNS性能综合测试脚本 v4.0 - 国际增强版
# 安装依赖: opkg update && opkg install bind-dig

# DNS服务器配置
# 国内常见DNS (5个)
DOMESTIC_DNS="223.5.5.5 180.184.1.1 119.29.29.29 180.76.76.76 114.114.114.114"
# 国内教育DNS (2个)  
EDU_DNS="159.226.8.6 202.112.80.106"
# 国外常用DNS (5个)
FOREIGN_DNS="8.8.8.8 8.8.4.4 1.1.1.1 1.0.0.1 208.67.222.222"
# 国际专业DNS (8个)
INTERNATIONAL_DNS="9.9.9.9 149.112.112.112 76.76.19.19 76.223.100.101 94.140.14.14 94.140.15.15 185.228.168.9 185.228.169.9"

# 默认使用所有DNS
DEFAULT_DNSSERVERS="$DOMESTIC_DNS $EDU_DNS $FOREIGN_DNS"
INTERNATIONAL_DNSSERVERS="$FOREIGN_DNS $INTERNATIONAL_DNS"

# 测试域名配置
# 国内常用网站 (5个)
DOMESTIC_DOMAINS="www.baidu.com www.qq.com www.taobao.com www.weibo.com www.bilibili.com"
# 被屏蔽的国外网站 (5个)
BLOCKED_DOMAINS="www.google.com www.youtube.com www.facebook.com www.twitter.com www.instagram.com"
# 成人内容网站 (5个) - 用于测试DNS过滤
ADULT_DOMAINS="pornhub.com xvideos.com xhamster.com redtube.com youporn.com"

# 国际媒体网站 (10个)
INTL_MEDIA_DOMAINS="www.netflix.com www.hulu.com www.disney.com www.amazon.com www.spotify.com www.twitch.tv www.reddit.com www.tiktok.com www.snapchat.com www.linkedin.com"

# 国际成人网站 (10个)
INTL_ADULT_DOMAINS="pornhub.com xvideos.com xhamster.com redtube.com youporn.com xnxx.com tube8.com spankbang.com beeg.com sex.com"

# 国际新闻网站 (10个)
INTL_NEWS_DOMAINS="www.cnn.com www.bbc.com www.reuters.com www.nytimes.com www.washingtonpost.com www.theguardian.com www.wsj.com www.bloomberg.com www.ft.com www.economist.com"

# 默认测试域名
DEFAULT_DOMAINS="$DOMESTIC_DOMAINS $BLOCKED_DOMAINS $ADULT_DOMAINS"
INTERNATIONAL_DOMAINS="$INTL_MEDIA_DOMAINS $INTL_ADULT_DOMAINS $INTL_NEWS_DOMAINS"

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
GRAY='\033[0;90m'
NC='\033[0m'

# 打印带颜色的文本
print_color() {
    printf "${1}${2}${NC}\n"
}

# 用户交互配置
get_user_input() {
    print_color $CYAN "╔══════════════════════════════════════╗"
    print_color $CYAN "║        DNS性能测试工具 v4.0          ║"
    print_color $CYAN "║         国际增强版 - 详细报告        ║"
    print_color $CYAN "╚══════════════════════════════════════╝"
    echo
    
    print_color $YELLOW "默认配置预览:"
    printf "${BLUE}国内DNS:${NC} %s\n" "$DOMESTIC_DNS"
    printf "${BLUE}教育DNS:${NC} %s\n" "$EDU_DNS"
    printf "${BLUE}国外DNS:${NC} %s\n" "$FOREIGN_DNS"
    printf "${BLUE}国际DNS:${NC} %s\n" "$INTERNATIONAL_DNS"
    echo
    printf "${BLUE}国内域名:${NC} %s\n" "$DOMESTIC_DOMAINS"
    printf "${BLUE}国外域名:${NC} %s\n" "$BLOCKED_DOMAINS"
    printf "${BLUE}国际媒体:${NC} %s\n" "$INTL_MEDIA_DOMAINS"
    printf "${BLUE}国际新闻:${NC} %s\n" "$INTL_NEWS_DOMAINS"
    printf "${GRAY}成人内容:${NC} %s\n" "$INTL_ADULT_DOMAINS"
    echo
    
    printf "${YELLOW}选择测试模式:${NC}\n"
    printf "1) 完整测试 (默认) - 测试所有DNS和国内域名\n"
    printf "2) 快速测试 - 仅测试国内DNS和域名\n"
    printf "3) 国际测试 - 测试国际DNS和国际网站\n"
    printf "4) 全球测试 - 测试所有DNS和所有域名\n"
    printf "5) 自定义配置\n"
    printf "直接回车或输入数字: "
    
    read choice
    
    case "$choice" in
        "2")
            DNSSERVERS="$DOMESTIC_DNS"
            DOMAINS="$DOMESTIC_DOMAINS"
            TEST_ROUNDS=2
            TEST_MODE="快速测试"
            print_color $GREEN "已选择: 快速测试模式"
            ;;
        "3")
            DNSSERVERS="$INTERNATIONAL_DNSSERVERS"
            DOMAINS="$INTERNATIONAL_DOMAINS"
            TEST_ROUNDS=3
            TEST_MODE="国际测试"
            print_color $GREEN "已选择: 国际测试模式"
            ;;
        "4")
            DNSSERVERS="$DEFAULT_DNSSERVERS $INTERNATIONAL_DNS"
            DOMAINS="$DEFAULT_DOMAINS $INTERNATIONAL_DOMAINS"
            TEST_ROUNDS=3
            TEST_MODE="全球测试"
            print_color $GREEN "已选择: 全球测试模式"
            ;;
        "5")
            echo
            printf "DNS服务器选择:\n"
            printf "1) 国内DNS: %s\n" "$DOMESTIC_DNS"
            printf "2) 国外DNS: %s\n" "$FOREIGN_DNS"
            printf "3) 国际DNS: %s\n" "$INTERNATIONAL_DNS"
            printf "4) 全部DNS\n"
            printf "5) 自定义输入\n"
            printf "选择DNS类型 (1-5): "
            read dns_choice
            
            case "$dns_choice" in
                "1") DNSSERVERS="$DOMESTIC_DNS" ;;
                "2") DNSSERVERS="$FOREIGN_DNS" ;;
                "3") DNSSERVERS="$INTERNATIONAL_DNS" ;;
                "4") DNSSERVERS="$DEFAULT_DNSSERVERS $INTERNATIONAL_DNS" ;;
                "5") 
                    printf "输入DNS服务器 (空格分隔): "
                    read custom_dns
                    DNSSERVERS="$custom_dns"
                    ;;
                *) DNSSERVERS="$DEFAULT_DNSSERVERS" ;;
            esac
            
            echo
            printf "测试域名选择:\n"
            printf "1) 国内域名: %s\n" "$DOMESTIC_DOMAINS"
            printf "2) 国外域名: %s\n" "$BLOCKED_DOMAINS"
            printf "3) 国际媒体: %s\n" "$INTL_MEDIA_DOMAINS"
            printf "4) 国际新闻: %s\n" "$INTL_NEWS_DOMAINS"
            printf "5) 成人内容: %s\n" "$INTL_ADULT_DOMAINS"
            printf "6) 全部域名\n"
            printf "7) 自定义输入\n"
            printf "选择域名类型 (1-7): "
            read domain_choice
            
            case "$domain_choice" in
                "1") DOMAINS="$DOMESTIC_DOMAINS" ;;
                "2") DOMAINS="$BLOCKED_DOMAINS" ;;
                "3") DOMAINS="$INTL_MEDIA_DOMAINS" ;;
                "4") DOMAINS="$INTL_NEWS_DOMAINS" ;;
                "5") DOMAINS="$INTL_ADULT_DOMAINS" ;;
                "6") DOMAINS="$DEFAULT_DOMAINS $INTERNATIONAL_DOMAINS" ;;
                "7")
                    printf "输入测试域名 (空格分隔): "
                    read custom_domains
                    DOMAINS="$custom_domains"
                    ;;
                *) DOMAINS="$DEFAULT_DOMAINS" ;;
            esac
            
            printf "测试轮数 (1-5, 默认3): "
            read rounds
            if echo "$rounds" | grep -q '^[1-5]$'; then
                TEST_ROUNDS=$rounds
            else
                TEST_ROUNDS=3
            fi
            TEST_MODE="自定义配置"
            print_color $GREEN "已选择: 自定义配置"
            ;;
        *)
            DNSSERVERS="$DEFAULT_DNSSERVERS"
            DOMAINS="$DEFAULT_DOMAINS"
            TEST_ROUNDS=3
            TEST_MODE="完整测试"
            print_color $GREEN "已选择: 完整测试模式"
            ;;
    esac
    
    echo
    print_color $CYAN "开始 $TEST_MODE，请稍候..."
    echo
}

# DNS类型识别
get_dns_type() {
    dns=$1
    case "$dns" in
        223.5.5.5|223.6.6.6) echo "阿里DNS" ;;
        180.184.1.1) echo "电信DNS" ;;
        119.29.29.29) echo "腾讯DNS" ;;
        180.76.76.76) echo "百度DNS" ;;
        114.114.114.114) echo "114DNS" ;;
        159.226.8.6|202.112.80.106) echo "教育网DNS" ;;
        8.8.8.8|8.8.4.4) echo "Google DNS" ;;
        1.1.1.1|1.0.0.1) echo "Cloudflare DNS" ;;
        208.67.222.222) echo "OpenDNS" ;;
        9.9.9.9|149.112.112.112) echo "Quad9 DNS" ;;
        76.76.19.19|76.223.100.101) echo "Comodo DNS" ;;
        94.140.14.14|94.140.15.15) echo "AdGuard DNS" ;;
        185.228.168.9|185.228.169.9) echo "CleanBrowsing DNS" ;;
        *) echo "其他DNS" ;;
    esac
}

# 域名类型识别
get_domain_type() {
    domain=$1
    case "$domain" in
        # 国内域名
        *.baidu.com|*.qq.com|*.taobao.com|*.weibo.com|*.bilibili.com) echo "国内" ;;
        # 被墙域名
        *.google.com|*.youtube.com|*.facebook.com|*.twitter.com|*.instagram.com) echo "被墙" ;;
        # 国际媒体
        *.netflix.com|*.hulu.com|*.disney.com|*.amazon.com|*.spotify.com|*.twitch.tv|*.reddit.com|*.tiktok.com|*.snapchat.com|*.linkedin.com) echo "国际媒体" ;;
        # 国际新闻
        *.cnn.com|*.bbc.com|*.reuters.com|*.nytimes.com|*.washingtonpost.com|*.theguardian.com|*.wsj.com|*.bloomberg.com|*.ft.com|*.economist.com) echo "国际新闻" ;;
        # 成人内容
        pornhub.com|xvideos.com|xhamster.com|redtube.com|youporn.com|xnxx.com|tube8.com|spankbang.com|beeg.com|sex.com) echo "成人" ;;
        *) echo "其他" ;;
    esac
}

# DNS ping延迟测试
test_dns_ping() {
    dns=$1
    # 使用ping命令测试DNS服务器延迟，发送3个包
    ping_result=$(ping -c 3 -W 2 "$dns" 2>/dev/null | grep "round-trip\|rtt" | tail -1)
    
    if [ -n "$ping_result" ]; then
        # 提取平均延迟时间
        avg_ping=$(echo "$ping_result" | awk -F'/' '{print $5}' | awk -F'.' '{print $1}')
        if [ -z "$avg_ping" ]; then
            # 尝试另一种格式提取
            avg_ping=$(echo "$ping_result" | awk '{for(i=1;i<=NF;i++){if($i~/avg/){split($(i+2),a,"/"); print int(a[1]); break}}}')
        fi
        
        if [ -n "$avg_ping" ] && [ "$avg_ping" -gt 0 ] 2>/dev/null; then
            echo "$avg_ping"
        else
            echo "999"
        fi
    else
        echo "999"
    fi
}

# DNS性能测试
test_dns() {
    dns=$1
    dns_type=$(get_dns_type "$dns")
    
    # 清理失败域名列表文件
    > "/tmp/dns_failed_${dns}.tmp"
    
    total_time=0
    success_count=0
    total_count=0
    domestic_success=0
    blocked_success=0
    adult_success=0
    intl_media_success=0
    intl_news_success=0
    domestic_total=0
    blocked_total=0
    adult_total=0
    intl_media_total=0
    intl_news_total=0
    
    printf "${BLUE}🔍 测试 %-15s [%s]${NC}\n" "$dns" "$dns_type"
    
    # 首先测试DNS服务器的ping延迟
    printf "   正在测试ping延迟..."
    ping_latency=$(test_dns_ping "$dns")
    if [ "$ping_latency" != "999" ]; then
        printf " ${GREEN}%dms${NC}\n" "$ping_latency"
    else
        printf " ${RED}超时${NC}\n"
    fi
    
    for round in $(seq 1 $TEST_ROUNDS); do
        if [ $TEST_ROUNDS -gt 1 ]; then
            printf "   第%d轮: " "$round"
        fi
        
        round_success=0
        round_total=0
        
        for domain in $DOMAINS; do
            domain_type=$(get_domain_type "$domain")
            total_count=$((total_count + 1))
            round_total=$((round_total + 1))
            
            case "$domain_type" in
                "国内") domestic_total=$((domestic_total + 1)) ;;
                "被墙") blocked_total=$((blocked_total + 1)) ;;
                "成人") adult_total=$((adult_total + 1)) ;;
                "国际媒体") intl_media_total=$((intl_media_total + 1)) ;;
                "国际新闻") intl_news_total=$((intl_news_total + 1)) ;;
            esac
            
            # DNS查询测试
            result=$(dig @$dns $domain +stats +tries=1 +time=3 2>/dev/null)
            qtime=$(echo "$result" | grep "Query time" | awk '{print $4}')
            
            if [ -n "$qtime" ] && [ "$qtime" -gt 0 ] 2>/dev/null; then
                total_time=$((total_time + qtime))
                success_count=$((success_count + 1))
                round_success=$((round_success + 1))
                
                case "$domain_type" in
                    "国内") domestic_success=$((domestic_success + 1)) ;;
                    "被墙") blocked_success=$((blocked_success + 1)) ;;
                    "成人") adult_success=$((adult_success + 1)) ;;
                    "国际媒体") intl_media_success=$((intl_media_success + 1)) ;;
                    "国际新闻") intl_news_success=$((intl_news_success + 1)) ;;
                esac
            else
                # 记录失败的域名和原因
                error_reason="超时"
                if echo "$result" | grep -q "SERVFAIL"; then
                    error_reason="服务器错误"
                elif echo "$result" | grep -q "NXDOMAIN"; then
                    error_reason="域名不存在"
                elif echo "$result" | grep -q "connection timed out"; then
                    error_reason="连接超时"
                fi
                echo "${domain}:${domain_type}:${error_reason}" >> "/tmp/dns_failed_${dns}.tmp"
            fi
        done
        
        if [ $TEST_ROUNDS -gt 1 ]; then
            printf "%d/%d " "$round_success" "$round_total"
            if [ $round -lt $TEST_ROUNDS ]; then
                printf "| "
            else
                printf "\n"
            fi
        fi
    done
    
    # 计算统计数据
    if [ $success_count -gt 0 ]; then
        avg_time=$((total_time / success_count))
        success_rate=$((success_count * 100 / total_count))
        
        # 分类解析率
        if [ $domestic_total -gt 0 ]; then
            domestic_rate=$((domestic_success * 100 / domestic_total))
        else
            domestic_rate=0
        fi
        
        if [ $blocked_total -gt 0 ]; then
            blocked_rate=$((blocked_success * 100 / blocked_total))
        else
            blocked_rate=0
        fi
        
        if [ $adult_total -gt 0 ]; then
            adult_rate=$((adult_success * 100 / adult_total))
        else  
            adult_rate=0
        fi
        
        if [ $intl_media_total -gt 0 ]; then
            intl_media_rate=$((intl_media_success * 100 / intl_media_total))
        else
            intl_media_rate=0
        fi
        
        if [ $intl_news_total -gt 0 ]; then
            intl_news_rate=$((intl_news_success * 100 / intl_news_total))
        else
            intl_news_rate=0
        fi
        
        # 综合评分计算
        if [ $avg_time -lt 30 ]; then
            speed_score=100
        elif [ $avg_time -lt 50 ]; then
            speed_score=$((100 - (avg_time - 30)))
        elif [ $avg_time -lt 100 ]; then
            speed_score=$((80 - (avg_time - 50) / 2))
        elif [ $avg_time -lt 300 ]; then
            speed_score=$((55 - (avg_time - 100) / 10))
        else
            temp_score=$((35 - (avg_time - 300) / 20))
            if [ $temp_score -lt 5 ]; then
                speed_score=5
            else
                speed_score=$temp_score
            fi
        fi
        
        if [ $speed_score -lt 0 ]; then
            speed_score=0
        fi
        
        # 综合评分: 成功率40% + 速度30% + 媒体/新闻解析30%
        media_news_avg=$(((intl_media_rate + intl_news_rate) / 2))
        if [ $domestic_total -gt 0 ]; then
            composite_score=$(((success_rate * 40 + speed_score * 30 + domestic_rate * 30) / 100))
        else
            composite_score=$(((success_rate * 40 + speed_score * 30 + media_news_avg * 30) / 100))
        fi
        
        # 输出统计结果
        printf "   ${GREEN}总成功率: %3d%% (%2d/%2d)${NC} | " "$success_rate" "$success_count" "$total_count"
        printf "${GREEN}平均延迟: %3dms${NC} | " "$avg_time"
        printf "${BLUE}Ping延迟: %3dms${NC}\n" "$ping_latency"
        
        # 显示分类解析率
        printf "   分类解析: "
        if [ $domestic_total -gt 0 ]; then
            printf "${GREEN}国内:%d%%${NC} " "$domestic_rate"
        fi
        if [ $blocked_total -gt 0 ]; then
            if [ $blocked_rate -gt 80 ]; then
                printf "${YELLOW}被墙:%d%%${NC} " "$blocked_rate"
            else
                printf "${RED}被墙:%d%%${NC} " "$blocked_rate"
            fi
        fi
        if [ $intl_media_total -gt 0 ]; then
            printf "${CYAN}媒体:%d%%${NC} " "$intl_media_rate"
        fi
        if [ $intl_news_total -gt 0 ]; then
            printf "${PURPLE}新闻:%d%%${NC} " "$intl_news_rate"
        fi
        if [ $adult_total -gt 0 ]; then
            if [ $adult_rate -lt 50 ]; then
                printf "${GREEN}过滤:%d%%${NC}" "$((100 - adult_rate))"
            else
                printf "${RED}成人:%d%%${NC}" "$adult_rate"
            fi
        fi
        printf "\n"
        
        printf "   ${PURPLE}综合评分: %d/100${NC}\n" "$composite_score"
        
        # 保存结果
        echo "$composite_score:$dns:$avg_time:$success_rate:$domestic_rate:$blocked_rate:$adult_rate:$dns_type:$ping_latency:$intl_media_rate:$intl_news_rate" >> /tmp/dns_results.tmp
    else
        printf "   ${RED}总成功率: 0%% (0/%d) | 平均延迟: 超时 | Ping延迟: %dms${NC}\n" "$total_count" "$ping_latency"
        printf "   ${RED}综合评分: 0/100${NC}\n"
        echo "0:$dns:9999:0:0:0:0:$dns_type:$ping_latency:0:0" >> /tmp/dns_results.tmp
    fi
    
    # 显示失败的域名详情
    if [ -s "/tmp/dns_failed_${dns}.tmp" ]; then
        failed_count=$(wc -l < "/tmp/dns_failed_${dns}.tmp")
        printf "   ${RED}失败域名 (%d个):${NC}\n" "$failed_count"
        
        # 按类型分组显示失败域名
        domestic_failed=""
        blocked_failed=""
        adult_failed=""
        media_failed=""
        news_failed=""
        other_failed=""
        
        while IFS=: read -r domain domain_type error_reason; do
            case "$domain_type" in
                "国内") 
                    if [ -z "$domestic_failed" ]; then
                        domestic_failed="$domain($error_reason)"
                    else
                        domestic_failed="$domestic_failed, $domain($error_reason)"
                    fi
                    ;;
                "被墙")
                    if [ -z "$blocked_failed" ]; then
                        blocked_failed="$domain($error_reason)"
                    else
                        blocked_failed="$blocked_failed, $domain($error_reason)"
                    fi
                    ;;
                "成人")
                    if [ -z "$adult_failed" ]; then
                        adult_failed="$domain($error_reason)"
                    else
                        adult_failed="$adult_failed, $domain($error_reason)"
                    fi
                    ;;
                "国际媒体")
                    if [ -z "$media_failed" ]; then
                        media_failed="$domain($error_reason)"
                    else
                        media_failed="$media_failed, $domain($error_reason)"
                    fi
                    ;;
                "国际新闻")
                    if [ -z "$news_failed" ]; then
                        news_failed="$domain($error_reason)"
                    else
                        news_failed="$news_failed, $domain($error_reason)"
                    fi
                    ;;
                *)
                    if [ -z "$other_failed" ]; then
                        other_failed="$domain($error_reason)"
                    else
                        other_failed="$other_failed, $domain($error_reason)"
                    fi
                    ;;
            esac
        done < "/tmp/dns_failed_${dns}.tmp"
        
        if [ -n "$domestic_failed" ]; then
            printf "     ${RED}国内: %s${NC}\n" "$domestic_failed"
        fi
        if [ -n "$blocked_failed" ]; then
            printf "     ${YELLOW}被墙: %s${NC}\n" "$blocked_failed"
        fi
        if [ -n "$media_failed" ]; then
            printf "     ${CYAN}媒体: %s${NC}\n" "$media_failed"
        fi
        if [ -n "$news_failed" ]; then
            printf "     ${PURPLE}新闻: %s${NC}\n" "$news_failed"
        fi
        if [ -n "$adult_failed" ]; then
            printf "     ${GRAY}成人: %s${NC}\n" "$adult_failed"
        fi
        if [ -n "$other_failed" ]; then
            printf "     ${BLUE}其他: %s${NC}\n" "$other_failed"
        fi
    fi
    
    echo
    # 清理临时文件
    rm -f "/tmp/dns_failed_${dns}.tmp"
}

# 显示最终排名和推荐
show_results() {
    print_color $CYAN "╔══════════════════════════════════════╗"
    print_color $CYAN "║           DNS性能排名报告            ║"
    print_color $CYAN "╚══════════════════════════════════════╝"
    echo
    
    rank=1
    best_dns=""
    best_domestic=""
    best_unblocked=""
    best_international=""
    
    sort -rn -t: -k1 /tmp/dns_results.tmp | while IFS=: read -r score dns avg_time success_rate domestic_rate blocked_rate adult_rate dns_type ping_latency intl_media_rate intl_news_rate; do
        case $rank in
            1)
                printf "${GREEN}🥇 第%d名: %-15s [%s]${NC}\n" "$rank" "$dns" "$dns_type"
                printf "${GREEN}   综合评分: %d/100 | DNS延迟: %dms | Ping延迟: %dms | 成功率: %d%%${NC}\n" "$score" "$avg_time" "$ping_latency" "$success_rate"
                best_dns=$dns
                ;;
            2)
                printf "${YELLOW}🥈 第%d名: %-15s [%s]${NC}\n" "$rank" "$dns" "$dns_type"
                printf "${YELLOW}   综合评分: %d/100 | DNS延迟: %dms | Ping延迟: %dms | 成功率: %d%%${NC}\n" "$score" "$avg_time" "$ping_latency" "$success_rate"
                ;;
            3)
                printf "${PURPLE}🥉 第%d名: %-15s [%s]${NC}\n" "$rank" "$dns" "$dns_type"
                printf "${PURPLE}   综合评分: %d/100 | DNS延迟: %dms | Ping延迟: %dms | 成功率: %d%%${NC}\n" "$score" "$avg_time" "$ping_latency" "$success_rate"
                ;;
            *)
                printf "%2d. %-15s [%-15s] 评分:%3d DNS:%3dms Ping:%3dms 成功率:%3d%%\n" "$rank" "$dns" "$dns_type" "$score" "$avg_time" "$ping_latency" "$success_rate"
                ;;
        esac
        
        rank=$((rank + 1))
    done
    
    # 读取最佳DNS推荐
    best_dns=$(sort -rn -t: -k1 /tmp/dns_results.tmp | head -1 | cut -d: -f2)
    best_domestic=$(sort -rn -t: -k1 /tmp/dns_results.tmp | grep -E "(阿里|腾讯|百度|114|电信)" | head -1 | cut -d: -f2)
    best_unblocked=$(sort -rn -t: -k1 /tmp/dns_results.tmp | awk -F: '$6 > 80' | head -1 | cut -d: -f2)
    best_international=$(sort -rn -t: -k1 /tmp/dns_results.tmp | grep -E "(Google|Cloudflare|Quad9|OpenDNS|AdGuard|CleanBrowsing)" | head -1 | cut -d: -f2)
    
    echo
    print_color $CYAN "╔══════════════════════════════════════╗"
    print_color $CYAN "║              使用建议                ║"
    print_color $CYAN "╚══════════════════════════════════════╝"
    
    if [ -n "$best_dns" ]; then
        printf "${GREEN}🌟 综合最佳: %s${NC}\n" "$best_dns"
    fi
    
    if [ -n "$best_domestic" ]; then
        printf "${BLUE}🏠 国内推荐: %s${NC}\n" "$best_domestic"
    fi
    
    if [ -n "$best_unblocked" ]; then
        printf "${YELLOW}🌍 翻墙推荐: %s${NC}\n" "$best_unblocked"
    fi
    
    if [ -n "$best_international" ]; then
        printf "${PURPLE}🌐 国际推荐: %s${NC}\n" "$best_international"
    fi
    
    # 显示详细统计
    echo
    print_color $CYAN "╔══════════════════════════════════════╗"
    print_color $CYAN "║            详细性能统计              ║"
    print_color $CYAN "╚══════════════════════════════════════╝"
    
    printf "%-15s %-12s %5s %5s %5s %5s %5s %5s %5s\n" "DNS服务器" "类型" "评分" "延迟" "成功" "国内" "被墙" "媒体" "新闻"
    printf "%-15s %-12s %5s %5s %5s %5s %5s %5s %5s\n" "===============" "============" "=====" "=====" "=====" "=====" "=====" "=====" "====="
    
    sort -rn -t: -k1 /tmp/dns_results.tmp | while IFS=: read -r score dns avg_time success_rate domestic_rate blocked_rate adult_rate dns_type ping_latency intl_media_rate intl_news_rate; do
        printf "%-15s %-12s %5d %4dms %4d%% %4d%% %4d%% %4d%% %4d%%\n" \
            "$dns" "$dns_type" "$score" "$avg_time" "$success_rate" \
            "$domestic_rate" "$blocked_rate" "$intl_media_rate" "$intl_news_rate"
    done
    
    echo
    print_color $GRAY "测试完成! 结果仅供参考，实际效果可能因网络环境而异。"
    print_color $GRAY "DNS延迟: 域名解析时间 | Ping延迟: 到DNS服务器的网络延迟"
    print_color $GRAY "国内: 国内网站解析率 | 被墙: 被屏蔽网站解析率"
    print_color $GRAY "媒体: 国际媒体网站解析率 | 新闻: 国际新闻网站解析率"
    
    # 清理临时文件
    rm -f /tmp/dns_results.tmp
}

# 主程序
main() {
    # 检查dig命令
    if ! command -v dig >/dev/null 2>&1; then
        print_color $RED "❌ 错误: 未找到dig命令"
        print_color $YELLOW "请先安装: opkg update && opkg install bind-dig"
        exit 1
    fi
    
    # 检查ping命令
    if ! command -v ping >/dev/null 2>&1; then
        print_color $YELLOW "⚠️  警告: 未找到ping命令，将跳过ping延迟测试"
    fi
    
    # 用户交互配置
    get_user_input
    
    # 初始化结果文件
    > /tmp/dns_results.tmp
    
    # 显示测试配置
    dns_count=$(echo $DNSSERVERS | wc -w)
    domain_count=$(echo $DOMAINS | wc -w)
    total_tests=$((dns_count * domain_count * TEST_ROUNDS))
    
    print_color $CYAN "测试配置:"
    printf "${BLUE}DNS服务器: %d个${NC} | " "$dns_count"
    printf "${BLUE}测试域名: %d个${NC} | " "$domain_count"
    printf "${BLUE}测试轮数: %d轮${NC}\n" "$TEST_ROUNDS"
    printf "${YELLOW}预计总测试次数: %d次${NC}\n" "$total_tests"
    echo
    
    # 开始测试
    print_color $CYAN "正在测试DNS服务器性能..."
    echo
    
    for dns in $DNSSERVERS; do
        test_dns "$dns"
    done
    
    # 显示结果
    show_results
}

# 启动程序
main "$@"
