package timekeeper

import (
	"testing"
	"time"
)

func checkNotReady(t *testing.T, ch <-chan time.Time) {
	select {
	case <-ch:
		t.Errorf("Channel not supposed to be ready")
	default:
	}
}

func checkReady(t *testing.T, ch <-chan time.Time) {
	select {
	case <-ch:
	default:
		t.Errorf("Channel supposed to be ready")
	}
}

func expectRequest(t *testing.T, ch <-chan time.Duration, expect time.Duration) {
	select {
	case got := <-ch:
		if got != expect {
			t.Errorf("Expected %v, got %v instead", expect, got)
		}
	default:
		t.Errorf("Nothing received on channel")
	}
}

func TestAfter(t *testing.T) {
	mt := NewManualTime()
	ch1 := mt.After(5 * time.Second)
	ch2 := mt.After(3 * time.Second)
	checkNotReady(t, ch1)
	checkNotReady(t, ch2)
	expectRequest(t, mt.Requests(), 5*time.Second)
	expectRequest(t, mt.Requests(), 3*time.Second)

	mt.AdvanceTime(time.Second)
	checkNotReady(t, ch1)
	checkNotReady(t, ch2)
	ch3 := mt.After(2 * time.Second)
	checkNotReady(t, ch3)
	expectRequest(t, mt.Requests(), 2*time.Second)

	mt.AdvanceTime(2 * time.Second)
	checkNotReady(t, ch1)
	checkReady(t, ch2)
	checkReady(t, ch3)

	mt.AdvanceTime(time.Second)
	checkNotReady(t, ch1)
	checkNotReady(t, ch2)
	checkNotReady(t, ch3)

	mt.AdvanceTime(time.Second)
	checkReady(t, ch1)
	checkNotReady(t, ch2)
	checkNotReady(t, ch3)

	ch4 := mt.After(0)
	checkReady(t, ch4)
	expectRequest(t, mt.Requests(), 0)
}

func TestSleep(t *testing.T) {
	mt := NewManualTime()
	c := make(chan time.Time, 1)
	go func() {
		mt.Sleep(5 * time.Second)
		c <- time.Time{}
		mt.Sleep(3 * time.Second)
		c <- time.Time{}
	}()
	if got, expect := <-mt.Requests(), 5*time.Second; got != expect {
		t.Errorf("Expected %v, got %v instead", expect, got)
	}
	checkNotReady(t, c)
	mt.AdvanceTime(5 * time.Second)
	if got, expect := <-mt.Requests(), 3*time.Second; got != expect {
		t.Errorf("Expected %v, got %v instead", expect, got)
	}
	checkReady(t, c)
	mt.AdvanceTime(2 * time.Second)
	checkNotReady(t, c)
	mt.AdvanceTime(1 * time.Second)
	<-c
}

func testBlocking(t *testing.T) {
	mt := NewManualTime()
	sync := make(chan bool)
	go func() {
		// Simulate blocking on a timer.
		<-mt.After(10 * time.Second)
		<-mt.After(11 * time.Second)
		<-mt.After(3 * time.Second)
		sync <- true
		<-mt.After(4 * time.Second)
		sync <- true
	}()
	<-mt.Requests()
	<-mt.Requests()
	mt.AdvanceTime(12 * time.Second)
	<-mt.Requests()
	mt.AdvanceTime(2 * time.Second)
	mt.AdvanceTime(time.Second)
	<-sync
	<-mt.Requests()
	mt.AdvanceTime(5 * time.Second)
	<-sync
}
