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

import os
import sys
import json
from pathlib import Path

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

def test_openai_client():
    """Тестирование OpenAI клиента"""
    print("🧪 Тестирование OpenAI клиента...")
    
    try:
        from openai_client import OpenAIClient
        
        # Проверяем API ключ
        api_key = os.getenv('OPENAI_API_KEY')
        if not api_key:
            print("❌ OPENAI_API_KEY не установлен")
            return False
        
        client = OpenAIClient(api_key)
        
        # Тестируем анализ еды
        test_cases = [
            "Съел тарелку гречки 300 грамм",
            "Выпил стакан молока 250 мл",
            "Съел яблоко",  # Должен вернуть ошибку
            "Пицца Маргарита 2 куска"
        ]
        
        for test_text in test_cases:
            print(f"\n📝 Тестируем: '{test_text}'")
            result = client.analyze_food_intake(test_text)
            print(f"✅ Результат: {json.dumps(result, ensure_ascii=False, indent=2)}")
        
        return True
        
    except Exception as e:
        print(f"❌ Ошибка при тестировании OpenAI: {e}")
        return False

def test_database():
    """Тестирование базы данных"""
    print("\n🧪 Тестирование базы данных...")
    
    try:
        from database import DatabaseManager
        
        db = DatabaseManager()
        db.init_database()
        
        # Тестируем добавление записи
        record_id = db.add_food_record(
            user_id=12345,
            username="test_user",
            food_name="тестовая еда",
            amount=100,
            unit="г",
            calories=250,
            raw_text="тестовое сообщение"
        )
        
        print(f"✅ Запись добавлена с ID: {record_id}")
        
        # Тестируем получение статистики
        stats = db.get_user_stats(12345)
        if stats:
            print(f"✅ Статистика получена: {stats['total_records']} записей")
        
        # Тестируем получение истории
        history = db.get_user_history(12345)
        print(f"✅ История получена: {len(history)} записей")
        
        # Очищаем тестовые данные
        db.clear_user_history(12345)
        print("✅ Тестовые данные очищены")
        
        return True
        
    except Exception as e:
        print(f"❌ Ошибка при тестировании базы данных: {e}")
        return False

def test_config():
    """Тестирование конфигурации"""
    print("\n🧪 Тестирование конфигурации...")
    
    try:
        from config import Config
        
        # Проверяем валидацию
        is_valid = Config.validate()
        if is_valid:
            print("✅ Конфигурация корректна")
        else:
            print("❌ Конфигурация некорректна")
            return False
        
        # Проверяем настройки
        print(f"📊 Модель OpenAI: {Config.OPENAI_MODEL}")
        print(f"📊 База данных: {Config.DATABASE_URL}")
        print(f"📊 Уровень логирования: {Config.LOG_LEVEL}")
        
        return True
        
    except Exception as e:
        print(f"❌ Ошибка при тестировании конфигурации: {e}")
        return False

def main():
    """Основная функция тестирования"""
    print("🧪 Запуск тестов AI-КАЛОРИЯ бота\n")
    
    tests = [
        ("Конфигурация", test_config),
        ("База данных", test_database),
        ("OpenAI клиент", test_openai_client)
    ]
    
    passed = 0
    total = len(tests)
    
    for test_name, test_func in tests:
        try:
            if test_func():
                print(f"✅ {test_name}: ПРОЙДЕН")
                passed += 1
            else:
                print(f"❌ {test_name}: ПРОВАЛЕН")
        except Exception as e:
            print(f"❌ {test_name}: ОШИБКА - {e}")
    
    print(f"\n📊 Результаты тестирования: {passed}/{total} тестов пройдено")
    
    if passed == total:
        print("🎉 Все тесты пройдены! Бот готов к работе.")
        return 0
    else:
        print("⚠️ Некоторые тесты не пройдены. Проверьте настройки.")
        return 1

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