"""
Almacenamiento temporal del contenido pendiente de enviar.

Cuando el envio es asincrono hay que guardar el contenido entre que la
peticion responde y el worker lo procesa. Se hace en la base de datos y por la
cola solo viaja el UUID del envio:

* el broker no acumula mensajes de decenas de megabytes con los adjuntos;
* un reintento vuelve a leer de una fuente unica en lugar de arrastrar una
  copia por cada intento;
* el contenido se borra en cuanto el envio termina, con exito o sin el.

Es almacenamiento operativo, no auditoria. `NOTIFICATIONS_STORE_BODY` controla
cosa distinta: si el cuerpo queda registrado de forma permanente en
`NotificationMessage`.
"""

from __future__ import annotations

from django.db import models


class MessagePayloadBlob(models.Model):
    """Contenido serializado de un envio pendiente."""

    message = models.OneToOneField(
        "notifications.NotificationMessage",
        on_delete=models.CASCADE,
        related_name="payload_blob",
        primary_key=True,
    )
    data = models.BinaryField(
        help_text="Contenido serializado en JSON y comprimido con gzip."
    )
    created_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        db_table = "notification_payload_blob"
        verbose_name = "Contenido pendiente"
        verbose_name_plural = "Contenidos pendientes"

    def __str__(self) -> str:
        return f"contenido de {self.message_id}"
