"""
Tenant Middleware for request-based tenant resolution.
"""
import threading
from typing import Optional

from django.http import HttpRequest

_thread_locals = threading.local()


def get_current_tenant():
    """Get the current tenant from thread local storage."""
    return getattr(_thread_locals, 'tenant', None)


def get_current_request() -> Optional[HttpRequest]:
    """Get the current request from thread local storage."""
    return getattr(_thread_locals, 'request', None)


class TenantMiddleware:
    """
    Middleware to set the current tenant in thread local storage.
    """
    
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # Set request in thread local
        _thread_locals.request = request
        
        # Get tenant from request (set by django-tenants)
        if hasattr(request, 'tenant'):
            _thread_locals.tenant = request.tenant
        
        response = self.get_response(request)
        
        # Clean up
        if hasattr(_thread_locals, 'tenant'):
            del _thread_locals.tenant
        if hasattr(_thread_locals, 'request'):
            del _thread_locals.request
            
        return response
