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

import requests
import json

def test_collapse_functionality():
    """Тестирование функциональности сворачивания секций"""
    
    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)}")
    
    # Анализируем контейнеры
    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:
        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. Проверяем, что все контейнеры работающие
    stopped_containers = [c for c in containers if c['status'] != 'running']
    if stopped_containers:
        print(f"\n⚠️  Найдены остановленные контейнеры:")
        for container in stopped_containers:
            print(f"   • {container['name']} ({container['status']})")
    else:
        print(f"\n✅ Все контейнеры работают (остановленные отфильтрованы)")
    
    # 4. Проверяем структуру данных для сворачивания
    print(f"\n🔍 Проверка структуры данных для сворачивания:")
    
    # Проверяем локальные контейнеры
    if local_containers:
        print(f"   📍 Секция 'Локальные контейнеры' должна содержать {len(local_containers)} контейнеров")
        print(f"      ID секции: local")
        print(f"      Кнопка сворачивания: data-target='local'")
        print(f"      Контент: id='local-content'")
    
    # Проверяем удаленные контейнеры
    if remote_containers:
        print(f"   🌐 Секция 'Удаленные контейнеры' должна содержать {len(remote_containers)} контейнеров")
        print(f"      ID секции: remote")
        print(f"      Кнопка сворачивания: data-target='remote'")
        print(f"      Контент: id='remote-content'")
        
        # Проверяем секции хостов
        for hostname, host_containers in containers_by_host.items():
            print(f"      🖥️  Подсекция '{hostname}' должна содержать {len(host_containers)} контейнеров")
            print(f"         ID секции: host-{hostname}")
            print(f"         Кнопка сворачивания: data-target='host-{hostname}'")
            print(f"         Контент: id='host-{hostname}-content'")
    
    print(f"\n🎉 Проверка структуры завершена!")
    print(f"🌐 Откройте http://localhost:9001 в браузере")
    print(f"   📍 Проверьте, что секции 'Локальные контейнеры' и 'Удаленные контейнеры' можно сворачивать")
    print(f"   🖥️  Проверьте, что секции хостов внутри 'Удаленные контейнеры' можно сворачивать")
    print(f"   ⚡ Проверьте, что остановленные контейнеры не отображаются в интерфейсе")

if __name__ == "__main__":
    test_collapse_functionality()
