from .client_context import (
    clear_current_client,
    resolve_client_from_host,
    resolve_forced_workspace_client,
    set_current_client,
)


class ClientContextMiddleware:
    """
    Resolve tenant client from request host/subdomain and store in context var.
    Falls back to default client if no subdomain mapping is found.
    """

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

    def __call__(self, request):
        client = resolve_client_from_host(request.get_host())
        if not client:
            workspace_subdomain = (request.headers.get("X-Workspace-Subdomain") or "").strip().lower()
            if workspace_subdomain and all(c.isalnum() or c == "-" for c in workspace_subdomain):
                from .models import Client

                client = Client.objects.filter(subdomain=workspace_subdomain, is_active=True).first()
        if not client:
            client = resolve_forced_workspace_client()
        set_current_client(client)
        try:
            response = self.get_response(request)
        finally:
            clear_current_client()
        return response
