package shadowpool

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

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

var (
	// RequireDatabase operation metrics
	requireDatabaseCallTotal = prometheus.NewCounter(
		prometheus.CounterOpts{
			Namespace: namespace,
			Subsystem: subsystem,
			Name:      "legacy_require_database_call_total",
			Help:      "Total number of calls to the deprecated RequireDatabase API",
		},
	)

	requireDatabaseSuccessTotal = prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Namespace: namespace,
			Subsystem: subsystem,
			Name:      "require_database_success_total",
			Help:      "Total number of successful RequireDatabase operations",
		},
		[]string{"pool_id"},
	)

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

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

// RegisterMetrics registers all shadow pool API metrics with Prometheus
func RegisterMetrics() {
	prometheus.MustRegister(requireDatabaseCallTotal)
	prometheus.MustRegister(requireDatabaseSuccessTotal)
	prometheus.MustRegister(requireDatabaseFailureTotal)
	prometheus.MustRegister(rentClusterDuration)
}
