"""Module that sets up :term:`GSO` as a Celery worker. This will allow for the scheduling of regular task workflows."""

from celery import Celery

from gso import init_worker_app
from gso.settings import load_oss_params


class OrchestratorCelery(Celery):
    """A :term:`GSO` instance that functions as a Celery worker."""

    def on_init(self) -> None:  # noqa: PLR6301
        """Initialise a new Celery worker."""
        init_worker_app()


settings = load_oss_params()

celery = OrchestratorCelery(
    "worker",
    broker=settings.CELERY.broker_url,
    backend=settings.CELERY.result_backend,
    include=[
        "gso.schedules.task_vacuum",
        "gso.schedules.validate_products",
        "gso.schedules.validate_subscriptions",
    ],
)

celery.conf.update(result_expires=settings.CELERY.result_expires)
celery.conf.update(redbeat_redis_url=settings.CELERY.broker_url)