"""Feature flag handler for the Meet core app."""

from functools import wraps

from django.conf import settings
from django.http import Http404


class FeatureFlag:
    """Check if features are enabled and return error responses."""

    FLAGS = {
        "recording": "RECORDING_ENABLE",
        "subtitle": "ROOM_SUBTITLE_ENABLED",
        "file_upload": "FILE_UPLOAD_ENABLED",
        "addons": "ADDONS_ENABLED",
        "application": "APPLICATION_ENABLED",
        "roomkit": "ROOMKIT_ENABLED",
        "connection_test": "CONNECTION_TEST_ENABLED",
    }

    @classmethod
    def flag_is_active(cls, flag_name):
        """Check if a feature flag is active."""

        setting_name = cls.FLAGS.get(flag_name)

        if setting_name is None:
            return False

        return getattr(settings, setting_name, False)

    @classmethod
    def require(cls, flag_name):
        """Decorator to check feature at the beginning of endpoint methods."""

        if flag_name not in cls.FLAGS:
            raise ValueError(f"Unknown feature flag: {flag_name}")

        def decorator(view_func):
            @wraps(view_func)
            def wrapper(self, request, *args, **kwargs):
                if not cls.flag_is_active(flag_name):
                    raise Http404
                return view_func(self, request, *args, **kwargs)

            return wrapper

        return decorator
