"""简单 gzip 压缩中间件"""
import gzip
import io

async def gzip_middleware(request, call_next):
    response = await call_next(request)
    # 只压缩大于 1KB 的 JSON 响应
    if response.headers.get("content-type", "").startswith("application/json"):
        body = b""
        async for chunk in response.body_iterator:
            body += chunk
        if len(body) > 1024:
            compressed = gzip.compress(body)
            headers = dict(response.headers)
            headers["content-encoding"] = "gzip"
            headers["content-length"] = str(len(compressed))
            from starlette.responses import Response
            return Response(content=compressed, status_code=response.status_code, headers=headers)
    return response
