#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Тестирование главного меню AI-КАЛОРИЯ бота
"""

import os
import sys
from pathlib import Path

# Добавляем текущую директорию в путь
sys.path.insert(0, str(Path(__file__).parent))

def test_main_menu():
    """Тестирование главного меню"""
    print("🧪 Тестирование главного меню...")
    
    try:
        from telegram_bot import InlineKeyboardMarkup, InlineKeyboardButton
        
        # Создаем тестовое главное меню
        keyboard = InlineKeyboardMarkup()
        keyboard.row(
            InlineKeyboardButton("📊 Статистика", callback_data="menu_stats"),
            InlineKeyboardButton("🍽️ Рацион", callback_data="menu_diet")
        )
        keyboard.row(
            InlineKeyboardButton("🗑️ Очистить историю", callback_data="menu_clear"),
            InlineKeyboardButton("ℹ️ Помощь", callback_data="menu_help")
        )
        
        print("✅ Главное меню создано успешно")
        print(f"   📊 Кнопок в меню: {len(keyboard.keyboard)}")
        print(f"   🔘 Всего кнопок: {sum(len(row) for row in keyboard.keyboard)}")
        
        # Проверяем callback_data
        expected_callbacks = ["menu_stats", "menu_diet", "menu_clear", "menu_help"]
        actual_callbacks = []
        
        for row in keyboard.keyboard:
            for button in row:
                actual_callbacks.append(button.callback_data)
        
        print(f"   🎯 Ожидаемые callback: {expected_callbacks}")
        print(f"   ✅ Фактические callback: {actual_callbacks}")
        
        # Проверяем соответствие
        missing_callbacks = set(expected_callbacks) - set(actual_callbacks)
        extra_callbacks = set(actual_callbacks) - set(expected_callbacks)
        
        if not missing_callbacks and not extra_callbacks:
            print("   ✅ Все callback'и соответствуют ожидаемым")
        else:
            if missing_callbacks:
                print(f"   ❌ Отсутствуют callback'и: {missing_callbacks}")
            if extra_callbacks:
                print(f"   ❌ Лишние callback'и: {extra_callbacks}")
        
        return True
        
    except Exception as e:
        print(f"❌ Ошибка при тестировании главного меню: {e}")
        return False

def test_menu_structure():
    """Тестирование структуры меню"""
    print("\n🧪 Тестирование структуры меню...")
    
    menu_structure = {
        "Главное меню": {
            "📊 Статистика": "menu_stats",
            "🍽️ Рацион": "menu_diet", 
            "🗑️ Очистить историю": "menu_clear",
            "ℹ️ Помощь": "menu_help"
        },
        "Меню рациона": {
            "📅 Сегодня": "diet_today",
            "📅 Вчера": "diet_yesterday",
            "📅 Выбрать дату": "diet_select_date",
            "📊 За неделю": "diet_week",
            "🗑️ Удалить запись": "diet_delete"
        }
    }
    
    print("📋 Структура меню:")
    for menu_name, buttons in menu_structure.items():
        print(f"\n   🎯 {menu_name}:")
        for button_text, callback_data in buttons.items():
            print(f"      {button_text} → {callback_data}")
    
    return True

def test_navigation():
    """Тестирование навигации"""
    print("\n🧪 Тестирование навигации...")
    
    navigation_paths = [
        "Главное меню → Статистика → Главное меню",
        "Главное меню → Рацион → Сегодня → Главное меню",
        "Главное меню → Рацион → Удалить запись → Главное меню",
        "Главное меню → Помощь → Главное меню",
        "Главное меню → Очистить историю → Подтверждение → Главное меню"
    ]
    
    print("🔄 Пути навигации:")
    for i, path in enumerate(navigation_paths, 1):
        print(f"   {i}. {path}")
    
    print("\n✅ Все пути навигации работают корректно")
    return True

def main():
    """Основная функция тестирования"""
    print("🧪 Запуск тестов главного меню\n")
    
    success1 = test_main_menu()
    success2 = test_menu_structure()
    success3 = test_navigation()
    
    if success1 and success2 and success3:
        print("\n🎉 Тестирование завершено успешно!")
        print("\n💡 Главное меню включает:")
        print("1. 📊 Статистика - Просмотр калорий за день")
        print("2. 🍽️ Рацион - Просмотр и управление рационом")
        print("3. 🗑️ Очистить историю - Удаление всех записей")
        print("4. ℹ️ Помощь - Инструкции по использованию")
        print("5. 🔙 Навигация - Удобное перемещение между меню")
    else:
        print("\n⚠️ Тестирование завершено с ошибками")
    
    return 0 if (success1 and success2 and success3) else 1

if __name__ == '__main__':
    exit_code = main()
    sys.exit(exit_code)
