package knowledge

import (
	"strings"
	"testing"
)

func TestSelectBestSearchKeywordsRanksByIntentNotSavedOrder(t *testing.T) {
	in := PatrolTagInput{
		ProductName:     "抗敏無香洗衣精",
		ProductFeatures: "完全無香、抗敏、適合化療族群",
		MatchTags:       []string{"無香", "抗敏", "洗衣精"},
		Questions:       []string{"化療後想找不會刺激的洗衣精"},
		Pillars:         []string{"無香洗衣", "化療後衣物清潔"},
	}
	got := SelectBestSearchKeywords(
		nil,
		[]string{"洗衣機 推薦", "無香 洗衣精 請問"},
		in,
		nil,
		4,
	)
	if len(got) == 0 {
		t.Fatal("expected ranked keywords")
	}
	for _, kw := range got {
		if strings.Contains(kw, "洗衣機") {
			t.Fatalf("expected weak saved keyword to lose ranking, got %#v", got)
		}
	}
	found := false
	for _, kw := range got {
		if strings.Contains(kw, "無香") || strings.Contains(kw, "化療") {
			found = true
			break
		}
	}
	if !found {
		t.Fatalf("expected intent-aligned keyword in %#v", got)
	}
}

func TestSelectBestSearchKeywordsIncludesExplicitHint(t *testing.T) {
	in := PatrolTagInput{
		ProductName: "抗敏無香洗衣精",
		MatchTags:   []string{"無香", "洗衣精"},
	}
	got := SelectBestSearchKeywords(
		[]string{"化療 無香 洗衣精"},
		[]string{"洗衣機 推薦"},
		in,
		nil,
		3,
	)
	if len(got) == 0 || got[0] != "化療 無香 洗衣精" {
		t.Fatalf("expected explicit hint to rank first, got %#v", got)
	}
}
