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

import requests
import json

def test_fixes():
    """Тестирование исправлений"""
    
    base_url = "http://localhost:9001"
    
    # 1. Вход в систему
    print("🔐 Вход в систему...")
    login_data = {"username": "admin", "password": "admin"}
    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"]
    headers = {"Authorization": f"Bearer {token}"}
    
    print("✅ Вход выполнен успешно")
    
    # 2. Получение контейнеров
    print("\n🐳 Получение контейнеров...")
    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)}")
    
    # Анализируем контейнеры (исключаем demo и test контейнеры)
    local_containers = [c for c in containers if not c.get('is_remote', False) and not any(x in c['name'].lower() for x in ['demo', 'test'])]
    remote_containers = [c for c in containers if c.get('is_remote', False) and not any(x in c['name'].lower() for x in ['demo', 'test'])]
    
    print(f"\n📊 Статистика контейнеров:")
    print(f"   📍 Локальные контейнеры: {len(local_containers)}")
    for container in local_containers:
        print(f"      • {container['name']} ({container['status']})")
    
    print(f"\n   🌐 Удаленные контейнеры: {len(remote_containers)}")
    
    # Группируем удаленные контейнеры по хостам
    containers_by_host = {}
    for container in remote_containers:
        hostname = container.get('hostname', 'unknown')
        if hostname not in containers_by_host:
            containers_by_host[hostname] = []
        containers_by_host[hostname].append(container)
    
    for hostname, host_containers in containers_by_host.items():
        print(f"      🖥️  Хост: {hostname} ({len(host_containers)} контейнеров)")
        for container in host_containers:
            print(f"         • {container['name']} ({container['status']})")
    
    # 3. Тестирование получения логов
    print(f"\n📝 Тестирование получения логов...")
    
    # Тестируем локальный контейнер
    if local_containers:
        test_container = local_containers[0]
        print(f"   Тестируем локальный контейнер: {test_container['name']}")
        
        response = requests.get(f"{base_url}/api/logs/{test_container['id']}?tail=10", headers=headers)
        if response.status_code == 200:
            logs = response.json()
            print(f"   ✅ Логи получены: {len(logs.get('logs', []))} строк")
        else:
            print(f"   ❌ Ошибка получения логов: {response.status_code}")
    
    # Тестируем удаленный контейнер
    if remote_containers:
        test_remote_container = remote_containers[0]
        print(f"   Тестируем удаленный контейнер: {test_remote_container['name']}")
        
        response = requests.get(f"{base_url}/api/logs/{test_remote_container['id']}?tail=10", headers=headers)
        if response.status_code == 200:
            logs = response.json()
            print(f"   ✅ Логи получены: {len(logs.get('logs', []))} строк")
        else:
            print(f"   ❌ Ошибка получения логов: {response.status_code}")
    
    # 4. Тестирование статистики
    print(f"\n📊 Тестирование статистики...")
    
    if local_containers:
        test_container = local_containers[0]
        response = requests.get(f"{base_url}/api/logs/stats/{test_container['id']}", headers=headers)
        if response.status_code == 200:
            stats = response.json()
            print(f"   ✅ Статистика получена для {test_container['name']}:")
            print(f"      DEBUG: {stats.get('debug', 0)}")
            print(f"      INFO: {stats.get('info', 0)}")
            print(f"      WARN: {stats.get('warn', 0)}")
            print(f"      ERROR: {stats.get('error', 0)}")
        else:
            print(f"   ❌ Ошибка получения статистики: {response.status_code}")
    
    # 5. Проверка структуры данных для tooltip
    print(f"\n🔍 Проверка структуры данных для tooltip...")
    
    for container in local_containers[:2]:  # Проверяем первые 2 локальных контейнера
        print(f"   📍 Локальный контейнер {container['name']}:")
        print(f"      Имя: {container['name']}")
        print(f"      Сервис: {container.get('service', 'N/A')}")
        print(f"      Проект: {container.get('project', 'standalone')}")
        print(f"      Статус: {container['status']}")
        print(f"      Хост: localhost")
        if container.get('url'):
            print(f"      URL: {container['url']}")
        if container.get('host_port'):
            print(f"      Порт: {container['host_port']}")
    
    for container in remote_containers[:2]:  # Проверяем первые 2 удаленных контейнера
        print(f"   🌐 Удаленный контейнер {container['name']}:")
        print(f"      Имя: {container['name']}")
        print(f"      Сервис: {container.get('service', 'N/A')}")
        print(f"      Проект: {container.get('project', 'remote')}")
        print(f"      Статус: {container['status']}")
        print(f"      Хост: {container.get('hostname', 'unknown')}")
        if container.get('last_modified'):
            print(f"      Обновлено: {container['last_modified']}")
    
    print(f"\n🎉 Тестирование завершено!")
    print(f"🌐 Откройте http://localhost:9001 в браузере")
    print(f"   🔽 Проверьте сворачивание секций в sidebar")
    print(f"   💡 Проверьте tooltip на карточках контейнеров")
    print(f"   📝 Проверьте отображение логов при клике на карточки")

if __name__ == "__main__":
    test_fixes()
