"""Resolve tenants from incoming Flask requests."""

from __future__ import annotations

from flask import Request

from platform.tenants.tenant_registry import TenantRegistry


class TenantResolver:
    """Resolve tenant context using domain, headers, or explicit identifiers."""

    def __init__(self, registry: TenantRegistry | None = None) -> None:
        self.registry = registry or TenantRegistry()

    def resolve_from_request(self, request: Request) -> dict[str, object] | None:
        tenant_id = (request.headers.get("X-Tenant-Id") or request.args.get("tenant_id") or "").strip()
        if tenant_id:
            tenant = self.registry.get_tenant(tenant_id)
            return self._serialize_tenant(tenant)

        host = request.host.split(":", 1)[0].strip().lower()
        tenant = self.registry.get_tenant_by_domain(host)
        return self._serialize_tenant(tenant)

    @staticmethod
    def _serialize_tenant(tenant) -> dict[str, object] | None:
        if tenant is None:
            return None
        return {
            "tenant_id": tenant.tenant_id,
            "slug": tenant.slug,
            "name": tenant.name,
            "status": tenant.status,
            "plan_id": tenant.plan_id,
            "data_db_name": tenant.data_db_name,
            "storage_key": tenant.storage_key,
        }

