#!/bin/bash

# GodEye Network Traffic Monitor
# Скрипт для отслеживания сетевого трафика Android приложения

echo "🔍 GodEye Network Traffic Monitor"
echo "=================================="

# Исправленная проверка подключения устройства
# Проверяем все подключенные устройства
echo "📱 Поиск устройств Android..."
DEVICES=($(adb devices | grep -w "device" | awk '{print $1}'))

if [ ${#DEVICES[@]} -eq 0 ]; then
    echo "❌ Устройства Android не найдены!"
    echo "Убедитесь что:"
    echo "1. Устройство подключено по USB"
    echo "2. Включена отладка по USB"
    echo "3. Разрешена отладка для этого компьютера"
    exit 1
elif [ ${#DEVICES[@]} -eq 1 ]; then
    DEVICE=${DEVICES[0]}
    echo "📱 Найдено устройство: $DEVICE"
else
    echo "📱 Найдено несколько устройств:"
    for i in "${!DEVICES[@]}"; do
        echo "$((i+1))) ${DEVICES[$i]}"
    done

    # Проверяем есть ли LG G6
    LG_G6="LGMG600S9b4da66b"
    if [[ " ${DEVICES[@]} " =~ " ${LG_G6} " ]]; then
        DEVICE=$LG_G6
        echo "🎯 Автоматически выбран LG G6: $DEVICE"
    else
        read -p "Выберите устройство (1-${#DEVICES[@]}): " choice
        if [[ $choice -ge 1 && $choice -le ${#DEVICES[@]} ]]; then
            DEVICE=${DEVICES[$((choice-1))]}
            echo "✅ Выбрано устройство: $DEVICE"
        else
            echo "❌ Неверный выбор!"
            exit 1
        fi
    fi
fi

# Функция для выполнения adb команд с указанием конкретного устройства
adb_cmd() {
    adb -s "$DEVICE" "$@"
}

# Функция для отслеживания логов приложения
monitor_app_logs() {
    echo ""
    echo "📋 Мониторинг логов приложения GodEye..."
    echo "Фильтр: WebRTC, Network, Connection"
    echo "Нажмите Ctrl+C для остановки"
    echo "----------------------------------------"

    adb_cmd logcat -c  # Очищаем логи
    adb_cmd logcat | grep -E "(WEBRTC|WebRTC|GodEye|Network|Connection)" --color=always
}

# Функция для отслеживания сетевых соединений
monitor_network_connections() {
    echo ""
    echo "🌐 Мониторинг сетевых соединений..."
    echo "Поиск активных UDP/TCP соединений от GodEye"
    echo "----------------------------------------"

    # Получаем PID приложения GodEye
    APP_PID=$(adb_cmd shell ps | grep com.example.godeye | awk '{print $2}' | head -1)

    if [ -z "$APP_PID" ]; then
        echo "❌ Приложение GodEye не запущено!"
        return 1
    fi

    echo "🎯 PID приложения GodEye: $APP_PID"
    echo ""

    while true; do
        echo "$(date '+%H:%M:%S') - Активные соединения:"
        adb_cmd shell netstat | grep $APP_PID | while read line; do
            echo "  📡 $line"
        done
        echo ""
        sleep 5
    done
}

# Функция для анализа трафика через tcpdump (требует root)
monitor_packet_capture() {
    echo ""
    echo "📦 Захват пакетов (требует root)..."
    echo "Попытка захвата UDP трафика на порты WebRTC"
    echo "----------------------------------------"

    # Проверяем root доступ
    ROOT_CHECK=$(adb_cmd shell su -c "echo test" 2>/dev/null)
    if [ "$ROOT_CHECK" != "test" ]; then
        echo "❌ Root доступ недоступен. Пропускаем захват пакетов."
        return 1
    fi

    echo "✅ Root доступ получен"
    echo "Захватываем UDP трафик (порты 1024-65535)..."

    # Захватываем UDP пакеты
    adb_cmd shell su -c "tcpdump -i any -n udp and portrange 1024-65535" | \
    while read line; do
        # Фильтруем только интересные пакеты
        if echo "$line" | grep -E "(STUN|RTP|DTLS)" > /dev/null; then
            echo "🚀 WebRTC: $line"
        elif echo "$line" | grep -E "([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)" > /dev/null; then
            echo "📡 UDP: $line"
        fi
    done
}

# Функция для мониторинга использования сети приложением
monitor_data_usage() {
    echo ""
    echo "📊 Мониторинг использования данных..."
    echo "Отслеживание трафика приложения GodEye"
    echo "----------------------------------------"

    # Получаем UID приложения (исправленная переменная)
    local APP_UID=$(adb_cmd shell dumpsys package com.example.godeye | grep "userId=" | head -1 | sed 's/.*userId=\([0-9]*\).*/\1/')

    if [ -z "$APP_UID" ]; then
        echo "❌ Не удалось получить UID приложения!"
        echo "Проверяем установленные пакеты..."
        adb_cmd shell pm list packages | grep godeye
        return 1
    fi

    echo "🆔 UID приложения: $APP_UID"
    echo ""

    # Мониторим использование сети
    while true; do
        echo "$(date '+%H:%M:%S') - Статистика сети:"

        # Получаем статистику из /proc/net/xt_qtaguid/stats
        STATS=$(adb_cmd shell cat /proc/net/xt_qtaguid/stats 2>/dev/null | grep " $APP_UID ")

        if [ ! -z "$STATS" ]; then
            echo "$STATS" | while read line; do
                # Парсим статистику
                RX_BYTES=$(echo $line | awk '{print $6}')
                TX_BYTES=$(echo $line | awk '{print $8}')

                if [ "$RX_BYTES" -gt 0 ] || [ "$TX_BYTES" -gt 0 ]; then
                    echo "  📥 Получено: $(format_bytes $RX_BYTES)"
                    echo "  📤 Отправлено: $(format_bytes $TX_BYTES)"
                fi
            done
        else
            echo "  ℹ️ Сетевая активность не обнаружена"
        fi

        echo ""
        sleep 3
    done
}

# Функция форматирования байтов
format_bytes() {
    local bytes=$1
    if [ $bytes -lt 1024 ]; then
        echo "${bytes} B"
    elif [ $bytes -lt $((1024*1024)) ]; then
        echo "$((bytes/1024)) KB"
    elif [ $bytes -lt $((1024*1024*1024)) ]; then
        echo "$((bytes/1024/1024)) MB"
    else
        echo "$((bytes/1024/1024/1024)) GB"
    fi
}

# Главное меню
echo ""
echo "Выберите режим мониторинга:"
echo "1) 📋 Логи приложения (WebRTC/Network)"
echo "2) 🌐 Сетевые соединения"
echo "3) 📦 Захват пакетов (root)"
echo "4) 📊 Использование данных"
echo "5) 🔄 Все режимы одновременно"
echo ""

read -p "Введите номер (1-5): " choice

case $choice in
    1)
        monitor_app_logs
        ;;
    2)
        monitor_network_connections
        ;;
    3)
        monitor_packet_capture
        ;;
    4)
        monitor_data_usage
        ;;
    5)
        echo "🚀 Запуск всех мониторов..."
        echo "Откройте дополнительные терминалы для других режимов"
        monitor_app_logs &
        monitor_network_connections &
        monitor_data_usage &
        wait
        ;;
    *)
        echo "❌ Неверный выбор!"
        exit 1
        ;;
esac
