"""Static file helpers for the Web SPA."""
from __future__ import annotations

from starlette.responses import Response
from fastapi.staticfiles import StaticFiles


class NoCacheStaticFiles(StaticFiles):
    """StaticFiles variant that asks browsers to revalidate SPA assets.

    The Web UI is a module graph of small JS files. Without revalidation, users
    can keep an old chat.js after a deploy and miss frontend-only fixes.
    """

    def file_response(self, *args, **kwargs) -> Response:
        response = super().file_response(*args, **kwargs)
        response.headers["Cache-Control"] = "no-cache"
        return response
