from celery import Celery
from src.core.config import settings

celery_app = Celery(
    "wine_match_worker",
    broker=f"{settings.REDIS_URL}:{settings.REDIS_PORT}/0",
    backend=f"{settings.REDIS_URL}:{settings.REDIS_PORT}/0",
)

celery_app.autodiscover_tasks(
    [
        "src.apps.export_data.services.tasks",
    ]
)

# Reasonable defaults
celery_app.conf.update(
    task_default_queue="celery",
    task_time_limit=40 * 60,
    task_soft_time_limit=35 * 60,
    task_track_started=True,
    task_ignore_result=False,
    task_annotations={
        "*": {
            "rate_limit": "10/s",
            "retry": True,
            "max_retries": 5,
            "default_retry_delay": 10,  # in seconds
        },
    },
    task_acks_late=True,
    result_expires=3600,  # 1 hour
    worker_concurrency=4,
    worker_max_tasks_per_child=100,
    worker_prefetch_multiplier=1,
    worker_send_task_events=True,
    broker_transport_options={
        "visibility_timeout": 3600,  # 1 hour
        "max_retries": 5,
        "interval_start": 0,
        "interval_step": 0.2,
        "interval_max": 0.5,
    },
    task_serializer="json",
    accept_content=["json"],
)
