package router

import (
	"testing"
	"time"
)

// The measured defect: at 14:41 a half-past-twelve reminder was set for 12:30
// the same day, two hours gone (V-544).
func TestRollPastClockForward(t *testing.T) {
	now := time.Date(2026, 8, 5, 14, 41, 0, 0, time.Local)
	day := func(d, h, m int) time.Time {
		return time.Date(2026, 8, d, h, m, 0, 0, time.Local)
	}
	for _, tc := range []struct {
		name string
		in   time.Time
		text string
		want time.Time
	}{
		{"a bare clock already past rolls to tomorrow", day(5, 12, 30), "напомни в 12:30 пообедать", day(6, 12, 30)},
		{"a bare clock still to come stays", day(5, 19, 30), "напомни в 19:30 позвонить", day(5, 19, 30)},
		{"a named day keeps its day", day(5, 12, 30), "напомни сегодня в 12:30 пообедать", day(5, 12, 30)},
		{"a weekday keeps its day", day(3, 12, 30), "напомни в понедельник в 12:30", day(3, 12, 30)},
		{"a date keeps its day", day(3, 12, 30), "напомни 3 августа в 12:30", day(3, 12, 30)},
		{"past by more than a day is not a clock on today", day(4, 12, 30), "напомни в 12:30 пообедать", day(4, 12, 30)},
	} {
		if got := rollPastClockForward(tc.in, now, tc.text); !got.Equal(tc.want) {
			t.Errorf("%s: got %v, want %v", tc.name, got.Format("02 Jan 15:04"), tc.want.Format("02 Jan 15:04"))
		}
	}
}

func TestNamesADay(t *testing.T) {
	for _, s := range []string{
		"напомни сегодня в 12:30 пообедать",
		"напомни завтра выпить таблетку",
		"напомни в пятницу забрать заказ",
		"напомни 10 июля позвонить",
	} {
		if !NamesADay(s) {
			t.Errorf("NamesADay(%q) = false; the day is named", s)
		}
	}
	for _, s := range []string{
		"напомни в 12:30 пообедать",
		"напомни без четверти восемь выходить",
		"напомни через двадцать минут",
		"",
	} {
		if NamesADay(s) {
			t.Errorf("NamesADay(%q) = true; no day is named", s)
		}
	}
}
