package metrics

import (
	"strconv"
	"time"

	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
	"github.com/prometheus/client_golang/prometheus"
)

type MorphCacheMetrics interface {
	AddMethodDuration(method string, success bool, d time.Duration)
}

type morphCacheMetrics struct {
	methodDuration *prometheus.HistogramVec
}

var _ MorphCacheMetrics = (*morphCacheMetrics)(nil)

func NewNodeMorphCacheMetrics() MorphCacheMetrics {
	return newMorphCacheMetrics(namespace)
}

func newMorphCacheMetrics(ns string) *morphCacheMetrics {
	return &morphCacheMetrics{
		methodDuration: metrics.NewHistogramVec(prometheus.HistogramOpts{
			Namespace: ns,
			Subsystem: morphCacheSubsystem,
			Name:      "request_duration_seconds",
			Help:      "Morph cache request process duration",
		}, []string{successLabel, methodLabel}),
	}
}

func (m *morphCacheMetrics) AddMethodDuration(method string, success bool, d time.Duration) {
	m.methodDuration.With(
		prometheus.Labels{
			successLabel: strconv.FormatBool(success),
			methodLabel:  method,
		},
	).Observe(d.Seconds())
}