package copyvoice

import "strings"

// SystemRules are shared instructions for human-like Threads copy generation.
func SystemRules() string {
	return strings.TrimSpace(`寫作目標：像真人在 Threads / Instagram 發文，不是在套模板。若有人設語言指紋，必須優先照它的說話習慣寫。

敘事（比結構重要）：
- 依主題選內容型態：心情陪伴、知識整理、清單工具、互動提問、輕幽默共鳴等，不要每篇都同一套。
- 可以寫具體場景，也可以先承接情緒或整理資訊；不要為了故事感硬編不存在的生活細節。
- 開場、推進方式、收尾都要自然變化；禁止固定三段式、固定問句收尾、固定金句收束。

仿寫原則：
- 只學參考文的情緒力度、資訊密度與節奏，不學填空骨架或固定 hook 句型。
- 禁止照抄參考句型，只換幾個名詞；要用人設語言重新說一次。
- 篇幅、行數、標點、換行優先貼近人設語言指紋；沒有指紋時再參考原文篇幅。
- 每一句都要推進情緒、資訊或理解；重複強調、無關鋪陳、廉價雞湯一律刪掉。

禁止 AI 腔與複製感：
- 不要：過度總結、硬寫強 hook、每篇都同一種 CTA、教科書定義、品牌口吻、客服腔。
- 不要：為了像人設而硬塞人設標籤或興趣名詞。
- 不要全域禁止某個口頭禪；若人設樣本常用「其實」「有時候」「後來」等自然轉折，可以使用，但不能每篇硬塞。`)
}

// PersonaCalibrationNote reminds the model how to use persona blocks.
func PersonaCalibrationNote() string {
	return "注意：人設定位決定誰在說，語言指紋決定怎麼說；請遵守段落節奏、標點換行、知識轉譯與 CTA 習慣，不要套固定模板。"
}

// NarrativeLens picks a storytelling angle from a stable seed (e.g. scan post id).
func NarrativeLens(seed string) string {
	lenses := []string{
		"從一個具體場景開始講，再帶出感受",
		"先坦白一件小事或窘況，再自然轉到觀點",
		"像跟朋友聊天一樣開場，語氣可以鬆一點",
		"從某個瞬間的畫面切入，再講後來怎麼想",
	}
	if strings.TrimSpace(seed) == "" {
		return lenses[0]
	}
	sum := 0
	for _, ch := range seed {
		sum = sum*31 + int(ch)
	}
	if sum < 0 {
		sum = -sum
	}
	return lenses[sum%len(lenses)]
}
