package utils

import (
	"fmt"
	"net/http"

	"github.com/prometheus/client_golang/prometheus"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"go.uber.org/zap"
)

var (
	MetricNamespace = "serverless_billing"

	ServerlessDailyOpsCost = prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: MetricNamespace,
			Name:      "daily_operation_cost",
			Help:      "Total serverless operation cost per region",
		},
		[]string{"provider", "region", "offset"},
	)
	ServerlessDailyClusters = prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Namespace: MetricNamespace,
			Name:      "cluster_number",
			Help:      "Total number of serverless cluster per region",
		},
		[]string{"provider", "region", "step"},
	)
)

func init() {
	prometheus.MustRegister(ServerlessDailyOpsCost)
	prometheus.MustRegister(ServerlessDailyClusters)
}

func RunMetricsServer(logger *zap.Logger) {
	mux := http.NewServeMux()
	mux.Handle("/metrics", promhttp.Handler())
	logger.Info("starting metrics server")
	err := http.ListenAndServe("0.0.0.0:9090", mux)
	if err != nil {
		panic(fmt.Sprintf("start metrics server failed %+v", err))
	}
}
