package middleware

import (
	"strconv"
	"time"

	"github.com/gin-gonic/gin"

	"switchboard-core/metrics"
)

// Prometheus returns a Gin middleware that records HTTP request metrics.
// Uses c.FullPath() (Gin's registered route pattern, e.g.
// "/api/v1/channels/:id") to avoid label cardinality explosion from
// path parameters.
func Prometheus() gin.HandlerFunc {
	return func(c *gin.Context) {
		start := time.Now()
		c.Next()

		pattern := c.FullPath()
		if pattern == "" {
			pattern = "unmatched"
		}
		status := strconv.Itoa(c.Writer.Status())

		metrics.HTTPRequestsTotal.WithLabelValues(c.Request.Method, pattern, status).Inc()
		metrics.HTTPRequestDuration.WithLabelValues(c.Request.Method, pattern).Observe(time.Since(start).Seconds())
	}
}
