"""Attach request-scoped SaaS metadata onto ``flask.g``."""

from __future__ import annotations

import uuid

from flask import Request, g


def build_request_context(request: Request, tenant_data: dict[str, str]) -> dict[str, object]:
    """Populate ``flask.g`` and return a normalized request context."""
    g.tenant = tenant_data
    g.app_id = (request.headers.get("X-App-ID") or "").strip() or None
    g.user_id = (request.headers.get("X-User-ID") or "").strip() or None
    g.request_id = (request.headers.get("X-Request-ID") or "").strip() or str(uuid.uuid4())

    tenant_id = tenant_data["tenant_id"]
    payload = {}
    if hasattr(request, "get_json"):
        try:
            payload = request.get_json(silent=True) or {}
        except Exception:
            payload = {}
    return {
        "request_id": g.request_id,
        "tenant": g.tenant,
        "db": tenant_data["db_name"],
        "storage": f"storage/tenants/{tenant_id}",
        "logs": f"logs/tenants/{tenant_id}",
        "app_id": g.app_id,
        "user_id": g.user_id,
        "payload": payload,
    }
