import Foundation
import Observation

/// 「身体档案」里的快捷问答:点一下把一句常用问题填进输入框。
/// 内置 3 条(不可删),用户可自定义追加(可删)。
struct QuickPrompt: Identifiable, Codable, Equatable {
    let id: UUID
    var title: String    // chip 上显示的短标签
    var prompt: String   // 点击后填入输入框的完整问题
    var isBuiltin: Bool

    init(id: UUID = UUID(), title: String, prompt: String, isBuiltin: Bool) {
        self.id = id
        self.title = title
        self.prompt = prompt
        self.isBuiltin = isBuiltin
    }
}

/// 快捷问答存储:内置常量 + 自定义条目(UserDefaults JSON,无 SwiftData schema 迁移风险)。
/// 自定义条目只是 UI 便利项、不是健康记录,故不进 SwiftData。
@Observable
final class QuickPromptStore {
    static let shared = QuickPromptStore()

    private let defaults = UserDefaults.standard
    private let storageKey = "kk.quickPrompts.custom.v1"

    private(set) var custom: [QuickPrompt]

    private init() {
        if let data = defaults.data(forKey: storageKey),
           let decoded = try? JSONDecoder().decode([QuickPrompt].self, from: data) {
            custom = decoded
        } else {
            custom = []
        }
    }

    /// 内置在前、自定义在后,供 chip 行展示。
    var all: [QuickPrompt] { Self.builtins + custom }

    /// 追加一条自定义问答。空白忽略;标签自动取问题前几个字。
    func add(prompt rawPrompt: String) {
        let trimmed = rawPrompt.trimmingCharacters(in: .whitespacesAndNewlines)
        guard !trimmed.isEmpty else { return }
        custom.append(QuickPrompt(title: Self.deriveTitle(trimmed),
                                  prompt: trimmed,
                                  isBuiltin: false))
        persist()
    }

    /// 删除一条自定义问答(内置不可删)。
    func delete(_ p: QuickPrompt) {
        guard !p.isBuiltin else { return }
        custom.removeAll { $0.id == p.id }
        persist()
    }

    private func persist() {
        if let data = try? JSONEncoder().encode(custom) {
            defaults.set(data, forKey: storageKey)
        }
    }

    /// 自定义条目的短标签:压成单行,取前 8 个字,超出补省略号。
    static func deriveTitle(_ prompt: String) -> String {
        let oneLine = prompt.replacingOccurrences(of: "\n", with: " ")
            .trimmingCharacters(in: .whitespaces)
        let head = oneLine.prefix(8)
        return oneLine.count > 8 ? "\(head)…" : String(head)
    }

    /// 内置 3 条(首屏):覆盖「就诊 / 解读 / 速查」三类,数据依赖稳、不碰诊断红线。
    static let builtins: [QuickPrompt] = [
        QuickPrompt(
            title: "就诊摘要",
            prompt: "根据我最近的身体症状，结合历史指标，整理一份让门诊医生快速了解我情况的就诊摘要。",
            isBuiltin: true
        ),
        QuickPrompt(
            title: "趋势解读",
            prompt: "把我血压最近半年的变化讲清楚：是变好还是变差、要注意什么。",
            isBuiltin: true
        ),
        QuickPrompt(
            title: "速答清单",
            prompt: "把我的过敏史、正在吃的药、慢性病整理成一句话清单，方便就诊时快速回答医生。",
            isBuiltin: true
        ),
    ]
}
