#!/usr/bin/env python3
"""
Test manuel du Mode Assisté - Workflow complet
"""

import sys
import time
from pathlib import Path

sys.path.insert(0, str(Path(__file__).parent / "geniusia2"))

from core.orchestrator import Orchestrator
from core.learning_manager import LearningManager
from core.embeddings_manager import EmbeddingsManager
from core.llm_manager import LLMManager
from core.utils.vision_utils import VisionUtils
from core.utils.input_utils import InputUtils
from core.logger import Logger
from core.config import get_config


def main():
    """Test manuel du Mode Assisté."""
    print("\n" + "="*60)
    print("  🧪 TEST MANUEL DU MODE ASSISTÉ")
    print("="*60 + "\n")
    
    # Initialiser les composants
    print("📋 Initialisation des composants...")
    config = get_config()
    logger = Logger()
    
    embeddings_manager = EmbeddingsManager(logger=logger)
    learning_manager = LearningManager(
        embeddings_manager,
        logger,
        config,
        profiles_path="geniusia2/data/user_profiles"
    )
    vision_utils = VisionUtils(config)
    input_utils = InputUtils(logger, config)
    llm_manager = LLMManager(config, logger)
    
    orchestrator = Orchestrator(
        learning_manager=learning_manager,
        vision_utils=vision_utils,
        llm_manager=llm_manager,
        input_utils=input_utils,
        logger=logger,
        config=config
    )
    
    print("✅ Orchestrator créé\n")
    
    # Vérifier les tâches existantes
    print("📊 Vérification des tâches apprises...")
    
    # Utiliser get_all_tasks() qui retourne une liste de dicts avec métriques
    task_metrics = learning_manager.get_all_tasks()
    
    if not task_metrics:
        print("❌ Aucune tâche apprise trouvée !\n")
        print("💡 Pour tester le Mode Assisté, tu dois d'abord :")
        print("   1. Lancer l'application : cd geniusia2 && ./run.sh")
        print("   2. Cliquer sur 'Start'")
        print("   3. Effectuer 3 fois la même action (ex: 3 clics)")
        print("   4. Attendre la notification 'Tâche apprise'")
        print("   5. Relancer ce script\n")
        return
    
    print(f"✅ {len(task_metrics)} tâche(s) trouvée(s) :\n")
    for i, task_info in enumerate(task_metrics, 1):
        print(f"   {i}. {task_info['task_name']}")
        print(f"      ID: {task_info['task_id']}")
        print(f"      Observations: {task_info['observation_count']}")
        print(f"      Confiance: {task_info['confidence_score']:.2%}")
        print()
    
    # Tester la vérification de suggestions
    print("🔍 Test de vérification de suggestions...")
    print("   (Ceci simule ce qui se passerait après une action utilisateur)\n")
    
    # Appeler check_for_suggestions
    orchestrator.check_for_suggestions()
    
    # Vérifier s'il y a une suggestion
    current = orchestrator.suggestion_manager.get_current_suggestion()
    
    if current:
        print("✅ Suggestion créée !")
        print(f"   Tâche: {current['task_name']}")
        print(f"   Confiance: {current['confidence']:.2%}")
        print(f"   Similarité: {current['similarity']:.2%}\n")
        
        print("💡 Dans l'application, un overlay apparaîtrait maintenant")
        print("   avec les options : [Entrée] Accepter | [Échap] Refuser\n")
    else:
        print("ℹ️  Aucune suggestion créée")
        print("   Raisons possibles :")
        print("   - Le contexte actuel ne correspond à aucune tâche")
        print("   - La similarité est < 75%")
        print("   - Pas d'action utilisateur récente\n")
    
    print("="*60)
    print("  📝 RÉSUMÉ")
    print("="*60 + "\n")
    
    print("Le Mode Assisté fonctionne en 2 phases :\n")
    print("1️⃣  APPRENTISSAGE (Mode Shadow)")
    print("   - Effectue 3x la même action")
    print("   - Le système crée une tâche\n")
    
    print("2️⃣  SUGGESTIONS (Mode Assisté)")
    print("   - Refais une action similaire")
    print("   - Le système suggère la tâche apprise")
    print("   - Un overlay apparaît avec [Entrée] / [Échap]\n")
    
    print("⚠️  IMPORTANT :")
    print("   Le Mode Assisté n'est PAS automatique dans la version actuelle.")
    print("   Il faut que l'Orchestrator appelle check_for_suggestions()")
    print("   après chaque action utilisateur.\n")
    
    print("🔧 SOLUTION :")
    print("   Ajouter un appel périodique à check_for_suggestions()")
    print("   dans la boucle principale de l'Orchestrator.\n")


if __name__ == "__main__":
    main()
