#!/bin/bash
# Network Performance Validation Script for Dell XPS 13 9350

set -e

echo "🚀 Network Performance Validation for RT HFT"
echo "Hardware: Dell XPS 13 9350 with WiFi optimization"
echo "=========================================="

# Check BBRv3 is active
echo "📡 Checking BBRv3 TCP Congestion Control..."
BBR_STATUS=$(sysctl -n net.ipv4.tcp_congestion_control)
if [ "$BBR_STATUS" = "bbr" ]; then
    echo "✅ BBRv3 is active: $BBR_STATUS"
else
    echo "❌ BBRv3 not active: $BBR_STATUS"
    echo "Run: sudo modprobe tcp_bbr && sudo sysctl -w net.ipv4.tcp_congestion_control=bbr"
fi

# Check fq queue discipline
echo "📊 Checking Queue Discipline..."
FQ_STATUS=$(sysctl -n net.core.default_qdisc)
if [ "$FQ_STATUS" = "fq" ]; then
    echo "✅ fq qdisc is active: $FQ_STATUS"
else
    echo "❌ fq qdisc not active: $FQ_STATUS"  
fi

# Check WiFi interface and power save
echo "📶 Checking WiFi Configuration..."
if command -v iw >/dev/null 2>&1; then
    WIFI_INTERFACE=$(ip link show | grep -o 'wl[^:]*\|wlan[0-9]' | head -1)
    if [ -n "$WIFI_INTERFACE" ]; then
        echo "✅ WiFi interface found: $WIFI_INTERFACE"
        
        POWER_SAVE=$(iw dev $WIFI_INTERFACE get power_save 2>/dev/null || echo "unknown")
        if [[ "$POWER_SAVE" == *"off"* ]]; then
            echo "✅ WiFi power save disabled (optimal for HFT)"
        else
            echo "⚠️  WiFi power save status: $POWER_SAVE"
            echo "   Recommend: sudo iw dev $WIFI_INTERFACE set power_save off"
        fi
    else
        echo "❌ No WiFi interface found"
    fi
else
    echo "⚠️  iw command not available. Install: sudo pacman -S iw"
fi

# Test network latency
echo "🌐 Testing Network Latency..."
ROUTER_IP=$(ip route | grep default | awk '{print $3}' | head -1)
if [ -n "$ROUTER_IP" ]; then
    echo "Testing latency to router: $ROUTER_IP"
    
    # Run 20 pings for quick test
    PING_RESULT=$(ping -c 20 -q $ROUTER_IP 2>/dev/null || echo "ping failed")
    if [[ "$PING_RESULT" != "ping failed" ]]; then
        AVG_LATENCY=$(echo "$PING_RESULT" | grep 'avg' | cut -d'/' -f5)
        echo "✅ Average latency: ${AVG_LATENCY}ms"
        
        # Check if latency is good for HFT
        if (( $(echo "$AVG_LATENCY < 2.0" | bc -l) )); then
            echo "🏆 EXCELLENT: Sub-2ms latency achieved!"
        elif (( $(echo "$AVG_LATENCY < 5.0" | bc -l) )); then
            echo "✅ GOOD: Latency under 5ms"
        else
            echo "⚠️  NEEDS OPTIMIZATION: Latency above 5ms"
        fi
    else
        echo "❌ Ping test failed"
    fi
else
    echo "❌ No default gateway found"
fi

# Test external connectivity
echo "🌍 Testing External Connectivity..."
EXTERNAL_LATENCY=$(ping -c 5 -q 8.8.8.8 2>/dev/null | grep 'avg' | cut -d'/' -f5 || echo "failed")
if [ "$EXTERNAL_LATENCY" != "failed" ]; then
    echo "✅ Internet latency (8.8.8.8): ${EXTERNAL_LATENCY}ms"
else
    echo "❌ External connectivity test failed"
fi

echo ""
echo "🎯 Network Optimization Summary:"
echo "   BBRv3: $BBR_STATUS"
echo "   Queue: $FQ_STATUS"  
echo "   WiFi: ${WIFI_INTERFACE:-not found}"
echo "   Router Latency: ${AVG_LATENCY:-unknown}ms"
echo "   Internet Latency: ${EXTERNAL_LATENCY:-unknown}ms"
echo ""
echo "Target for HFT: <2ms router latency, <20ms internet"
