"""Seed the 4 reminder PeriodicTasks (django-celery-beat).

Idempotent (get_or_create). Safe to re-run — schedule tweaks made in the
Django admin after the first run are left alone unless the schedule itself
changed here.
"""

from django.core.management.base import BaseCommand
from django_celery_beat.models import CrontabSchedule, PeriodicTask

TASKS = [
    {
        "name": "scheduler.remind_overdue_tasks",
        "task": "apps.scheduler.tasks.remind_overdue_tasks_task",
        "crontab": {"minute": "0", "hour": "7"},
    },
    {
        "name": "scheduler.remind_upcoming_events",
        "task": "apps.scheduler.tasks.remind_upcoming_events_task",
        "crontab": {"minute": "0", "hour": "*"},
    },
    {
        "name": "scheduler.remind_expiring_contracts",
        "task": "apps.scheduler.tasks.remind_expiring_contracts_task",
        "crontab": {"minute": "0", "hour": "7"},
    },
    {
        "name": "scheduler.remind_approaching_leave",
        "task": "apps.scheduler.tasks.remind_approaching_leave_task",
        "crontab": {"minute": "0", "hour": "7"},
    },
]


class Command(BaseCommand):
    help = "Seed the 4 reminder PeriodicTask rows (django-celery-beat). Idempotent."

    def handle(self, *args, **options):
        for entry in TASKS:
            schedule, _ = CrontabSchedule.objects.get_or_create(**entry["crontab"])
            task, created = PeriodicTask.objects.get_or_create(
                name=entry["name"],
                defaults={"task": entry["task"], "crontab": schedule, "enabled": True},
            )
            if not created and (task.task != entry["task"] or task.crontab_id != schedule.id):
                task.task = entry["task"]
                task.crontab = schedule
                task.save(update_fields=["task", "crontab"])
            self.stdout.write(f"{'created' if created else 'ok'}: {entry['name']}")
