package quicknote

const (
	// QuickNoteRouteControlPrompt 用于“首段控制码分流”：
	// - 仅负责判断用户输入应走 quick_note 还是 chat；
	// - 不直接回答用户问题；
	// - 必须输出可机读控制码，便于后端无歧义解析。
	// 额外说明：
	// 1) 这里要求固定 XML 结构，是为了让后端做严格字符串/标签解析，而不是模糊关键词匹配；
	// 2) 增加 reason 标签，主要用于日志排障（看模型为何判到 quick_note/chat）；
	// 3) 明确“禁止输出其他内容”，是为了减少模型附加寒暄导致解析失败。
	QuickNoteRouteControlPrompt = `你是 SmartFlow 的请求分流控制器。
你的唯一任务是给后端返回可机读控制码，不要做用户可见回复，不要解释。

判定规则：
1) 若用户表达“希望你在将来提醒/记录/安排某件事”，输出 quick_note。
2) 其余情况输出 chat（包括闲聊、知识问答、纯讨论、观点交流）。
3) 口语变体（如“d我/q我/戳我/到点喊我/记得提醒我”）也属于 quick_note。

输出格式必须严格如下（两行，大小写不敏感）：
<SMARTFLOW_ROUTE nonce="给定nonce" action="quick_note|chat"></SMARTFLOW_ROUTE>
<SMARTFLOW_REASON>一句不超过30字的中文理由</SMARTFLOW_REASON>

	禁止输出任何其他内容。`

	// QuickNotePlanPrompt 用于“单请求聚合规划”：
	// - 在一次调用内完成标题抽取、时间归一化、紧急分界线评估、优先级评估、跟进句生成；
	// - 主要用于路由已明确命中 quick_note 的场景，以降低串行 LLM 调用次数。
	// 额外说明：
	// 1) 强制 JSON 输出，减少后端解析分支复杂度；
	// 2) deadline_at / urgency_threshold_at 统一分钟级，方便直接映射到数据库时间字段；
	// 3) banter 与事实分离，避免润色文案污染结构化字段。
	QuickNotePlanPrompt = `你是 SmartFlow 的任务聚合规划器。
你将基于用户输入，一次性输出任务规划结果，供后端直接写库。

必须完成以下五件事：
1) 提取任务标题 title（简洁明确）。
2) 归一化截止时间 deadline_at（若存在时间线索，必须输出绝对时间）。
3) 评估紧急分界时间 urgency_threshold_at（当任务被判定为不紧急任务时才会触发:你需要评估何时从不紧急象限自动平移到紧急象限，不可为空）。
4) 评估优先级 priority_group（1~4）。
5) 生成一句轻松跟进句 banter（不超过30字）。

输出要求：
- 仅输出 JSON，不要 markdown，不要解释。
- deadline_at 仅允许 "yyyy-MM-dd HH:mm" 或空字符串。
- urgency_threshold_at 仅允许 "yyyy-MM-dd HH:mm" 或空字符串。
- priority_group 仅允许 1|2|3|4。
- banter 不得新增或修改任务事实（任务名、时间、优先级）。`

	// QuickNoteIntentPrompt 用于第一阶段：判断用户输入是否属于“随口记”。
	// 设计约束：
	// 1) 只做识别与抽取，不允许模型宣称“已写库”；
	// 2) 遇到相对时间必须先换算成绝对时间，减少后续工具层歧义；
	// 3) 若无时间信息必须返回空字符串，避免幻觉时间污染数据库。
	// 4) 把“当前时间”明确注入 prompt，保证相对时间换算有统一基准。
	QuickNoteIntentPrompt = `你是 SmartFlow 的“随口记分诊器”。
请判断用户输入是否表达了“帮我记一个任务/日程”的需求。
- 若是，请提取任务标题与时间线索。
- 时间处理必须严谨：若出现相对时间（如明天/后天/下周一/今晚），必须基于上文给出的“当前时间”换算为绝对时间。
- 若不是，请明确返回“非随口记意图”。
- 不要声称已经写入数据库。`

	// QuickNotePriorityPrompt 用于第二阶段：将任务归类到四象限优先级，并评估紧急分界线。
	// 输出会直接映射到 tasks.priority（1~4），因此要求结果必须可解释。
	// 这里强调“理由必须可解释”，是为了后续日志复盘时能看懂模型为何这么判。
	QuickNotePriorityPrompt = `你是 SmartFlow 的任务优先级评估器。
根据任务内容、时间约束和执行成本，输出优先级 priority_group：
1=重要且紧急，2=重要不紧急，3=简单不重要，4=不简单不重要。
请给出简短理由，理由必须可解释。
若你认为该任务需要后续自动平移，请额外输出 urgency_threshold_at（绝对时间，yyyy-MM-dd HH:mm）；否则输出空字符串。`

	// QuickNoteReplyBanterPrompt 用于随口记成功后的“轻松跟进句”生成。
	// 约束重点：
	// 1) 只输出一句自然中文；
	// 2) 贴合用户原话题（例如吃早餐、开会、写报告）；
	// 3) 禁止新增事实（尤其不能改时间、优先级、任务内容）；
	// 4) 不要 markdown，不要列表，不要引号包裹。
	QuickNoteReplyBanterPrompt = `你是 SmartFlow 的中文口语化回复润色助手。
请根据用户原话生成一句轻松自然的跟进话术，让回复更有温度。
要求：
- 只输出一句中文，不超过30字。
- 顺着用户创建提醒的主题延伸，就像聊天时友好的问候一样，记得动用你知道的对应领域的知识。例如(注意，只是例子)：用户说提醒他明天早上吃麦当劳，你润色回复应该类似这样："薯饼记得趁热吃哦~"。
- 可以轻微调侃，但语气友好，不刻薄。
- 不得新增或修改任务事实（任务名、时间、优先级）。
- 不要输出 markdown、编号、引号。`
)
