#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Script d'exemple pour montrer l'utilisation des agents d'analyse d'image et JSON
"""

import os
import sys
import json
import argparse
from datetime import datetime
from pathlib import Path

# Ajouter le répertoire parent au sys.path pour importer les modules
sys.path.append(str(Path(__file__).parent.parent))

from agents.analyse_image import AgentAnalyseImage
from agents.analyse_json import AgentAnalyseJSON

def create_output_dir():
    """Crée un répertoire pour les sorties basé sur la date/heure"""
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    output_dir = f"outputs/vision_{timestamp}"
    os.makedirs(output_dir, exist_ok=True)
    return output_dir

def analyse_directe(image_path, output_dir):
    """Analyse directe avec l'agent d'analyse d'image"""
    print(f"\n=== Analyse directe de l'image {os.path.basename(image_path)} ===")
    
    # Création d'une instance AgentAnalyseImage
    agent = AgentAnalyseImage("AgentVision")
    
    # Analyse de l'image avec une question spécifique
    question = "Décris en détail cette image. Qu'est-ce que tu y vois? Y a-t-il du texte visible?"
    print(f"Question: {question}")
    
    resultats = agent.executer(image_path, question=question)
    
    if "erreur" in resultats:
        print(f"Erreur: {resultats['erreur']}")
        return
    
    # Affichage du résultat
    print("\nRéponse:")
    for analyse in resultats["analyses"]:
        print(f"\n{analyse['reponse']}")
    
    # Sauvegarde du résultat
    output_file = os.path.join(output_dir, "resultat_direct.json")
    agent.sauvegarder_resultats(output_file, resultats)
    print(f"\nRésultat sauvegardé dans: {output_file}")

def workflow_complet(image_path, json_path=None, output_dir=None):
    """Workflow complet: analyse image puis analyse JSON"""
    print(f"\n=== Workflow complet pour l'image {os.path.basename(image_path)} ===")
    
    if output_dir is None:
        output_dir = create_output_dir()
    
    # Étape 1: Analyse de l'image
    print("\nÉtape 1: Analyse de l'image")
    agent_image = AgentAnalyseImage("AgentVision")
    
    # Chargement des données JSON si spécifiées
    json_data = None
    if json_path:
        try:
            with open(json_path, 'r', encoding='utf-8') as f:
                json_data = json.load(f)
            print(f"Données JSON chargées depuis {json_path}")
        except Exception as e:
            print(f"Erreur lors du chargement du JSON: {e}")
    
    # Exécution de l'analyse d'image
    resultats_image = agent_image.executer(image_path, json_data)
    
    # Sauvegarde des résultats intermédiaires
    image_output_file = os.path.join(output_dir, "analyse_image.json")
    agent_image.sauvegarder_resultats(image_output_file, resultats_image)
    print(f"Analyse d'image sauvegardée dans: {image_output_file}")
    
    # Étape 2: Analyse des résultats JSON
    print("\nÉtape 2: Analyse approfondie des résultats")
    agent_json = AgentAnalyseJSON("AgentAnalyseJSON")
    
    # Analyse des résultats de l'image
    question_json = "Analyse les résultats de l'analyse d'image et extrait les éléments clés."
    resultats_analyse = agent_json.executer(resultats_image, question_json)
    
    # Sauvegarde des résultats d'analyse
    json_output_file = os.path.join(output_dir, "analyse_complete.json")
    with open(json_output_file, 'w', encoding='utf-8') as f:
        json.dump(resultats_analyse, f, ensure_ascii=False, indent=2)
    print(f"Analyse complète sauvegardée dans: {json_output_file}")
    
    # Fusion des résultats
    resultats_finaux = {
        "image": image_path,
        "timestamp": datetime.now().isoformat(),
        "analyse_image": resultats_image,
        "analyse_json": resultats_analyse
    }
    
    # Sauvegarde des résultats finaux
    final_output_file = os.path.join(output_dir, "resultats_finaux.json")
    with open(final_output_file, 'w', encoding='utf-8') as f:
        json.dump(resultats_finaux, f, ensure_ascii=False, indent=2)
    print(f"Résultats finaux sauvegardés dans: {final_output_file}")
    
    return resultats_finaux

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Analyse d'images avec les agents")
    parser.add_argument("--image", required=True, help="Chemin vers l'image à analyser")
    parser.add_argument("--json", help="Chemin vers un fichier JSON complémentaire (optionnel)")
    parser.add_argument("--mode", choices=["direct", "complet"], default="complet", 
                        help="Mode d'analyse: direct (simple) ou complet (workflow)")
    
    args = parser.parse_args()
    
    # Vérification de l'existence de l'image
    if not os.path.exists(args.image):
        print(f"Erreur: L'image {args.image} n'existe pas")
        sys.exit(1)
    
    # Création du répertoire de sortie
    output_dir = create_output_dir()
    
    # Exécution du mode choisi
    if args.mode == "direct":
        analyse_directe(args.image, output_dir)
    else:
        workflow_complet(args.image, args.json, output_dir)
    
    print("\nAnalyse terminée !") 