package metrics

import (
	"github.com/prometheus/client_golang/prometheus"
)

type RequestMetrics struct {
	Total           *prometheus.CounterVec
	FailedTotal     *prometheus.CounterVec
	DurationSeconds *prometheus.HistogramVec
}

func NewRequestMetrics(subsystem string, durationBuckets []float64, labels ...string) *RequestMetrics {
	metrics := &RequestMetrics{
		Total: prometheus.NewCounterVec(prometheus.CounterOpts{
			Subsystem: subsystem,
			Name:      "service_requests_total",
		}, []string{"method"}),
		FailedTotal: prometheus.NewCounterVec(prometheus.CounterOpts{
			Subsystem: subsystem,
			Name:      "service_requests_failed_total",
		}, []string{"method"}),
		DurationSeconds: prometheus.NewHistogramVec(prometheus.HistogramOpts{
			Subsystem: subsystem,
			Name:      "service_request_duration_seconds",
			Buckets:   durationBuckets,
		}, []string{"method"}),
	}
	prometheus.WrapRegistererWith(GetLabelsFromKV(labels), prometheus.DefaultRegisterer).MustRegister(
		metrics.Total,
		metrics.FailedTotal,
		metrics.DurationSeconds,
	)
	return metrics
}