#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Финальное тестирование всей системы мониторинга.
Проверяет интеграцию всех компонентов.
"""

import asyncio
import json
import logging
import sys
import io
from datetime import datetime

# Установка UTF-8 кодировки
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

print("🚀 Финальное тестирование системы мониторинга...")

async def test_monitoring_integration():
    """Тестирование интеграции мониторинга"""

    try:
        # Тест 1: Проверка импорта модулей
        print("\n📦 Тест импорта модулей...")
        from core.monitoring import MetricsCollector, structured_logger
        from core.alerts import AlertManager
        from core.config import Config
        print("✅ Все модули импортированы успешно")

        # Тест 2: Проверка конфигурации
        print("\n⚙️ Тест конфигурации...")
        import os
        os.environ['BOT_TOKEN'] = 'test_token_for_monitoring'
        os.environ['ADMIN_IDS'] = '123456789'

        config = Config()
        print("✅ Конфигурация загружена")

        # Тест 3: Проверка метрик
        print("\n📊 Тест системы метрик...")
        metrics = MetricsCollector(config)

        # Записываем тестовые метрики
        metrics.record_error('TestError', 'test_handler', Exception('Test exception'))
        metrics.record_command('start', 'user_handler', 1.2)
        metrics.record_message('text')
        metrics.update_active_users(100)
        metrics.set_bot_status(1)

        print("✅ Метрики записаны")

        # Тест 4: Проверка логирования
        print("\n📝 Тест логирования...")
        logger = structured_logger('final_test', config)

        # Тестируем разные уровни логирования
        logger.info("Test info message", extra={'user_id': 123, 'command': 'test'})
        logger.warning("Test warning message", extra={'handler': 'test_handler'})
        logger.error("Test error message", extra={'error_type': 'test_error'})

        print("✅ Логи записаны в JSON формате")

        # Тест 5: Проверка алертов
        print("\n🚨 Тест системы алертов...")
        alert_manager = AlertManager(config, metrics)

        # Имитируем условие для алерта
        metrics.error_counter.labels(error_type='TestError', handler='test_handler')._value.set(15)

        await alert_manager.check_alerts()
        print("✅ Система алертов проверена")

        # Тест 6: Проверка файла логов
        print("\n📄 Тест файла логов...")
        try:
            with open('bot.log', 'r', encoding='utf-8') as f:
                logs = f.readlines()
                if logs:
                    # Проверяем, что логи в JSON формате
                    first_log = logs[-1].strip()
                    try:
                        json.loads(first_log)
                        print("✅ Логи записываются в JSON формате")
                    except json.JSONDecodeError:
                        print("⚠️ Логи не в JSON формате")
                else:
                    print("⚠️ Лог файл пуст")
        except FileNotFoundError:
            print("⚠️ Лог файл не найден")

        print("\n🎉 Все тесты завершены успешно!")
        print("\n📋 Результаты тестирования:")
        print("✅ Мониторинг: система работает корректно")
        print("✅ Метрики: Prometheus метрики записываются")
        print("✅ Логи: структурированные JSON логи")
        print("✅ Алерты: система алертов инициализирована")
        print("✅ Конфигурация: все настройки загружаются")

        print("\n🚀 Система мониторинга готова к использованию!")
        print("\n📚 Документация:")
        print("• MONITORING.md - подробная документация")
        print("• README_MONITORING.md - быстрый старт")
        print("• GLITCHTIP_SETUP.md - настройка GlitchTip")
        print("• START_MONITORING.md - инструкция по запуску")

        return True

    except Exception as e:
        print(f"❌ Ошибка при тестировании: {e}")
        return False

if __name__ == "__main__":
    success = asyncio.run(test_monitoring_integration())
    if success:
        print("\n🏆 Система мониторинга прошла все тесты!")
    else:
        print("\n💥 В системе мониторинга найдены проблемы!")
        sys.exit(1)