from orchestrator import Orchestrator
from agents.agent_json_analyser import AgentJsonAnalyser
from agents.agent_image_sorter import AgentImageSorter
from agents.agent_image_analyser import AgentImageAnalyser
from agents.agent_report_generator import AgentReportGenerator

from llm_classes.mistral_large import MistralLarge
from llm_classes.pixtral_12b import Pixtral12b
from llm_classes.ollama import Ollama

import os
import logging

# Configuration du logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', 
                    filename='test_orchestrator.log', filemode='w')
logger = logging.getLogger("TestOrchestrator")

def test_orchestrator():
    # Vérifier que le dossier output existe
    if not os.path.exists("output/"):
        os.makedirs("output/")
        logger.warning("Le dossier output/ n'existait pas et a été créé")
        print("ATTENTION: Le dossier output/ n'existait pas et a été créé")
    
    # Vérifier le contenu du dossier output
    tickets = [d for d in os.listdir("output/") if d.startswith("ticket_") and os.path.isdir(os.path.join("output/", d))]
    logger.info(f"Tickets trouvés dans output/: {tickets}")
    print(f"Tickets existants dans output/: {tickets}")
    
    # Initialisation des LLM
    json_llm = MistralLarge()
    logger.info("LLM MistralLarge initialisé")
    print("LLM MistralLarge initialisé")
    
    image_sorter_llm = Pixtral12b()
    logger.info("LLM Pixtral12b initialisé")
    print("LLM Pixtral12b initialisé")
    
    image_analyser_llm = Ollama()
    logger.info("LLM Ollama initialisé")
    print("LLM Ollama initialisé")
    
    report_generator_llm = MistralLarge()
    logger.info("Deuxième LLM MistralLarge initialisé")
    print("Deuxième LLM MistralLarge initialisé")
    
    # Création des agents
    json_agent = AgentJsonAnalyser(json_llm)
    logger.info("Agent JSON analyser initialisé")
    print("Agent JSON analyser initialisé")
    
    image_sorter = AgentImageSorter(image_sorter_llm)
    logger.info("Agent Image sorter initialisé")
    print("Agent Image sorter initialisé")
    
    image_analyser = AgentImageAnalyser(image_analyser_llm)
    logger.info("Agent Image analyser initialisé")
    print("Agent Image analyser initialisé")
    
    report_generator = AgentReportGenerator(report_generator_llm)
    logger.info("Agent Rapport générateur initialisé")
    print("Agent Rapport générateur initialisé")
    
    # Initialisation de l'orchestrateur avec les agents
    logger.info("Initialisation de l'orchestrateur")
    print("Initialisation de l'orchestrateur")
    
    orchestrator = Orchestrator(
        output_dir="output/",
        json_agent=json_agent,
        image_sorter=image_sorter,
        image_analyser=image_analyser,
        report_generator=report_generator
    )
    
    # Exécution complète de l'orchestrateur
    logger.info("Début de l'exécution de l'orchestrateur")
    print("Début de l'exécution de l'orchestrateur")
    
    orchestrator.executer()
    
    logger.info("Fin de l'exécution de l'orchestrateur")
    print("Fin de l'exécution de l'orchestrateur")

if __name__ == "__main__":
    print("Démarrage du test de l'orchestrateur")
    test_orchestrator()
    print("Test terminé")