package router

import "testing"

func TestParseNoteCaptureExtractsOnlyALeadingCommandFrame(t *testing.T) {
	cases := []struct {
		name      string
		utterance string
		want      string
		ok        bool
	}{
		{"colon", "запомни: запасной ключ лежит в синей коробке", "запасной ключ лежит в синей коробке", true},
		{"case and politeness", "Запиши, пожалуйста: Кофе закончился.", "Кофе закончился.", true},
		{"wake word", "Maven, remember: backup runs at 03:00", "backup runs at 03:00", true},
		{"leading particles", "ну пожалуйста запомни — пароль в сейфе", "пароль в сейфе", true},
		{"enclitic", "запиши-ка: ключ у двери", "ключ у двери", true},
		{"quoted body", "сохрани: «Ключ — в ящике». ", "«Ключ — в ящике».", true},
		{"meaningful conjunction", "запомни: и это важно", "и это важно", true},
		{"question word is content", "запиши: что такое TCP?", "что такое TCP?", true},
		{"infinitive question is content", "запиши что купить к ужину", "что купить к ужину", true},
		{"ordinary note", "кофе закончился", "", false},
		{"embedded command", "у меня новый ноутбук, запиши это", "", false},
		{"past-tense report", "запомнил пароль от роутера", "", false},
		{"empty command", "запомни: ...", "", false},
	}
	for _, tc := range cases {
		t.Run(tc.name, func(t *testing.T) {
			got, ok := ParseNoteCapture(tc.utterance)
			if ok != tc.ok || got != tc.want {
				t.Fatalf("ParseNoteCapture(%q) = %q, %v; want %q, %v", tc.utterance, got, ok, tc.want, tc.ok)
			}
		})
	}
}

func TestParseNoteCaptureDropsProvenRussianComplementizer(t *testing.T) {
	got, ok := ParseNoteCapture("запомни, что кофе закончился")
	if !ok || got != "кофе закончился" {
		t.Fatalf("got %q, %v; want an inflected clause without the capture complementizer", got, ok)
	}
}
