package metrics

import (
	"time"

	"github.com/go-logr/logr"
	"github.com/prometheus/client_golang/prometheus"
	"github.com/tidbcloud/ticdc-service-ng/pkg/metrics/collectors"
	"sigs.k8s.io/controller-runtime/pkg/client"
	ctrlmetrics "sigs.k8s.io/controller-runtime/pkg/metrics"
)

var (
	CRCreationDuration = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Namespace: "infra",
			Subsystem: "ticdc",
			Name:      "create_stage_duration",
			Help:      "the time that used in each create stage",
			Buckets:   prometheus.ExponentialBuckets(10, 2, 6), // 10s~640s
		}, []string{"name", "stage"})
)

// MustRegister provides a global helper function that registers collectors into a prometheus registry,
// which is backed by the controller-runtime's metrics registry.
func MustRegister(cs ...prometheus.Collector) {
	ctrlmetrics.Registry.MustRegister(cs...)
}

func SetUpControllerMetrics(cli client.Client, logger logr.Logger) {
	MustRegister(collectors.GetAllCollectors(cli, logger)...)
	MustRegister(CRCreationDuration)
}

func SetUpHTTPServerMetrics() {
	prometheus.MustRegister(collectors.NewUptimeCollector(time.Now().Unix()))
}
