import os
from types import SimpleNamespace
from uuid import uuid4

try:
    from celery import Celery
except ImportError:  # pragma: no cover - test/dev fallback when celery is absent
    Celery = None

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings")

if Celery is not None:
    app = Celery("config")
    app.config_from_object("django.conf:settings", namespace="CELERY")
    app.autodiscover_tasks()
else:
    class _FallbackCeleryApp:
        def config_from_object(self, *_args, **_kwargs):
            return None

        def autodiscover_tasks(self, *_args, **_kwargs):
            return None

        def task(self, *decorator_args, **decorator_kwargs):
            bind = decorator_kwargs.get("bind", False)

            def decorator(func):
                def delay(*args, **kwargs):
                    task_id = f"missing-celery-{uuid4()}"
                    return SimpleNamespace(
                        id=task_id,
                        status="FAILURE",
                        result={"error": "Celery is not installed."},
                    )

                if bind:
                    def wrapped(*args, **kwargs):
                        dummy_self = SimpleNamespace(
                            request=SimpleNamespace(id=f"missing-celery-{uuid4()}"),
                            update_state=lambda **_kw: None,
                        )
                        return func(dummy_self, *args, **kwargs)

                    wrapped.delay = delay
                    wrapped.__name__ = func.__name__
                    wrapped.__doc__ = func.__doc__
                    return wrapped

                func.delay = delay
                return func

            if decorator_args and callable(decorator_args[0]) and len(decorator_args) == 1:
                return decorator(decorator_args[0])
            return decorator

    app = _FallbackCeleryApp()
