package router

import "testing"

func TestActHasEntityTargetRequiresNamedTargetEvidence(t *testing.T) {
	cases := []struct {
		name string
		dec  Decision
		want bool
	}{
		{
			name: "matched function and argument",
			dec: Decision{Intent: IntentAct, Slots: Slots{
				Fn: "restart", HasFn: true, Args: []string{"nginx"}, Text: "restart nginx",
			}},
			want: true,
		},
		{
			name: "model function and target text",
			dec: Decision{Intent: IntentAct, Slots: Slots{
				Fn: "restart", HasFn: true, Text: "перезапусти гитею",
			}},
			want: true,
		},
		{
			name: "matched function alone",
			dec: Decision{Intent: IntentAct, Slots: Slots{
				Fn: "выключи", HasFn: true, Text: "выключи",
			}},
			want: false,
		},
		{
			name: "matched function with politeness only",
			dec: Decision{Intent: IntentAct, Slots: Slots{
				Fn: "выключи", HasFn: true, Args: []string{"пожалуйста"}, Text: "выключи пожалуйста",
			}},
			want: false,
		},
		{
			name: "matched function with anaphora only",
			dec: Decision{Intent: IntentAct, Slots: Slots{
				Fn: "выключи", HasFn: true, Args: []string{"его"}, Text: "выключи его",
			}},
			want: false,
		},
		{
			name: "unmatched entity act",
			dec:  Decision{Intent: IntentAct, Slots: Slots{Text: "перезапусти muzick indexer"}},
			want: true,
		},
		{
			name: "unmatched verb alone",
			dec:  Decision{Intent: IntentAct, Slots: Slots{Text: "перезапусти"}},
			want: false,
		},
		{
			name: "unresolved demonstrative",
			dec:  Decision{Intent: IntentAct, Slots: Slots{Text: "сделай это"}},
			want: false,
		},
	}
	for _, testCase := range cases {
		t.Run(testCase.name, func(t *testing.T) {
			if got := ActHasEntityTarget(testCase.dec); got != testCase.want {
				t.Errorf("ActHasEntityTarget(%+v) = %v, want %v", testCase.dec, got, testCase.want)
			}
		})
	}
}
