package slowstats

import (
	"sort"
	"time"
)

type TimeWindow struct {
	BeginTime int64 `json:"begin_time"`
	EndTime   int64 `json:"end_time"`
}

type TimeWindows []TimeWindow

func (w TimeWindows) Len() int {
	return len(w)
}

func (w TimeWindows) Less(i, j int) bool {
	return w[i].BeginTime > w[j].BeginTime
}

func (w TimeWindows) Swap(i, j int) {
	w[i], w[j] = w[j], w[i]
}

func GetTimeWindows(begin, end, nhours int64) []TimeWindow {
	windowSize := nhours * 3600
	begin -= begin % windowSize
	if end%windowSize > 0 {
		end += windowSize - (end % windowSize)
	}
	var windows []TimeWindow
	for begin+windowSize <= end {
		nowTs := time.Now().Unix()
		if nhours == 1 {
			if nowTs < (begin + 1800) {
				break
			}
		} else {
			if nowTs < (begin + windowSize + 1800) {
				break
			}
		}
		windows = append(windows, TimeWindow{
			BeginTime: begin,
			EndTime:   begin + windowSize,
		})
		begin += windowSize
	}
	sort.Sort(TimeWindows(windows))
	return windows
}
