package http

import (
	"log/slog"
	"time"

	"github.com/gin-gonic/gin"
)

func (h *http) requestLogger(serverName string) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		startTime := time.Now()

		ctx.Next()

		slog.Info(
			"HTTP request processed",
			"service", subsystem,
			"server", serverName,
			"client-ip", ctx.ClientIP(),
			"user-agent", ctx.Request.UserAgent(),
			"path", ctx.Request.Method+" "+ctx.Request.URL.String(),
			"request-size", ctx.Request.ContentLength,
			"response-code", ctx.Writer.Status(),
			"response-length", ctx.Writer.Size(),
			"response-time", time.Since(startTime).String(),
		)
	}
}