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

import requests
import json
from datetime import datetime

def test_interface():
    """Тестирование нового интерфейса с разделением локальных и удаленных контейнеров"""
    
    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/projects", headers=headers)
    
    if response.status_code != 200:
        print(f"❌ Ошибка получения проектов: {response.status_code}")
        return
    
    projects = response.json()
    print(f"✅ Проектов получено: {len(projects)}")
    
    # Показываем удаленные проекты
    remote_projects = [p for p in projects if p.startswith('remote-')]
    local_projects = [p for p in projects if not p.startswith('remote-')]
    
    print(f"   📍 Локальные проекты: {len(local_projects)}")
    for project in local_projects[:5]:  # Показываем первые 5
        print(f"      • {project}")
    if len(local_projects) > 5:
        print(f"      ... и еще {len(local_projects) - 5}")
    
    print(f"   🌐 Удаленные проекты: {len(remote_projects)}")
    for project in remote_projects:
        hostname = project.replace('remote-', '')
        print(f"      • {project} (хост: {hostname})")
    
    # 3. Получение контейнеров
    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)}")
    
    # Анализируем контейнеры
    local_containers = [c for c in containers if not c.get('is_remote', False)]
    remote_containers = [c for c in containers if c.get('is_remote', False)]
    
    print(f"\n📊 Статистика контейнеров:")
    print(f"   📍 Локальные контейнеры: {len(local_containers)}")
    for container in local_containers[:3]:  # Показываем первые 3
        print(f"      • {container['name']} ({container['status']}) - {container.get('project', 'standalone')}")
    if len(local_containers) > 3:
        print(f"      ... и еще {len(local_containers) - 3}")
    
    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[:2]:  # Показываем первые 2 с каждого хоста
            last_update = ""
            if container.get('last_modified'):
                last_update = f" (обновлено: {datetime.fromtimestamp(container['last_modified']).strftime('%H:%M:%S')})"
            print(f"         • {container['name']} ({container['status']}){last_update}")
        if len(host_containers) > 2:
            print(f"         ... и еще {len(host_containers) - 2}")
    
    # 4. Тестирование получения логов удаленного контейнера
    if remote_containers:
        print(f"\n📝 Тестирование получения логов удаленного контейнера...")
        test_container = remote_containers[0]
        container_id = test_container['id']
        
        response = requests.get(f"{base_url}/api/logs/{container_id}?tail=3", headers=headers)
        
        if response.status_code == 200:
            logs_data = response.json()
            print(f"✅ Логи получены для {test_container['name']} (хост: {test_container['hostname']})")
            print(f"   Количество строк: {len(logs_data.get('logs', []))}")
            print(f"   Флаг is_remote: {logs_data.get('is_remote', False)}")
            
            # Показываем последние логи
            logs = logs_data.get('logs', [])
            if logs:
                print(f"   Последние логи:")
                for log in logs[-2:]:  # Показываем последние 2 строки
                    timestamp = log.get('timestamp', '')[:19]  # Обрезаем до секунд
                    message = log.get('message', '')[:80]  # Обрезаем длинные сообщения
                    print(f"      [{timestamp}] {message}")
        else:
            print(f"❌ Ошибка получения логов: {response.status_code}")
    
    # 5. Тестирование статистики логов
    if remote_containers:
        print(f"\n📊 Тестирование статистики логов...")
        test_container = remote_containers[0]
        container_id = test_container['id']
        
        response = requests.get(f"{base_url}/api/logs/stats/{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}")
    
    print(f"\n🎉 Тестирование завершено!")
    print(f"🌐 Откройте http://localhost:9001 в браузере для просмотра нового интерфейса")

if __name__ == "__main__":
    test_interface()
