package function

import "time"

// Watcher is used for record code excution time
// Play: https://go.dev/play/p/l2yrOpCLd1I
type Watcher struct {
	startTime int64
	stopTime  int64
	excuting  bool
}

// Start the watch timer.
func NewWatcher() *Watcher {
	return &Watcher{}
}

// Start the watch timer.
func (w *Watcher) Start() {
	w.startTime = time.Now().UnixNano()
	w.excuting = true
}

// Stop the watch timer.
func (w *Watcher) Stop() {
	w.stopTime = time.Now().UnixNano()
	w.excuting = false
}

// GetElapsedTime get excute elapsed time.
func (w *Watcher) GetElapsedTime() time.Duration {
	if w.excuting {
		return time.Duration(time.Now().UnixNano() - w.startTime)
	}
	return time.Duration(w.stopTime - w.startTime)
}

// Reset the watch timer.
func (w *Watcher) Reset() {
	w.startTime = 0
	w.stopTime = 0
	w.excuting = false
}
