package metrics

import (
	"context"

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

const (
	LabelKeyEventType  = "event_type"
	LabelKeyGroup      = "group"
	LabelKeySource     = "source"
	LabelKeyTarget     = "target"
	LabelKeyRetryTimes = "retry_times"
	LabelKeySuccess    = "success"
)

var (
	labelGetters = map[string]func(context.Context) string{}
)

func SetLabelGetters(getters map[string]func(context.Context) string) {
	labelGetters = getters
}

func labelsFromCtx(ctx context.Context, labels ...string) prometheus.Labels {
	ctxLabels := map[string]string{}

	for _, l := range labels {
		k := l
		ctxLabels[l] = ""

		getter, ok := labelGetters[k]
		if !ok {
			continue
		}

		v := getter(ctx)
		if v != "" {
			ctxLabels[l] = v
		}
	}

	return ctxLabels
}
