"""
Proveedor de consola.

No envia nada: registra el mensaje y devuelve exito. Sirve para desarrollo y
para las pruebas automatizadas, donde llamar a un proveedor real seria lento,
costoso y una fuente de fallos intermitentes.
"""

from __future__ import annotations

import logging
import uuid

from notifications.channels.email.base import EmailPayload, EmailProvider, SendResult

logger = logging.getLogger("notifications.providers.console")


class ConsoleProvider(EmailProvider):
    name = "console"
    supports_templates = False

    def send(self, payload: EmailPayload) -> SendResult:
        message_id = uuid.uuid4().hex
        logger.info(
            "Correo simulado (proveedor de consola)",
            extra={
                "provider": self.name,
                "provider_message_id": message_id,
                "from_email": payload.from_email,
                "to": list(payload.to),
                "cc": list(payload.cc),
                "bcc_count": len(payload.bcc),
                "subject": payload.subject,
                "attachments": len(payload.attachments),
                "template_id": payload.template_id,
            },
        )
        return SendResult.ok(self.name, message_id, status_code=200)
