package placement

import (
	"strings"
	"testing"

	branddomain "haixun-backend/internal/model/brand/domain/usecase"
)

func TestPlacementTopicContextWritePromptBlock(t *testing.T) {
	ctx := PlacementTopicContextFromBrand(&branddomain.BrandSummary{
		DisplayName: "ecostore",
		TopicName:   "癌症病友沐浴敏感",
		SeedQuery:   "化療 無香 沐浴乳",
		Brief:       "找近期求助換沐浴乳的貼文",
		ProductID:   "p1",
		Products: []branddomain.ProductSummary{
			{ID: "p1", Label: "抗敏無香沐浴露", ProductContext: `{"brand":"ecostore","product":"抗敏無香沐浴露","features":"完全無香、抗敏、第三方認證"}`},
		},
		ProductContext: `{"brand":"ecostore","product":"抗敏無香沐浴露","features":"完全無香、抗敏、第三方認證"}`,
	}, "")

	var b strings.Builder
	ctx.WritePromptBlock(&b)
	out := b.String()
	for _, want := range []string{
		"【品牌】ecostore",
		"【置入產品】抗敏無香沐浴露",
		"【主題名稱】癌症病友沐浴敏感",
		"【種子關鍵字】化療 無香 沐浴乳",
		"【主題目標】找近期求助換沐浴乳的貼文",
		"【產品詳情】",
		"完全無香、抗敏、第三方認證",
	} {
		if !strings.Contains(out, want) {
			t.Fatalf("prompt block missing %q:\n%s", want, out)
		}
	}
}

func TestBuildResearchMapAnalysisPrompts(t *testing.T) {
	in := PlacementTopicContext{
		BrandDisplayName: "ecostore",
		TopicName:        "癌症病友沐浴敏感",
	}.ToResearchMapInput()
	sys := BuildResearchMapAnalysisSystemPrompt()
	if !strings.Contains(sys, "不要輸出 JSON") {
		t.Fatal("analysis system prompt should forbid JSON")
	}
	user := BuildResearchMapAnalysisUserPrompt(in)
	if !strings.Contains(user, "【品牌】ecostore") {
		t.Fatalf("analysis user prompt missing brand: %s", user)
	}
	final := BuildResearchMapFinalizeUserPrompt(in, "分析段落")
	if !strings.Contains(final, "【前置分析】") || !strings.Contains(final, "分析段落") {
		t.Fatalf("finalize prompt missing analysis: %s", final)
	}
}
