package time_window

import (
	"testing"
	"time"

	"github.com/stretchr/testify/require"
	"go.skia.org/infra/go/testutils/unittest"
)

func TestTimeWindow(t *testing.T) {
	unittest.SmallTest(t)

	// Assert that the given string parses with no error.
	P := func(s string) *TimeWindow {
		w, err := Parse(s)
		require.NoError(t, err)
		require.NotNil(t, w)
		return w
	}
	// Assert that the given string fails to parse with the given error.
	F := func(s, expect string) {
		w, err := Parse(s)
		require.EqualError(t, err, expect)
		require.Nil(t, w)
	}
	// Assert that the given string parses with no error, and assert that
	// the given result is returned by Test for the given Time.
	PT := func(s string, expect bool, ts time.Time) {
		require.Equal(t, expect, P(s).Test(ts))
	}

	// Test parsing.
	P("* 00:00-23:59")
	P("M-F 00:01-16:22")
	P("M-W,Sa-Su 16:00-17:00")
	P("M,W,F 05:23-08:45")
	P("M,W,F 05:23- 08:45 ")
	P("M,W,F 05:23-08:45; Tu,Th 09:37-12:12")
	P("* 00:01-00:00") // End time may be before start time; that pushes the end time to the next day.
	F("blahblah", "Expected format \"D hh:mm\", not \"blahblah\"")
	F("M,W,D 00:00-00:01", "Unknown day \"D\"")
	F("* 00:00", "Expected window format \"hh:mm-hh:mm\", not \"00:00\"")
	F("* 00:00-24:00", "Hours must be between 0-23, not 24")
	F("* 00:00-00:60", "Minutes must be between 0-59, not 60")

	// Verify that we include/exclude the correct times.
	baseDate := time.Date(2019, 3, 24, 0, 0, 0, 0, time.UTC) // This is a Sunday, which has index 0.
	getTs := func(d time.Weekday, h, m int) time.Time {
		return baseDate.Add(time.Duration(24*int(d)+h)*time.Hour + time.Duration(m)*time.Minute)
	}

	expr := "* 00:00-12:00"
	for _, day := range dayMap {
		PT(expr, true, getTs(day, 0, 0))
		PT(expr, true, getTs(day, 11, 59))
		PT(expr, false, getTs(day, 12, 0))
	}

	expr = "M-F 00:00-23:59"
	for _, day := range dayMap {
		expect := day >= 1 && day <= 5
		PT(expr, expect, getTs(day, 0, 0))
	}

	expr = "F 22:00-23:00"
	for _, day := range dayMap {
		expect := day == time.Friday
		PT(expr, expect, getTs(day, 22, 30))
	}

	expr = "F-W 00:00-23:59" // Make sure we get the week wraparound right.
	for _, day := range dayMap {
		expect := day != time.Thursday
		PT(expr, expect, getTs(day, 12, 0))
	}

	expr = "M 22:00-02:00" // This one wraps around to Tuesday morning.
	for _, day := range dayMap {
		PT(expr, day == time.Monday, getTs(day, 23, 0))
		PT(expr, day == time.Tuesday, getTs(day, 1, 0))
	}

	// A nil TimeWindow always returns true from Test.
	require.Equal(t, true, (*TimeWindow)(nil).Test(time.Now()))
}
