"""MemoryTypeSchema — schema de un tipo de memoria de agente."""

from dataclasses import dataclass, field

from memory_field import MemoryField


@dataclass
class MemoryTypeSchema:
    """Schema de un tipo de memoria.

    Define la estructura de los datos, la estrategia de merge por campo,
    y como se organizan en el filesystem. Soporta 3 modos de operacion:
        upsert      — crear o actualizar (default).
        add_only    — solo crear, nunca actualizar existentes.
        update_only — solo actualizar existentes, nunca crear nuevos.

    Attributes:
        memory_type:       nombre del tipo (ej: "profile", "preferences").
        description:       descripcion del tipo para el LLM.
        fields:            lista de campos que define la estructura.
        filename_template: template para el nombre de archivo al persistir.
        directory:         directorio donde se almacenan las instancias.
        enabled:           si el tipo esta activo.
        operation_mode:    modo de operacion ("upsert" | "add_only" | "update_only").
    """

    memory_type: str
    description: str = ""
    fields: list[MemoryField] = field(default_factory=list)
    filename_template: str = ""
    directory: str = ""
    enabled: bool = True
    operation_mode: str = "upsert"
