package metrics2

import (
	"fmt"
	"runtime"
	"strings"
	"time"

	"go.skia.org/infra/go/util"
)

const (
	MEASUREMENT_TIMER = "timer"
	NAME_FUNC_TIMER   = "func_timer"
)

// timer implements Timer.
type timer struct {
	begin time.Time
	m     Float64SummaryMetric
}

// NewTimer creates and returns a new started timer.
//
// makeUnique - True if the measurement name needs to made unique, which means
//
//	to append 'name' to 'timer'.
func newTimer(c Client, name string, makeUnique bool, tagsList ...map[string]string) Timer {
	// Make a copy of the tags and add the name.
	tags := util.AddParams(map[string]string{}, tagsList...)
	tags["name"] = name
	measurement := MEASUREMENT_TIMER
	if makeUnique {
		measurement = fmt.Sprintf("%s_%s_ns", MEASUREMENT_TIMER, name)
		tags["type"] = MEASUREMENT_TIMER
	}
	ret := &timer{
		m: c.GetFloat64SummaryMetric(measurement, tags),
	}
	ret.Start()
	return ret
}

// Start starts or resets the timer.
func (t *timer) Start() {
	t.begin = time.Now()
}

// Stop stops the timer and reports the elapsed time.
func (t *timer) Stop() time.Duration {
	dur := time.Now().Sub(t.begin)
	v := float64(dur)
	t.m.Observe(v)
	return dur
}

// NewTimer creates and returns a new Timer using the default client.
func NewTimer(name string, tags ...map[string]string) Timer {
	return defaultClient.NewTimer(name, tags...)
}

// FuncTimer is specifically intended for measuring the duration of functions.
// It uses the default client.
//
// The standard way to use FuncTimer is at the top of the func you
// want to measure:
//
//	func myfunc() {
//	   defer metrics2.FuncTimer().Stop()
//	   ...
//	}
func FuncTimer() Timer {
	pc, _, _, _ := runtime.Caller(1)
	f := runtime.FuncForPC(pc)
	split := strings.Split(f.Name(), ".")
	fn := "unknown"
	pkg := "unknown"
	if len(split) >= 2 {
		fn = split[len(split)-1]
		pkg = strings.Join(split[:len(split)-1], ".")
	}
	return NewTimer(NAME_FUNC_TIMER, map[string]string{"package": pkg, "func": fn})
}

// Verify that timer implements the Timer interface.
var _ Timer = (*timer)(nil)
