from datetime import datetime
from typing import Dict, List, Any, Optional

class Agent:
    """Classe de base pour tous les agents d'analyse"""
    
    def __init__(self, nom: str = "Agent"):
        """
        Initialisation d'un agent
        
        Args:
            nom: Nom de l'agent
        """
        self.nom: str = nom
        self.historique: List[Dict[str, Any]] = []
        
    def ajouter_historique(self, action: str, input_data: Any, output_data: Any) -> None:
        """
        Ajoute une entrée dans l'historique de l'agent
        
        Args:
            action: Type d'action effectuée
            input_data: Données d'entrée de l'action
            output_data: Résultat de l'action
        """
        self.historique.append({
            "timestamp": datetime.now().isoformat(),
            "action": action,
            "input": str(input_data)[:500],  # Limite pour éviter des historiques trop grands
            "output": str(output_data)[:500]  # Limite pour éviter des historiques trop grands
        })
    
    def obtenir_historique(self) -> List[Dict[str, Any]]:
        """
        Retourne l'historique complet de l'agent
        
        Returns:
            Liste des actions effectuées par l'agent
        """
        return self.historique
    
    def executer(self, *args, **kwargs) -> Any:
        """
        Méthode abstraite à implémenter dans les classes dérivées
        C'est la méthode principale qui exécute la tâche spécifique de l'agent
        
        Returns:
            Résultat de l'exécution, dépend de l'implémentation de chaque agent
        """
        raise NotImplementedError("Chaque agent doit implémenter sa propre méthode executer()") 