package zero

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

const (
	namespace = "tidb_management_service"
	subsystem = "zero_instance_api"
)

var (
	rentZeroInstanceSuccessTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: namespace,
			Subsystem: subsystem,
			Name:      "rent_zero_instance_success_total",
			Help:      "Total number of successful AllocateZeroInstance operations",
		},
		[]string{"pool_id"},
	)

	rentZeroInstanceFailureTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: namespace,
			Subsystem: subsystem,
			Name:      "rent_zero_instance_failure_total",
			Help:      "Total number of failed AllocateZeroInstance operations",
		},
		[]string{"pool_id", "error_code"},
	)

	// Rent operation latency
	rentZeroInstanceDuration = prometheus.NewHistogramVec(
		prometheus.HistogramOpts{
			Namespace: namespace,
			Subsystem: subsystem,
			Name:      "rent_zero_instance_duration_seconds",
			Help:      "Duration of RentCluster operations",
			Buckets:   prometheus.DefBuckets,
		},
		[]string{"pool_id"},
	)
)

// RegisterMetrics registers all zero instance API metrics with Prometheus
func RegisterMetrics() {
	prometheus.MustRegister(rentZeroInstanceSuccessTotal)
	prometheus.MustRegister(rentZeroInstanceFailureTotal)
	prometheus.MustRegister(rentZeroInstanceDuration)
}
