package tracing

import (
	"net/http"
	"strings"

	"go.opencensus.io/plugin/ochttp"
	"go.opencensus.io/trace"
)

func TraceHandler(handler http.Handler, ignoredMethods ...string) http.Handler {
	healthEndpoints := strings.Join(ignoredMethods, ";;")

	return &ochttp.Handler{
		Handler: handler,
		FormatSpanName: func(r *http.Request) string {
			host := r.URL.Host
			if host == "" {
				host = r.Host
			}
			return host + r.URL.Path
		},

		StartOptions: trace.StartOptions{Sampler: Sampler()},
		IsHealthEndpoint: func(r *http.Request) bool {
			n := strings.Contains(healthEndpoints, r.URL.RequestURI())
			return n
		},
	}
}