#!/usr/bin/env python3
"""
Script de test pour l'agent de génération de rapport.
"""

import os
import sys
import json
import argparse
from datetime import datetime

# Ajouter le répertoire parent au path pour pouvoir importer les modules
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from agents.agent_report_generator import AgentReportGenerator
from llm_interface.llm_mock import LLMMock

def charger_donnees_test(ticket_id: str) -> dict:
    """
    Charge des données de test pour un ticket spécifique.
    
    Args:
        ticket_id: Identifiant du ticket
        
    Returns:
        Dictionnaire contenant les données simulées pour le test
    """
    # Simuler l'analyse du ticket
    ticket_analyse = (
        f"# Analyse du ticket {ticket_id}\n\n"
        "## Problème initial\n"
        "Le client signale que l'application BRG-Lab ne parvient pas à accéder aux essais sur échantillons.\n\n"
        "## Informations techniques\n"
        "- Application: BRG-Lab\n"
        "- Module: Essais sur échantillons\n\n"
        "## Chronologie des échanges\n"
        "1. CLIENT (04/05/2020) - Le client indique qu'il ne peut pas accéder aux essais sur échantillons\n"
        "2. SUPPORT (04/05/2020) - Demande d'identifiants TeamViewer\n"
        "3. CLIENT (04/05/2020) - Fournit une capture d'écran des identifiants\n"
        "4. SUPPORT (04/05/2020) - Instructions pour lancer BRG-Lab et effectuer les mises à jour\n"
    )
    
    # Simuler les analyses d'images
    analyses_images = {
        f"sample_images/{ticket_id}_image1.png": {
            "sorting": {
                "is_relevant": True,
                "reason": "Capture d'écran de l'erreur BRG-Lab"
            },
            "analysis": {
                "analyse": (
                    "La capture d'écran montre une fenêtre d'erreur de l'application BRG-Lab. "
                    "Le message indique 'Impossible d'accéder au module Essais sur échantillons'. "
                    "Code d'erreur visible: ERR-2345."
                )
            }
        },
        f"sample_images/{ticket_id}_image2.png": {
            "sorting": {
                "is_relevant": True,
                "reason": "Capture d'écran des identifiants TeamViewer"
            },
            "analysis": {
                "analyse": (
                    "La capture montre une fenêtre TeamViewer avec les identifiants de connexion. "
                    "ID: 123 456 789\n"
                    "Mot de passe: abcdef"
                )
            }
        },
        f"sample_images/{ticket_id}_image3.png": {
            "sorting": {
                "is_relevant": False,
                "reason": "Image non pertinente"
            }
        }
    }
    
    # Construire le dictionnaire de données simulées
    return {
        "ticket_id": ticket_id,
        "ticket_data": {
            "code": ticket_id,
            "name": "Problème d'accès aux essais sur échantillons",
            "description": "Impossible d'accéder aux essais sur échantillons dans BRG-Lab"
        },
        "ticket_analyse": ticket_analyse,
        "analyse_images": analyses_images
    }

def generer_reponse_llm(prompt: str) -> str:
    """
    Génère une réponse simulée pour le test.
    
    Args:
        prompt: Prompt envoyé au LLM
    
    Returns:
        Réponse simulée
    """
    rapport_json = {
        "chronologie_echanges": [
            {
                "date": "04/05/2020",
                "emetteur": "CLIENT",
                "type": "Question",
                "contenu": "Je n'arrive pas à accéder aux essais sur échantillons sur BRG-Lab"
            },
            {
                "date": "04/05/2020",
                "emetteur": "SUPPORT",
                "type": "Question",
                "contenu": "Pouvez-vous m'envoyer les identifiants TeamViewer?"
            },
            {
                "date": "04/05/2020",
                "emetteur": "CLIENT",
                "type": "Réponse",
                "contenu": "Voici les identifiants TeamViewer: ID 123 456 789, mot de passe abcdef"
            },
            {
                "date": "04/05/2020",
                "emetteur": "SUPPORT",
                "type": "Réponse",
                "contenu": "Veuillez lancer BRG-Lab et effectuer les mises à jour nécessaires."
            }
        ]
    }

    reponse = f"""
Le client rencontre un problème d'accès au module "Essais sur échantillons" dans l'application BRG-Lab. Le système affiche un message d'erreur avec le code ERR-2345.

```json
{json.dumps(rapport_json, indent=2)}
```

L'analyse des captures d'écran fournies montre que l'erreur se produit spécifiquement lors de l'accès au module "Essais sur échantillons". La première image montre clairement le message d'erreur avec le code ERR-2345. La deuxième image contient les identifiants TeamViewer utilisés pour la session de support à distance.

## Diagnostic technique

Le problème semble être lié à une mise à jour manquante de l'application BRG-Lab. Le support a recommandé de lancer l'application et d'effectuer toutes les mises à jour nécessaires, ce qui suggère que le module "Essais sur échantillons" nécessite une version plus récente pour fonctionner correctement.
"""
    return reponse

def main():
    """Fonction principale du script de test"""
    parser = argparse.ArgumentParser(description='Test de l\'agent de génération de rapport')
    parser.add_argument('--ticket', '-t', default='T0123', help='ID du ticket à traiter')
    parser.add_argument('--output', '-o', default='./output_test', help='Répertoire de sortie')
    args = parser.parse_args()
    
    # Créer le répertoire de sortie s'il n'existe pas
    os.makedirs(args.output, exist_ok=True)
    
    # Créer un LLM simulé
    llm_mock = LLMMock(generer_reponse_llm)
    
    # Initialiser l'agent de génération de rapport
    agent = AgentReportGenerator(llm_mock)
    
    print(f"Test de l'agent de génération de rapport pour le ticket {args.ticket}")
    
    # Charger les données de test
    rapport_data = charger_donnees_test(args.ticket)
    
    # Répertoire de sortie spécifique pour ce test
    rapport_dir = os.path.join(args.output, f"{args.ticket}_{datetime.now().strftime('%Y%m%d_%H%M%S')}")
    os.makedirs(rapport_dir, exist_ok=True)
    
    # Exécuter l'agent
    print("Génération du rapport...")
    json_path, md_path = agent.executer(rapport_data, rapport_dir)
    
    # Afficher les résultats
    if json_path and os.path.exists(json_path):
        print(f"Rapport JSON généré: {json_path}")
    else:
        print("Échec de la génération du rapport JSON")
    
    if md_path and os.path.exists(md_path):
        print(f"Rapport Markdown généré: {md_path}")
    else:
        print("Échec de la génération du rapport Markdown")
    
    print("Test terminé")

if __name__ == "__main__":
    main() 