from celery import shared_task

from . import reminders

# PERF-004: explicit retry policy with backoff, capped at 3 attempts. Safe to
# retry — each reminder function's ReminderLog dedup (unique per object/key/
# date) makes a retried run a no-op for anything already sent, not a
# duplicate notification.
_REMINDER_TASK_KWARGS = dict(
    autoretry_for=(Exception,),
    retry_backoff=True,
    retry_backoff_max=600,
    retry_jitter=True,
    max_retries=3,
)


@shared_task(**_REMINDER_TASK_KWARGS)
def remind_overdue_tasks_task():
    return reminders.remind_overdue_tasks()


@shared_task(**_REMINDER_TASK_KWARGS)
def remind_upcoming_events_task():
    return reminders.remind_upcoming_events()


@shared_task(**_REMINDER_TASK_KWARGS)
def remind_expiring_contracts_task():
    return reminders.remind_expiring_contracts()


@shared_task(**_REMINDER_TASK_KWARGS)
def remind_approaching_leave_task():
    return reminders.remind_approaching_leave()
