package metrics

import (
	"github.com/prometheus/client_golang/prometheus"
	"sigs.k8s.io/controller-runtime/pkg/metrics"
)

const (
	clusterControllerComponent = "cluster"

	ClusterCreationHistogramName = "clusterCreationHistogram"

	Cluster ClusterType = "cluster"
	Branch  ClusterType = "branch"
)

type ClusterType string

var (
	ClusterCreationHistogram = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Subsystem: clusterControllerComponent,
			Name:      "creation_seconds",
			Help:      "Histogram of cluster creation",
			Buckets:   append(prometheus.DefBuckets, []float64{20, 50, 100, 200}...),
		},
		[]string{"cluster_id", "project_id", "tenant_id", "cluster_type", "is_restore", "status"},
	)

	RuVersionUnsupportedTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Subsystem: clusterControllerComponent,
			Name:      "ru_version_unsupported_total",
			Help:      "Number of times PD returned 404 for ru_version API when setting RU version 2",
		},
		[]string{"cluster_id", "tidb_pool"},
	)
)

func init() {
	// Register custom metrics with the global prometheus registry
	metrics.Registry.MustRegister(ClusterCreationHistogram)
	metrics.Registry.MustRegister(RuVersionUnsupportedTotal)

	Reclaimer.AddHistogramVec(ClusterCreationHistogramName, "cluster_id", ClusterCreationHistogram)
}
