package logger

import (
	"strconv"

	"git.frostfs.info/TrueCloudLab/frostfs-observability/metrics"
	"github.com/prometheus/client_golang/prometheus"
	"go.uber.org/zap/zapcore"
)

const (
	logSubsystem    = "logger"
	logLevelLabel   = "level"
	logDroppedLabel = "dropped"
)

type logMetrics struct {
	logCount *prometheus.CounterVec
}

func newLogMetrics(namespace string) *logMetrics {
	return &logMetrics{
		logCount: metrics.NewCounterVec(prometheus.CounterOpts{
			Namespace: namespace,
			Subsystem: logSubsystem,
			Name:      "entry_count",
			Help:      "Total log entries emitted or dropped by severity level",
		}, []string{logLevelLabel, logDroppedLabel}),
	}
}

func (m *logMetrics) Inc(level zapcore.Level, dropped bool) {
	m.logCount.With(prometheus.Labels{
		logLevelLabel:   level.String(),
		logDroppedLabel: strconv.FormatBool(dropped),
	}).Inc()
}