"""
notifications.py
Handles outgoing email notifications for the events app.
"""

import logging

from django.conf import settings
from django.core.mail import send_mail
from django.template.loader import render_to_string

logger = logging.getLogger('vcks')


def send_registration_notifications(registration):
    """
    Sends two emails after a successful registration:
      1. Confirmation to the registrant.
      2. Internal notification to the event-specific mailbox (skipped if not configured).

    All mail failures are logged but never raise, so registration is never blocked.

    :param registration: The saved Registration instance.
    """
    tournament = registration.tournament
    event = tournament.event

    context = {
        'registration': registration,
        'tournament': tournament,
        'event': event,
    }

    # ── 1. Registrant confirmation ──────────────────────────────────────────
    registrant_subject = f"Anmeldung {event.name} {tournament.name} {registration.club}"
    try:
        registrant_body = render_to_string(
            'events/email_registrant_confirmation.txt', context
        )
        send_mail(
            subject=registrant_subject,
            message=registrant_body,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[registration.mail],
            fail_silently=False,
        )
        logger.info(
            "Registrant confirmation sent to %s for registration %s.",
            registration.mail, registration.pk,
        )
    except Exception as exc:  # pylint: disable=broad-except
        logger.error(
            "Failed to send registrant confirmation for registration %s: %s",
            registration.pk, exc,
        )

    # ── 2. Organizer notification ───────────────────────────────────────────
    if not event.registration_mail:
        logger.info(
            "No registration_mail configured for event %s – skipping organizer notification.",
            event.pk,
        )
        return

    organizer_subject = (
        f"[{event.name} – {tournament.name}] "
        f"Neue Anmeldung: {registration.club} {registration.team}"
    )
    try:
        organizer_body = render_to_string(
            'events/email_organizer_notification.txt', context
        )
        send_mail(
            subject=organizer_subject,
            message=organizer_body,
            from_email=settings.DEFAULT_FROM_EMAIL,
            recipient_list=[event.registration_mail],
            fail_silently=False,
        )
        logger.info(
            "Organizer notification sent to %s for registration %s.",
            event.registration_mail, registration.pk,
        )
    except Exception as exc:  # pylint: disable=broad-except
        logger.error(
            "Failed to send organizer notification for registration %s: %s",
            registration.pk, exc,
        )
