#!/usr/bin/env python3
"""
Test simple d'initialisation de l'Orchestrator avec des mocks
pour vérifier que l'erreur AttributeError est corrigée.
"""

import sys
import os

# Ajouter le chemin vers geniusia2
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'geniusia2'))

print("🔍 Test d'initialisation de l'Orchestrator...")
print("=" * 60)

try:
    # Imports
    print("\n1. Import des modules...")
    from core.logger import Logger
    from core.config import get_config
    print("   ✓ Modules de base importés")
    
    # Créer des mocks simples
    print("\n2. Création des mocks...")
    
    class MockLearningManager:
        def __init__(self):
            self.embeddings_manager = None
        def get_mode(self):
            return "shadow"
    
    class MockVisionUtils:
        pass
    
    class MockLLMManager:
        pass
    
    class MockWhitelistManager:
        def __init__(self, logger=None):
            pass
        def get_whitelist(self):
            return []
    
    class MockInputUtils:
        def __init__(self, logger, config):
            pass
    
    print("   ✓ Mocks créés")
    
    # Importer Orchestrator
    print("\n3. Import de l'Orchestrator...")
    from core.orchestrator import Orchestrator
    print("   ✓ Orchestrator importé")
    
    # Vérifier les méthodes
    print("\n4. Vérification des méthodes de callback...")
    callback_methods = [
        '_on_suggestion_created',
        '_on_suggestion_accepted',
        '_on_suggestion_rejected',
        '_on_suggestion_timeout'
    ]
    
    all_present = True
    for method in callback_methods:
        if hasattr(Orchestrator, method):
            print(f"   ✓ {method}")
        else:
            print(f"   ✗ {method} - MANQUANTE!")
            all_present = False
    
    if not all_present:
        print("\n❌ Certaines méthodes sont manquantes!")
        sys.exit(1)
    
    # Tenter d'initialiser l'Orchestrator
    print("\n5. Initialisation de l'Orchestrator...")
    logger = Logger()
    config = get_config()
    
    learning_manager = MockLearningManager()
    vision_utils = MockVisionUtils()
    llm_manager = MockLLMManager()
    whitelist_manager = MockWhitelistManager(logger)
    input_utils = MockInputUtils(logger, config)
    
    orchestrator = Orchestrator(
        learning_manager=learning_manager,
        vision_utils=vision_utils,
        llm_manager=llm_manager,
        logger=logger,
        config=config,
        whitelist_manager=whitelist_manager,
        input_utils=input_utils
    )
    
    print("   ✓ Orchestrator initialisé avec succès!")
    
    # Vérifier que les callbacks sont bien assignés
    print("\n6. Vérification des callbacks assignés...")
    if hasattr(orchestrator, '_on_suggestion_created'):
        print("   ✓ orchestrator._on_suggestion_created existe")
    else:
        print("   ✗ orchestrator._on_suggestion_created n'existe pas!")
        sys.exit(1)
    
    print("\n" + "=" * 60)
    print("✅ TOUS LES TESTS PASSENT!")
    print("=" * 60)
    print("\n💡 L'erreur AttributeError est corrigée.")
    print("   Vous pouvez maintenant lancer l'application avec:")
    print("   geniusia2/run.sh")
    
except AttributeError as e:
    print(f"\n❌ AttributeError: {e}")
    print("\n⚠️  L'erreur persiste. Vérifiez le fichier orchestrator.py")
    import traceback
    traceback.print_exc()
    sys.exit(1)
    
except Exception as e:
    print(f"\n⚠️  Autre erreur (peut être normale): {e}")
    print("\n💡 Si l'erreur concerne des dépendances manquantes,")
    print("   c'est normal car nous utilisons des mocks.")
    print("   L'important est qu'il n'y ait pas d'AttributeError.")
    import traceback
    traceback.print_exc()
