package metrics

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

	"go.uber.org/zap"
)

// NewPprofService creates a new service for gathering pprof metrics.
func NewPprofService(l *zap.Logger, cfg Config) *Service {
	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)

	// Manually add support for paths linked to by index page at /debug/pprof/
	for _, item := range []string{"allocs", "block", "heap", "goroutine", "mutex", "threadcreate"} {
		handler.Handle("/debug/pprof/"+item, pprof.Handler(item))
	}

	return &Service{
		Server: &http.Server{
			Addr:    cfg.Address,
			Handler: handler,
		},
		enabled:     cfg.Enabled,
		serviceType: "Pprof",
		log:         l.With(zap.String("service", "Pprof")),
	}
}