from django.utils.deprecation import MiddlewareMixin
from apps.platform.tenancy.models import Tenant
import logging

logger = logging.getLogger(__name__)


class TenantMiddleware(MiddlewareMixin):
    """Attach tenant to request based on subdomain or X-Tenant header.

    Requires tenant module to be enabled via `ENABLED_MODULES`.
    """
    def process_request(self, request):
        try:
            # header takes precedence
            header = request.META.get('HTTP_X_TENANT')
            slug = None
            if header:
                slug = header.strip()
            else:
                host = request.get_host().split(':')[0]
                parts = host.split('.')
                if len(parts) > 2:
                    # subdomain present
                    slug = parts[0]

            tenant = None
            if slug:
                tenant = Tenant.objects.filter(slug=slug, is_active=True).first()
            request.tenant = tenant
        except Exception:
            logger.exception('TenantMiddleware failed')
            request.tenant = None
