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)
