import Foundation

/// 「长按 + 语音直达」prompt:端侧语音转写文本 → LLM(MNN/SME2 主链路)分类到新建入口。
/// 输出契约:严格 JSON `{"intent":"…"}`;解析失败/超时 → VoiceIntentService 回退关键词匹配(§3.2)。
nonisolated enum IntentPrompts {

    static func classify(_ utterance: String) -> String {
        classifyTemplate.replacingOccurrences(of: "{{TEXT}}", with: String(utterance.prefix(120)))
    }

    private static let classifyTemplate: String = #"""
你是健康 App 的语音意图分类器。用户长按「新建」按钮说了一句话,判断 ta 想打开哪个功能。
请只输出一段合法 JSON,格式 {"intent":"<分类>"},不要解释、不要 markdown 围栏、不要任何前后缀文字。

分类(只能选下面其中一个):
- "diary"      写日记,记录今天的感受、饮食、睡眠、身体状态
- "medication" 记一次用药/服药、吃了什么药、拍药盒(凡涉及「吃药/服药/用药」都归这里)
- "symptom"    记录身体症状,哪里不舒服(头疼、咳嗽、发烧、头晕…),与吃药无关
- "indicator"  记录指标数值(血压、血糖、体重、心率、体温…)
- "archive"    归档整份体检报告/化验单(拍报告存档)
- "export"     生成给医生看的身体档案/健康总结
- "reminder"   设置周期提醒
- "unknown"    无法判断

规则:
- 说到「提醒我…」一律 "reminder",即使内容涉及吃药或量血压。
- 凡是「记录/记一次用药、服药、吃药、吃了药」→ "medication",哪怕没说具体药名。
- 「记录/记一次」+ 动作时,先看这个动作是什么(吃药→medication、量血压→indicator、
  哪里疼→symptom),不要因为出现「记录」二字就归类成 symptom。
- 明确说出具体身体症状(头疼、咳嗽、发烧、头晕、拉肚子…)才算 "symptom";
  与吃药/用药无关。只是泛泛说今天的状态、心情、饮食、睡眠、累不累、舒不舒服 → "diary"。
- 既像日记又提到具体数值时,以数值为准 → "indicator"。
- 含否定或「忘了/没顾上」的吃药(「没吃药」「忘了吃药」「不用吃药」)不是记录用药 → "diary"。
- 只有明确要「拍下/存档这份报告或化验单」时才算 "archive";只是顺口提到体检或报告
  (「下周去体检」「医生说报告没问题」)不要归 archive,按日记或提醒处理。
- 拿不准、又不明确属于其它类别时,默认 "diary"(日记是最常见、最自由的入口)。
  尤其 "medication" 和 "archive" 会直接打开相机,把握不大时宁可归 "diary",不要误开相机。

示例:
"帮我记一下今天的血压,高压128低压85" → {"intent":"indicator"}
"我今天有点头疼,想记录一下" → {"intent":"symptom"}
"我要记录一次用药" → {"intent":"medication"}
"记一下今天吃的药" → {"intent":"medication"}
"今天有点累,感觉不太舒服" → {"intent":"diary"}
"刚买了一盒降压药,拍一下存进去" → {"intent":"medication"}
"今天睡得不错,写个日记" → {"intent":"diary"}
"把这份体检报告存档" → {"intent":"archive"}
"今天太忙,忘了吃药" → {"intent":"diary"}
"下周打算去做个体检" → {"intent":"diary"}
"医生说我报告没什么大问题" → {"intent":"diary"}
"每天早上八点提醒我量血压" → {"intent":"reminder"}
"整理一份给医生看的健康总结" → {"intent":"export"}

现在判断下面这句话,只输出 JSON。/no_think

用户的话:{{TEXT}}
"""#
}
