package timeUtil

import (
	"testing"
	"time"
)

// 检查是否在范围内的常规测试
func TestCheckIfInRange(t *testing.T) {
	// Check with correct data
	timeSpan1 := "13:00:00"
	timeSpan2 := "21:00:00"

	t1, err := ToDateTime("2017-09-04 15:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if CheckIfInRange(t1, timeSpan1, 0, timeSpan2, 0) == false {
		t.Fail()
		return
	}

	if CheckIfInRange(t1, timeSpan2, 0, timeSpan1, 0) == false {
		t.Fail()
		return
	}

	if CheckIfInRange(t1, timeSpan1, 0, timeSpan2, 5) == false {
		t.Fail()
		return
	}

	if CheckIfInRange(t1, timeSpan2, 0, timeSpan1, 5) == false {
		t.Fail()
		return
	}

	// Check with incorrect data
	t1, err = ToDateTime("2017-09-04 22:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if CheckIfInRange(t1, timeSpan1, 0, timeSpan2, 0) {
		t.Fail()
		return
	}

	if CheckIfInRange(t1, timeSpan2, 0, timeSpan1, 0) {
		t.Fail()
		return
	}
}

func TestCheckIfInRange2(t *testing.T) {
	timeSpan1 := "13:00:00"
	timeSpan2 := "21:00:00"

	t1, err := ToDateTime("2017-09-04 15:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if CheckIfInRange2(t1, timeSpan1, timeSpan2) == false {
		t.Fail()
		return
	}

	if CheckIfInRange2(t1, timeSpan2, timeSpan1) == false {
		t.Fail()
		return
	}

	if CheckIfInRange2(t1, timeSpan1, timeSpan2) == false {
		t.Fail()
		return
	}

	if CheckIfInRange2(t1, timeSpan2, timeSpan1) == false {
		t.Fail()
		return
	}

	t1, err = ToDateTime("2017-09-04 22:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if CheckIfInRange2(t1, timeSpan1, timeSpan2) {
		t.Fail()
		return
	}

	if CheckIfInRange2(t1, timeSpan2, timeSpan1) {
		t.Fail()
		return
	}
}

func TestCheckIfInSameDate(t *testing.T) {
	// Check with the same date time
	t1, err := ToDateTime("2017-09-04 00:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t2, err := ToDateTime("2017-09-04 15:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if CheckIfInSameDate(t1, t2) == false {
		t.Fail()
		return
	}

	// Check with different date time
	t2, err = ToDateTime("2019-12-26 15:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if CheckIfInSameDate(t1, t2) {
		t.Fail()
		return
	}
}

func TestAfter(t *testing.T) {
	// Check with the same date time
	t1, err := ToDateTime("2017-09-04 02:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t1 = t1.In(time.UTC)

	t2, err := ToDateTime("2017-09-04 01:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t2 = t2.In(time.Local)

	if After(t2, t1) {
		t.Fail()
		return
	}

	if After(t1, t2) == false {
		t.Fail()
		return
	}
}

func TestBefore(t *testing.T) {
	// Check with the same date time
	t1, err := ToDateTime("2017-09-04 02:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t1 = t1.In(time.UTC)

	t2, err := ToDateTime("2017-09-04 01:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t2 = t2.In(time.Local)

	if Before(t2, t1) == false {
		t.Fail()
		return
	}

	if Before(t1, t2) {
		t.Fail()
		return
	}
}

func TestEqual(t *testing.T) {
	// Check with the same date time
	t1, err := ToDateTime("2017-09-04 02:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t1 = t1.In(time.UTC)

	t2, err := ToDateTime("2017-09-04 01:00:00")
	if err != nil {
		t.Error(err)
		return
	}
	t2 = t2.In(time.Local)

	t3, err := ToDateTime("2017-09-04 01:00:00")
	if err != nil {
		t.Error(err)
		return
	}

	if Equal(t2, t1) {
		t.Fail()
		return
	}

	if Equal(t1, t2) {
		t.Fail()
		return
	}

	if Equal(t2, t3) == false {
		t.Fail()
		return
	}

}
