"""
Mémoire conversationnelle de l'agent.

Stocke les messages sous la forme attendue par l'API OpenAI :
    {"role": "user" | "assistant", "content": "..."}

Limite : 10 messages maximum (FIFO — le plus ancien est retiré automatiquement).
"""

from __future__ import annotations

from collections import deque

MAX_MESSAGES = 10

_memory: deque[dict] = deque(maxlen=MAX_MESSAGES)


def store(message: dict) -> None:
    """
    Ajoute un message à la mémoire.
    Si la capacité (10) est atteinte, le message le plus ancien est supprimé.

    Args:
        message: dict au format {"role": "user"|"assistant", "content": "..."}
    """
    _memory.append(message)


def recall(n: int = 5) -> list[dict]:
    """
    Retourne les n derniers messages stockés.

    Args:
        n: Nombre de messages à récupérer (défaut : 5).
           Plafonné à MAX_MESSAGES si n est supérieur.

    Returns:
        Liste de messages du plus ancien au plus récent.
    """
    messages = list(_memory)
    return messages[-n:] if n < len(messages) else messages


def clear() -> None:
    """Vide complètement la mémoire."""
    _memory.clear()
