from celery import shared_task
import logging
from django.conf import settings
from django.core.mail import EmailMessage
from django.template.loader import get_template


logger = logging.getLogger(__name__)


@shared_task(
    bind=True,
    max_retries=3,
    default_retry_delay=30,
    name="apps.calls.tasks.email_task",
)
def send_email_task(
        self,
        subject: str,
        html_content: str,
        recipient_list: list,
        key: dict,
        files: list | None = None,
):
    try:
        message = get_template(html_content).render(key)

        msg = EmailMessage(
            subject=subject,
            body=message,
            from_email=f"{settings.EMAIL_FROM_HEADER} <{settings.FROM_EMAIL}>",
            to=recipient_list,
        )

        msg.content_subtype = 'html'

        if files:
            for file in files:
                msg.attach_file(file)

        msg.send()
        logger.info("Email send to %s", recipient_list)

    except Exception as exc:
        logger.error("Email failed to send to %s", exc)
        raise self.retry(exc=exc)
