"""Platform-admin authored email delivery tasks."""
from __future__ import annotations

import structlog

from src.integrations.email_provider import email_transport_configured, get_email_provider

logger = structlog.get_logger()


async def send_admin_email(
    _ctx: dict,
    *,
    recipient_emails: list[str],
    from_email: str,
    subject: str,
    html_body: str,
    requested_by: str,
) -> dict:
    """Deliver an operator-authored email without retrying already-sent recipients."""
    if not email_transport_configured():
        logger.error("admin_email_not_sent_unconfigured", requested_by=requested_by)
        return {"sent": 0, "failed": len(recipient_emails), "status": "email_unconfigured"}

    provider = get_email_provider(from_email=from_email)
    sent = 0
    failed = 0
    message_ids: list[str] = []
    for recipient_email in recipient_emails:
        result = await provider.send(recipient_email, subject, html_body)
        if result.success:
            sent += 1
            if result.message_id:
                message_ids.append(result.message_id)
        else:
            failed += 1
            logger.warning(
                "admin_email_recipient_failed",
                requested_by=requested_by,
                recipient_email=recipient_email,
                error=result.error,
            )

    logger.info(
        "admin_email_delivery_complete",
        requested_by=requested_by,
        recipient_count=len(recipient_emails),
        sent=sent,
        failed=failed,
        message_ids=message_ids[:5],
    )
    return {"sent": sent, "failed": failed, "message_ids": message_ids}
