import threading

_thread_local = threading.local()


def get_current_language():
    """Get the current language from thread-local storage."""
    return getattr(_thread_local, "language", "en")


class LanguageMiddleware:
    """
    Reads Accept-Language header (or user's language preference)
    and stores it in thread-local for serializer helpers.
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # Check Accept-Language header
        accept_lang = request.headers.get("Accept-Language", "en")
        lang = "ar" if "ar" in accept_lang.lower() else "en"

        # If user is authenticated, prefer their stored language
        if hasattr(request, "user") and request.user.is_authenticated:
            user_lang = getattr(request.user, "language", None)
            if user_lang:
                lang = user_lang

        _thread_local.language = lang
        request.language = lang

        response = self.get_response(request)
        return response
