import json
import os
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

# Importer les classes LLM
from llm_classes.mistral_large import MistralLarge
from llm_classes.pixtral_12b import Pixtral12b
from llm_classes.ollama import Ollama

def test_different_models():
    """
    Tester les performances de différents modèles LLM avec le même agent.
    """
    # Données de test pour le JSON
    test_json = {
        "id": "123456",
        "title": "Problème de connexion au serveur",
        "description": "Depuis ce matin, impossible de se connecter au serveur principal. Erreur 500.",
        "priority": "high",
        "tags": ["connexion", "serveur", "erreur"],
        "history": [
            {"date": "2023-04-01", "action": "Création du ticket"},
            {"date": "2023-04-02", "action": "Première tentative de résolution"}
        ]
    }
    
    # Répertoire pour les rapports
    os.makedirs("reports/json_reports", exist_ok=True)
    os.makedirs("reports/markdown_reports", exist_ok=True)
    
    # Liste des modèles à tester
    models = {
        "mistral": MistralLarge(),
        "pixtral": Pixtral12b(),
        "ollama": Ollama("llama2")  # Spécifier le modèle pour Ollama
    }
    
    # Test de chaque modèle pour l'analyse JSON
    results = {}
    for model_name, model in models.items():
        print(f"Test avec le modèle {model_name}...")
        
        # Créer l'agent avec ce modèle
        json_agent = AgentJsonAnalyser(model)
        
        # Tester les paramètres appliqués
        print(f"  Paramètres: {json_agent.config.get_params()}")
        print(f"  Prompt système: {json_agent.config.get_system_prompt()[:50]}...")
        
        # Exécuter le test
        try:
            result = json_agent.executer(test_json)
            success = True
        except Exception as e:
            result = str(e)
            success = False
        
        # Enregistrer le résultat
        results[model_name] = {
            "result": result,
            "success": success,
            "metadata": json_agent.historique[-1]["metadata"] if json_agent.historique else None
        }
        
        print(f"  Succès: {success}")
        print()
    
    # Générer un rapport comparatif
    print("Génération du rapport comparatif...")
    report_generator = AgentReportGenerator(MistralLarge())
    json_path, md_path = report_generator.executer(
        {"resultats_comparatifs": results}, 
        "comparaison_modeles"
    )
    
    print(f"Rapport généré avec succès!")
    print(f"JSON: {json_path}")
    print(f"Markdown: {md_path}")

if __name__ == "__main__":
    test_different_models() 