import logging

from celery import shared_task

logger = logging.getLogger(__name__)


@shared_task(bind=True, max_retries=2, default_retry_delay=30)
def dispatch_lucky_dip_announcement_task(self, lucky_dip_id: int, channels: list[str]):
    """
    Async Celery task that dispatches announcement notifications for a Lucky Dip
    across the requested channels (in_app, push, email, whatsapp, sms).
    """
    logger.info("[START] dispatch_lucky_dip_announcement_task lucky_dip_id=%s channels=%s", lucky_dip_id, channels)
    try:
        from apps.business.lucky_dip.models import LuckyDip
        from apps.business.lucky_dip.services.announcement_service import dispatch_lucky_dip_announcement

        lucky_dip = LuckyDip.objects.get(id=lucky_dip_id)
        result = dispatch_lucky_dip_announcement(lucky_dip, channels=channels)
        logger.info("[DONE] dispatch_lucky_dip_announcement_task result=%s", result)
        return result
    except Exception as exc:
        logger.exception("[FAIL] dispatch_lucky_dip_announcement_task lucky_dip_id=%s error=%s", lucky_dip_id, exc)
        try:
            self.retry(exc=exc)
        except Exception:
            pass
        return {"error": str(exc)}
