#!/usr/bin/env python3
"""
Test de l'intégration de l'EnhancedWorkflowMatcher dans l'Orchestrator.
"""

import sys
import numpy as np
from datetime import datetime
from pathlib import Path

# Ajouter le répertoire parent au path
sys.path.insert(0, str(Path(__file__).parent))

from geniusia2.core.logger import Logger
from geniusia2.core.orchestrator import Orchestrator
from geniusia2.core.learning_manager import LearningManager
from geniusia2.core.utils.vision_utils import VisionUtils
from geniusia2.core.llm_manager import LLMManager
from geniusia2.core.config import get_config

print('Test de l\'intégration EnhancedWorkflowMatcher dans Orchestrator')
print('='*70)

# Créer les composants nécessaires
print('\n1. Initialisation des composants...')
logger = Logger(log_dir='test_logs')
config = get_config()

# Créer les managers
learning_manager = LearningManager(logger=logger, config=config)
vision_utils = VisionUtils(logger=logger)
llm_manager = LLMManager(logger=logger, config=config)

print('   ✓ Composants créés')

# Créer l'Orchestrator
print('\n2. Création de l\'Orchestrator...')
try:
    orchestrator = Orchestrator(
        learning_manager=learning_manager,
        vision_utils=vision_utils,
        llm_manager=llm_manager,
        logger=logger,
        config=config
    )
    print('   ✓ Orchestrator créé')
except Exception as e:
    print(f'   ✗ Erreur lors de la création: {e}')
    import traceback
    traceback.print_exc()
    sys.exit(1)

# Vérifier que l'EnhancedWorkflowMatcher est bien initialisé
print('\n3. Vérification de l\'EnhancedWorkflowMatcher...')
if hasattr(orchestrator, 'enhanced_matcher'):
    print('   ✓ enhanced_matcher présent')
    print(f'   ✓ Type: {type(orchestrator.enhanced_matcher).__name__}')
    print(f'   ✓ Screen weight: {orchestrator.enhanced_matcher.screen_weight}')
    print(f'   ✓ Elements weight: {orchestrator.enhanced_matcher.elements_weight}')
else:
    print('   ✗ enhanced_matcher non trouvé!')
    sys.exit(1)

# Vérifier que le MultiModalEmbeddingManager est bien initialisé
print('\n4. Vérification du MultiModalEmbeddingManager...')
if hasattr(orchestrator, 'multimodal_manager'):
    print('   ✓ multimodal_manager présent')
    print(f'   ✓ Type: {type(orchestrator.multimodal_manager).__name__}')
else:
    print('   ✗ multimodal_manager non trouvé!')
    sys.exit(1)

# Vérifier que la méthode find_matching_workflows_enhanced existe
print('\n5. Vérification de la méthode find_matching_workflows_enhanced...')
if hasattr(orchestrator, 'find_matching_workflows_enhanced'):
    print('   ✓ Méthode find_matching_workflows_enhanced présente')
    
    # Tester l'appel (sans workflows, devrait retourner une liste vide)
    print('\n6. Test de la méthode (sans workflows)...')
    try:
        matches = orchestrator.find_matching_workflows_enhanced(top_k=5)
        print(f'   ✓ Méthode appelée avec succès')
        print(f'   ✓ Matches retournés: {len(matches)}')
        print(f'   ✓ Type de retour: {type(matches).__name__}')
    except Exception as e:
        print(f'   ✗ Erreur lors de l\'appel: {e}')
        import traceback
        traceback.print_exc()
else:
    print('   ✗ Méthode find_matching_workflows_enhanced non trouvée!')
    sys.exit(1)

# Test avec un workflow simulé
print('\n7. Test avec un workflow simulé...')
try:
    from geniusia2.core.workflow_detector import Workflow, WorkflowStep
    
    # Créer un workflow de test
    step1 = WorkflowStep(
        step_id=1,
        action_type='click',
        target_description='submit button',
        position=(100, 200),
        window='TestApp',
        embedding=np.random.rand(512)
    )
    
    workflow = Workflow(
        workflow_id='test_workflow_001',
        name='Test Workflow',
        steps=[step1],
        repetitions=5,
        confidence=0.9,
        last_seen=datetime.now()
    )
    
    # Ajouter le workflow au detector
    orchestrator.workflow_detector.workflows.append(workflow)
    print(f'   ✓ Workflow de test ajouté')
    print(f'   ✓ Workflows disponibles: {len(orchestrator.workflow_detector.workflows)}')
    
    # Tester le matching avec le workflow
    print('\n8. Test du matching avec workflow...')
    matches = orchestrator.find_matching_workflows_enhanced(top_k=5)
    print(f'   ✓ Matching effectué')
    print(f'   ✓ Matches trouvés: {len(matches)}')
    
    if matches:
        match = matches[0]
        print(f'\n   📊 Meilleur match:')
        print(f'      Workflow: {match.workflow_name}')
        print(f'      Score composite: {match.composite_score:.3f}')
        print(f'      Confiance: {match.confidence:.3f}')
        print(f'      Similarité écran: {match.screen_similarity:.3f}')
        print(f'      Matches d\'éléments: {len(match.element_matches)}')
        
        if match.differences:
            print(f'      Différences détectées: {len(match.differences)}')
            print(f'\n   📋 Feedback:')
            feedback = match.get_feedback_summary()
            for line in feedback.split('\n')[:10]:  # Limiter à 10 lignes
                print(f'      {line}')
    
except Exception as e:
    print(f'   ✗ Erreur: {e}')
    import traceback
    traceback.print_exc()

print('\n' + '='*70)
print('✅ Test d\'intégration complété avec succès!')
print('='*70)

# Nettoyage
import shutil
if Path('test_logs').exists():
    shutil.rmtree('test_logs')
if Path('data').exists():
    shutil.rmtree('data')

print('\n✓ Nettoyage effectué')
