package metrics

import (
	"net/http"
	"net/http/pprof"

	"github.com/nspcc-dev/neo-go/pkg/config"
	"go.uber.org/zap"
)

// PprofService https://golang.org/pkg/net/http/pprof/.
type PprofService Service

// NewPprofService creates a new service for gathering pprof metrics.
func NewPprofService(cfg config.BasicService, log *zap.Logger) *Service {
	if log == nil {
		return nil
	}

	handler := http.NewServeMux()
	handler.HandleFunc("/debug/pprof/", pprof.Index)
	handler.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
	handler.HandleFunc("/debug/pprof/profile", pprof.Profile)
	handler.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
	handler.HandleFunc("/debug/pprof/trace", pprof.Trace)

	addrs := cfg.GetAddresses()
	srvs := make([]*http.Server, len(addrs))
	for i, addr := range addrs {
		srvs[i] = &http.Server{
			Addr:    addr,
			Handler: handler,
		}
	}
	return NewService("Pprof", srvs, cfg, log)
}