"""
    https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html
"""
import os
import logging

from celery import Celery
from celery.signals import after_setup_logger
from decouple import config
from django.conf import settings

# this code copied from manage.py
# set the default Django settings module for the 'celery' app.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'core.settings')

# you can change the name here
app = Celery("core")

# read config from Django settings, the CELERY namespace would make celery
# config keys has `CELERY` prefix
app.config_from_object('django.conf:settings', namespace='CELERY')

# discover and load tasks.py from from all registered Django apps
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


#To start scheduling tasks based on priorities you need to configure queue_order_strategy transport option.
app.conf.broker_transport_options = {
    'queue_order_strategy': 'priority',
}

#Celery debug
@app.task(bind=True)
def debug_task(self):
    print(f'Request: {self.request!r}')

# Add celery logs
@after_setup_logger.connect()
def on_after_setup_logger(logger, **kwargs):
    formatter = logger.handlers[0].formatter
    file_handler = logging.FileHandler('logs/celery.log')
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)

