//go:build metrics
// +build metrics

package extensions

import (
	"github.com/gorilla/mux"
	"github.com/prometheus/client_golang/prometheus/promhttp"

	"zotregistry.io/zot/pkg/api/config"
	"zotregistry.io/zot/pkg/log"
	"zotregistry.io/zot/pkg/storage"
)

func EnableMetricsExtension(config *config.Config, log log.Logger, rootDir string) {
	if config.Extensions.Metrics != nil &&
		*config.Extensions.Metrics.Enable &&
		config.Extensions.Metrics.Prometheus != nil {
		if config.Extensions.Metrics.Prometheus.Path == "" {
			config.Extensions.Metrics.Prometheus.Path = "/metrics"

			log.Warn().Msg("Prometheus instrumentation Path not set, changing to '/metrics'.")
		}
	} else {
		log.Info().Msg("Metrics config not provided, skipping Metrics config update")
	}
}

func SetupMetricsRoutes(config *config.Config, router *mux.Router, storeController storage.StoreController,
	authFunc mux.MiddlewareFunc, log log.Logger,
) {
	log.Info().Msg("setting up metrics routes")

	if config.Extensions.Metrics != nil && *config.Extensions.Metrics.Enable {
		extRouter := router.PathPrefix(config.Extensions.Metrics.Prometheus.Path).Subrouter()
		extRouter.Use(authFunc)
		extRouter.Methods("GET").Handler(promhttp.Handler())
	}
}
