from celery import Celery
from app.core.config import get_settings


settings = get_settings()

celery_app = Celery(
    "notification_service",
    broker=settings.celery_broker_url,
    backend=settings.celery_result_backend,
    include=[
        "app.workers.notifications",
        "app.workers.deliveries",
        "app.workers.webhooks",
        "app.workers.dlq",
        "app.workers.crm_sync",
        "app.workers.scheduled_sender",
    ],
)

celery_app.conf.update(
    task_acks_late=True,
    worker_prefetch_multiplier=1,
    task_default_queue="notifications",
    task_routes={
        "app.workers.notifications.*": {"queue": "notifications"},
        "app.workers.deliveries.*": {"queue": "deliveries"},
        "app.workers.webhooks.*": {"queue": "webhooks"},
        "app.workers.dlq.*": {"queue": "dlq"},
        "app.workers.crm_sync.*": {"queue": "crm_sync"},
        "app.workers.scheduled_sender.*": {"queue": "notifications"},
    },
    beat_schedule={
        "replay-dlq": {
            "task": "app.workers.dlq.replay_dlq",
            "schedule": 300.0,
        },
        "cleanup-logs": {
            "task": "app.workers.notifications.cleanup_logs",
            "schedule": 3600.0,
        },
        "scheduled-crm-sync": {
            "task": "app.workers.crm_sync.scheduled_sync_all",
            "schedule": 3600.0,  # Каждый час
        },
        "send-scheduled-notifications": {
            "task": "app.workers.scheduled_sender.send_scheduled_notifications",
            "schedule": 60.0,  # Каждую минуту
        },
        "cleanup-old-scheduled": {
            "task": "app.workers.scheduled_sender.cleanup_old_scheduled",
            "schedule": 86400.0,  # Раз в день
        },
    },
)


@celery_app.task(name="app.workers.ping")
def ping() -> str:
    return "pong"

