from __future__ import annotations

import uuid

from fastapi import FastAPI, Request


def install_request_context(application: FastAPI) -> None:
    @application.middleware("http")
    async def request_context(request: Request, call_next):
        request_id = uuid.uuid4().hex
        request.state.request_id = request_id
        response = await call_next(request)
        response.headers["X-Request-ID"] = request_id
        return response
