#!/bin/bash

# GodEye Complete Setup & Launch Script
# Скрипт для запуска полной инфраструктуры GodEye

echo "🚀 GodEye Complete Infrastructure Setup"
echo "======================================="

# Функция для получения IP адреса
get_local_ip() {
    local ip=$(ip route get 1.1.1.1 | awk '{print $7}' | head -1)
    if [ -z "$ip" ]; then
        ip=$(hostname -I | awk '{print $1}')
    fi
    echo "$ip"
}

# Получаем локальный IP
LOCAL_IP=$(get_local_ip)
echo "🌐 Локальный IP адрес: $LOCAL_IP"

# Проверяем зависимости
echo ""
echo "🔍 Проверка зависимостей..."

# Проверяем Python
if ! command -v python3 &> /dev/null; then
    echo "❌ Python3 не найден! Установите Python3"
    exit 1
fi

# Проверяем websockets
if ! python3 -c "import websockets" 2>/dev/null; then
    echo "📦 Установка websockets..."
    pip3 install websockets
fi

# Проверяем adb
if ! command -v adb &> /dev/null; then
    echo "❌ ADB не найден! Установите Android SDK Platform Tools"
    echo "sudo apt install android-tools-adb android-tools-fastboot"
    exit 1
fi

echo "✅ Все зависимости установлены"

# Функция для остановки всех процессов
cleanup() {
    echo ""
    echo "🛑 Остановка всех сервисов..."

    # Остановка сигналинг сервера
    if [ ! -z "$SIGNALING_PID" ]; then
        kill $SIGNALING_PID 2>/dev/null
        echo "📡 Сигналинг сервер остановлен"
    fi

    # Остановка веб сервера
    if [ ! -z "$WEB_PID" ]; then
        kill $WEB_PID 2>/dev/null
        echo "🌐 Веб сервер остановлен"
    fi

    echo "👋 Система остановлена"
    exit 0
}

# Обработка сигнала прерывания
trap cleanup SIGINT SIGTERM

# Создаем директории для логов
mkdir -p logs

echo ""
echo "🔧 Запуск сервисов..."

# 1. Запуск сигналинг сервера
echo "📡 Запуск сигналинг сервера на порту 8765..."
python3 signaling_server.py > logs/signaling.log 2>&1 &
SIGNALING_PID=$!

# Ждем запуска сигналинг сервера
sleep 2

# Проверяем что сигналинг сервер запустился
if ps -p $SIGNALING_PID > /dev/null; then
    echo "✅ Сигналинг сервер запущен (PID: $SIGNALING_PID)"
else
    echo "❌ Ошибка запуска сигналинг сервера"
    cat logs/signaling.log
    exit 1
fi

# 2. Запуск простого веб сервера для интерфейса оператора
echo "🌐 Запуск веб сервера на порту 8080..."
python3 -m http.server 8080 > logs/webserver.log 2>&1 &
WEB_PID=$!

# Ждем запуска веб сервера
sleep 1

if ps -p $WEB_PID > /dev/null; then
    echo "✅ Веб сервер запущен (PID: $WEB_PID)"
else
    echo "❌ Ошибка запуска веб сервера"
    exit 1
fi

# 3. Обновляем IP адрес в веб интерфейсе
echo "🔧 Обновление IP адреса в интерфейсе оператора..."
sed -i "s/localhost:8765/${LOCAL_IP}:8765/g" operator-interface.html

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

if [ ${#DEVICES[@]} -eq 0 ]; then
    echo "⚠️ Android устройства не найдены!"
    echo "Подключите устройство и включите отладку по USB"
else
    echo "✅ Найдено устройств: ${#DEVICES[@]}"
    for device in "${DEVICES[@]}"; do
        echo "  📲 $device"
    done
fi

# 5. Сборка и установка APK (если устройство подключено)
if [ ${#DEVICES[@]} -gt 0 ]; then
    echo ""
    echo "🔨 Сборка и установка приложения..."

    # Обновляем IP адрес в Android приложении
    SIGNALING_CLIENT_FILE="app/src/main/java/com/example/godeye/network/SignalingClient.kt"
    if [ -f "$SIGNALING_CLIENT_FILE" ]; then
        sed -i "s/192.168.1.100/${LOCAL_IP}/g" "$SIGNALING_CLIENT_FILE"
        echo "🔧 IP адрес обновлен в Android приложении: $LOCAL_IP"
    fi

    # Собираем проект
    echo "⚙️ Сборка проекта..."
    ./gradlew assembleDebug > logs/build.log 2>&1

    if [ $? -eq 0 ]; then
        echo "✅ Проект собран успешно"

        # Устанавливаем на все подключенные устройства
        for device in "${DEVICES[@]}"; do
            echo "📲 Установка на устройство: $device"
            adb -s "$device" install -r app/build/outputs/apk/debug/app-debug.apk

            if [ $? -eq 0 ]; then
                echo "✅ Приложение установлено на $device"

                # Запускаем приложение
                echo "🚀 Запуск приложения на $device"
                adb -s "$device" shell am start -n com.example.godeye/.MainActivity
            else
                echo "❌ Ошибка установки на $device"
            fi
        done
    else
        echo "❌ Ошибка сборки проекта"
        echo "Проверьте logs/build.log для подробностей"
    fi
fi

# 6. Выводим информацию для подключения
echo ""
echo "🎯 Система запущена и готова к работе!"
echo "======================================"
echo ""
echo "📡 Сигналинг сервер: ws://${LOCAL_IP}:8765"
echo "🌐 Интерфейс оператора: http://${LOCAL_IP}:8080/operator-interface.html"
echo "📱 Android приложение: установлено и запущено на устройствах"
echo ""
echo "🔗 Инструкции по подключению:"
echo "1. Откройте браузер и перейдите по адресу: http://${LOCAL_IP}:8080/operator-interface.html"
echo "2. В браузере нажмите 'Подключиться к серверу'"
echo "3. На Android устройстве запустите приложение GodEye"
echo "4. В приложении нажмите 'Начать трансляцию'"
echo "5. В браузере должно появиться устройство в списке доступных"
echo "6. Нажмите на устройство для подключения"
echo ""
echo "📊 Мониторинг:"
echo "• Логи сигналинга: tail -f logs/signaling.log"
echo "• Логи веб сервера: tail -f logs/webserver.log"
echo "• Логи сборки: tail -f logs/build.log"
echo ""
echo "🛑 Для остановки нажмите Ctrl+C"
echo ""

# Основной цикл мониторинга
echo "🔄 Мониторинг системы (каждые 10 сек)..."
while true; do
    sleep 10

    # Проверяем состояние сервисов
    SIGNALING_STATUS="❌"
    WEB_STATUS="❌"

    if ps -p $SIGNALING_PID > /dev/null 2>&1; then
        SIGNALING_STATUS="✅"
    fi

    if ps -p $WEB_PID > /dev/null 2>&1; then
        WEB_STATUS="✅"
    fi

    # Проверяем подключенные устройства
    DEVICE_COUNT=$(adb devices | grep -w "device" | wc -l)

    echo "$(date '+%H:%M:%S') - Статус: Сигналинг $SIGNALING_STATUS | Веб $WEB_STATUS | Устройств: $DEVICE_COUNT"

    # Если какой-то сервис упал, пытаемся перезапустить
    if ! ps -p $SIGNALING_PID > /dev/null 2>&1; then
        echo "⚠️ Сигналинг сервер упал, перезапуск..."
        python3 signaling_server.py > logs/signaling.log 2>&1 &
        SIGNALING_PID=$!
    fi

    if ! ps -p $WEB_PID > /dev/null 2>&1; then
        echo "⚠️ Веб сервер упал, перезапуск..."
        python3 -m http.server 8080 > logs/webserver.log 2>&1 &
        WEB_PID=$!
    fi
done
