from apps.audit.services import log_audit

MUTATING = {"POST", "PUT", "PATCH", "DELETE"}
SKIP_PREFIXES = ("/admin/", "/api/schema/", "/api/docs/", "/api/redoc/", "/api/v1/health/")


class AuditRequestMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        response = self.get_response(request)
        path = request.path
        if request.method in MUTATING and not any(path.startswith(p) for p in SKIP_PREFIXES):
            if 200 <= response.status_code < 400:
                try:
                    log_audit(
                        action=f"{request.method} {path}",
                        module="http",
                        request=request,
                    )
                except Exception:
                    pass
        return response
