#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Тестовый скрипт для проверки WebSocket соединений LogBoard+
Автор: Сергей Антропов
Сайт: https://devops.org.ru
"""

import asyncio
import websockets
import json
import requests

async def test_websocket():
    """Тестирование WebSocket соединений"""
    
    base_url = "http://localhost:9001"
    
    # 1. Получаем токен
    print("🔐 Получение токена...")
    login_data = {"username": "admin", "password": "admin"}
    try:
        response = requests.post(f"{base_url}/api/auth/login", json=login_data)
        if response.status_code != 200:
            print(f"   ❌ Ошибка входа: {response.status_code}")
            return
        
        token = response.json()["access_token"]
        print("   ✅ Токен получен")
    except Exception as e:
        print(f"   ❌ Ошибка входа: {e}")
        return
    
    # 2. Получаем список контейнеров
    print("\n🔍 Получение контейнеров...")
    headers = {"Authorization": f"Bearer {token}"}
    try:
        response = requests.get(f"{base_url}/api/containers/services", headers=headers)
        if response.status_code != 200:
            print(f"   ❌ Ошибка получения контейнеров: {response.status_code}")
            return
        
        containers = response.json()
        print(f"   ✅ Получено контейнеров: {len(containers)}")
        
        if not containers:
            print("   ❌ Нет контейнеров для тестирования")
            return
        
        first_container = containers[0]
        container_id = first_container.get('id')
        container_name = first_container.get('name')
        print(f"   📦 Тестируем контейнер: {container_name} ({container_id})")
        
    except Exception as e:
        print(f"   ❌ Ошибка получения контейнеров: {e}")
        return
    
    # 3. Тестируем WebSocket соединение
    print(f"\n🔌 Тестирование WebSocket для {container_name}...")
    
    # Формируем WebSocket URL
    ws_url = f"ws://localhost:9001/api/websocket/logs/{container_id}?tail=10&token={token}&service={container_name}"
    print(f"   🔗 WebSocket URL: {ws_url}")
    
    try:
        async with websockets.connect(ws_url) as websocket:
            print("   ✅ WebSocket соединение установлено")
            
            # Ждем сообщения
            print("   📡 Ожидание сообщений...")
            message_count = 0
            max_messages = 5
            
            async for message in websocket:
                message_count += 1
                print(f"   📨 Сообщение {message_count}: {message[:100]}...")
                
                if message_count >= max_messages:
                    print(f"   ✅ Получено {message_count} сообщений")
                    break
                    
    except Exception as e:
        print(f"   ❌ Ошибка WebSocket: {e}")

if __name__ == "__main__":
    asyncio.run(test_websocket())
