// data.jsx — 樂睦公司端 mockup（早期新創規模：機構少、數據量適中、工具多在測試中）
const fmt = (n) => n.toLocaleString('en-US');
const fmtK = (n) => n >= 1e6 ? (n / 1e6).toFixed(2) + 'M' : n >= 1e4 ? Math.round(n / 1e3) + 'k' : '' + n;

// 7 家合作機構（花蓮 + 嘉義實際存在之長照機構；含試辦/導入中，符合早期新創）
const INSTITUTIONS = [
  { id: 'i1', name: '同心圓日間照顧中心', type: '日間照顧中心', region: '花蓮縣', members: 45, devices: 14, monthly: 642, online: 96.4, trend: 'up', since: '2026.01', status: '試辦中', statusKind: 'info', sixGain: 8.6 },
  { id: 'i2', name: '嘉義縣民雄日間照顧中心', type: '日間照顧中心', region: '嘉義縣', members: 38, devices: 12, monthly: 560, online: 94.0, trend: 'up', since: '2026.01', status: '試辦中', statusKind: 'info', sixGain: 6.2 },
  { id: 'i3', name: '聖愛家園失智日照中心', type: '失智症日間照顧', region: '嘉義市', members: 28, devices: 9, monthly: 388, online: 92.8, trend: 'up', since: '2026.02', status: '試辦中', statusKind: 'info', sixGain: 5.1 },
  { id: 'i4', name: '嘉義縣水上日間照顧中心', type: '日照（失能失智混合）', region: '嘉義縣', members: 24, devices: 9, monthly: 360, online: 92.3, trend: 'flat', since: '2026.02', status: '試辦中', statusKind: 'info', sixGain: 4.6 },
  { id: 'i5', name: '花蓮家庭照顧者關懷協會失智據點', type: '失智社區服務據點', region: '花蓮縣', members: 18, devices: 6, monthly: 214, online: 90.1, trend: 'up', since: '2026.04', status: '試辦中', statusKind: 'info', sixGain: 3.0 },
  { id: 'i6', name: '花蓮愛加倍巷弄長照站', type: 'C級巷弄長照站', region: '花蓮縣', members: 14, devices: 5, monthly: 150, online: 88.6, trend: 'up', since: '2026.05', status: '試辦中', statusKind: 'info', sixGain: 2.3 },
  { id: 'i7', name: '花蓮長榮老人養護中心', type: '老人養護機構', region: '花蓮縣', members: 22, devices: 5, monthly: 138, online: 87.4, trend: 'down', since: '2026.05', status: '試辦中', statusKind: 'info', sixGain: 1.5 },
  { id: 'i8', name: '台中市長老教會杏林教會', type: '教會社區關懷據點', region: '台中市', members: 10, devices: 3, monthly: 40, online: 85.0, trend: 'up', since: '2026.06', status: '導入中', statusKind: 'warn', sixGain: 0.8 },
];

// 整合教具：大部分仍在測試中（早期新創）
const VENDORS_INT = [
  { model: '互動式認知遊戲機 CG-200', vendor: '悅動智慧', cat: '認知訓練', api: '已介接', apiKind: 'good', fmt: 'REST / JSON', units: 22, uses: 1840, trend: 'up' },
  { model: '彩色手搖鈴組 BellKit-8', vendor: '和音樂育', cat: '音樂律動', api: '已介接', apiKind: 'good', fmt: 'BLE / MQTT', units: 26, uses: 2120, trend: 'up' },
  { model: '體感律動投影 MoveCast', vendor: '悅動智慧', cat: '肢體活動', api: '測試中', apiKind: 'warn', fmt: 'REST / JSON', units: 8, uses: 412, trend: 'up' },
  { model: '語音回想訓練 EchoMind', vendor: '憶聲科技', cat: '記憶訓練', api: '測試中', apiKind: 'warn', fmt: 'REST / JSON', units: 6, uses: 248, trend: 'flat' },
  { model: '觸控記憶配對 PairUp', vendor: '悅動智慧', cat: '認知訓練', api: '測試中', apiKind: 'warn', fmt: 'REST / JSON', units: 5, uses: 196, trend: 'up' },
  { model: '數位書法板 InkBoard', vendor: '墨研數位', cat: '精細動作', api: '測試中', apiKind: 'warn', fmt: 'gRPC', units: 4, uses: 124, trend: 'flat' },
  { model: '平衡感測踏墊 StepSense', vendor: '穩步生醫', cat: '肢體活動', api: '測試中', apiKind: 'warn', fmt: 'BLE / MQTT', units: 3, uses: 58, trend: 'up' },
  { model: '懷舊互動牆 MemoWall', vendor: '時光互動', cat: '記憶訓練', api: '規劃中', apiKind: 'info', fmt: '待定', units: 0, uses: 0, trend: 'flat' },
];
const VENDOR_COUNT = new Set(VENDORS_INT.map(v => v.vendor)).size;
const TESTING_COUNT = VENDORS_INT.filter(v => v.api === '測試中').length;
const LIVE_COUNT = VENDORS_INT.filter(v => v.api === '已介接').length;
const ONLINE_DEVICES = VENDORS_INT.reduce((a, v) => a + v.units, 0);

const MONTHS = ['26/01', '26/02', '26/03', '26/04', '26/05', '26/06'];
const ACTIVITY_SERIES = [380, 760, 1180, 1660, 2050, 2452];

const CARE_LEVELS = [
  { label: '照護級別 1', value: 47, color: 'var(--c-teal)' },
  { label: '照護級別 2', value: 64, color: 'var(--c-blue)' },
  { label: '照護級別 3', value: 44, color: 'var(--accent)' },
  { label: '照護級別 4', value: 26, color: 'var(--c-violet)' },
  { label: '照護級別 5', value: 18, color: 'var(--c-rose)' },
];

const SIX = [
  { k: '認知力', b: 54, r: 62 }, { k: '反應力', b: 51, r: 60 }, { k: '體適能', b: 49, r: 56 },
  { k: '自主力', b: 56, r: 61 }, { k: '社交力', b: 58, r: 65 }, { k: '情緒力', b: 55, r: 63 },
];

const REGION_DIST = (function () { const m = {}; INSTITUTIONS.forEach(i => { m[i.region] = (m[i.region] || 0) + i.members; }); return Object.keys(m).map(k => ({ label: k, value: m[k] })).sort((a, b) => b.value - a.value); })();

const FEED = [
  { t: '12 分鐘前', kind: 'data', text: '同心圓日間照顧中心 同步 642 筆教具互動數據' },
  { t: '1 小時前', kind: 'llm', text: 'AI 產出 民雄日照 3 份前後測成效報告，待機構老師覆核' },
  { t: '3 小時前', kind: 'tool', text: '體感律動投影 MoveCast 進入介接測試（第 2 階段）' },
  { t: '今日 11:15', kind: 'inst', text: '台中市長老教會杏林教會 完成據點建檔，開始導入' },
  { t: '今日 09:20', kind: 'inst', text: '花蓮愛加倍巷弄長照站 完成基本資料建檔' },
  { t: '昨日', kind: 'report', text: '聖愛家園 產出 Q2 評鑑佐證（嘉義市衛生局格式）' },
];

const TOTAL_MEMBERS = INSTITUTIONS.reduce((a, i) => a + i.members, 0);
const TOTAL_MONTHLY = INSTITUTIONS.reduce((a, i) => a + i.monthly, 0);
const AVG_ONLINE = Math.round(INSTITUTIONS.reduce((a, i) => a + i.online, 0) / INSTITUTIONS.length * 10) / 10;
const DATA_POINTS = 96418;

const KPIS = [
  { key: 'inst', label: '合作機構', value: INSTITUTIONS.length, unit: '家', sub: '7 試辦 · 1 導入中', delta: '+1', deltaKind: 'up', spark: [4, 5, 6, 6, 7, 8], color: 'var(--accent)' },
  { key: 'members', label: '服務長者', value: TOTAL_MEMBERS, unit: '位', delta: '+9.5%', deltaKind: 'up', spark: [120, 140, 158, 172, 182, TOTAL_MEMBERS], color: 'var(--c-blue)' },
  { key: 'tools', label: '整合教具', value: VENDORS_INT.length, unit: '款', sub: TESTING_COUNT + ' 款測試中', delta: '+2', deltaKind: 'up', spark: [4, 5, 6, 7, 8, 8], color: 'var(--c-teal)' },
  { key: 'data', label: '累積數據點', value: DATA_POINTS, fmt: 'big', sub: '本月 +9.6k', delta: '+11%', deltaKind: 'up', spark: [40, 55, 68, 80, 90, 96], color: 'var(--c-green)' },
];

// —— LLM 報告品質 / 反饋 ——
const LLM_KPIS = [
  { label: '本月 AI 報告', value: '38', sub: '份', icon: 'file-text' },
  { label: '平均信心度', value: '78%', sub: '模型自評', icon: 'gauge' },
  { label: '老師採納率', value: '72%', sub: '機構老師直接或微調採納', icon: 'thumbs-up' },
  { label: '待老師覆核', value: '5', sub: '份 · 機構端 human-in-the-loop', icon: 'user-check' },
];
const LLM_FEEDBACK = [
  { label: '直接採納', value: 21, color: 'var(--c-green)' },
  { label: '微調後採納', value: 12, color: 'var(--accent)' },
  { label: '需重寫', value: 5, color: 'var(--c-rose)' },
];
const LLM_TREND = [58, 61, 60, 64, 66, 69, 70, 72]; // 每週採納率 %
const LLM_TREND_LABELS = ['W1', 'W2', 'W3', 'W4', 'W5', 'W6', 'W7', 'W8'];
const LLM_QUEUE = [
  { who: '陳秀英', inst: '同心圓日照', type: '前後測成效', conf: 86, rating: 'up', status: '已採納', kind: 'good', by: '王淑芬', cat: '直接採用', issue: '敘述與數據一致，老師直接採用、未修改。' },
  { who: '林文德', inst: '同心圓日照', type: '個案建議', conf: 81, rating: 'edit', status: '微調後採納', kind: 'warn', by: '王淑芬', cat: '用詞過於肯定', issue: 'AI 寫「認知明顯改善」，老師改為「近一個月反應較穩定，仍需持續觀察」，語氣放保守。' },
  { who: '黃春美', inst: '民雄日照', type: '前後測成效', conf: 74, rating: 'up', status: '已採納', kind: 'good', by: '李雅婷', cat: '直接採用', issue: '結論方向正確，老師直接採用。' },
  { who: '王國棟', inst: '民雄日照', type: '需關注提示', conf: 63, rating: 'down', status: '待覆核', kind: 'info', by: '', cat: '', issue: '' },
  { who: '李秀美', inst: '聖愛家園', type: '個案建議', conf: 69, rating: 'edit', status: '微調後採納', kind: 'warn', by: '張慧君', cat: '缺少安全/家屬提醒', issue: 'AI 漏了跌倒風險的家屬叮嚀，老師補上「建議家屬留意起身與如廁時的陪伴」。' },
  { who: '張文雄', inst: '水上日照', type: '需關注提示', conf: 58, rating: 'down', status: '需重寫', kind: 'bad', by: '陳怡君', cat: '風險等級判讀錯誤', issue: 'AI 把情緒低落判為「高風險需通報」，老師判斷為短期適應問題、屬中度關注，整份重寫。重寫與採用的差別在於風險分級與後續處置方向完全不同。' },
  { who: '吳建國', inst: '民雄日照', type: '前後測成效', conf: 83, rating: 'up', status: '已採納', kind: 'good', by: '李雅婷', cat: '直接採用', issue: '數據引用正確，老師直接採用。' },
  { who: '何美玲', inst: '同心圓日照', type: '個案建議', conf: 77, rating: 'up', status: '待覆核', kind: 'info', by: '', cat: '', issue: '' },
];
// 常見人工修改原因（老師最常修改/重寫之處 → 回饋模型學習的訊號）
const FEEDBACK_REASONS = [
  { label: '用詞過於肯定', value: 9 },
  { label: '缺少安全提醒', value: 7 },
  { label: '數據引用待精準', value: 5 },
  { label: '風險等級判讀', value: 4 },
  { label: '語氣貼近長輩', value: 3 },
];

// —— 報告中心 ——
const REPORTS = [
  { title: '同心圓 · 機構季度成效報告', inst: '同心圓日照', period: '2026 Q1', juri: '花蓮縣衛生局', by: '林淑芬', date: '2026.04.02', status: '已產出', kind: 'good' },
  { title: '陳秀英 · 前後測成效報告', inst: '同心圓日照', period: '2026.01-03', juri: '花蓮縣衛生局', by: 'AI + 陳志明', date: '2026.04.06', status: '已產出', kind: 'good' },
  { title: '民雄 · 評鑑佐證彙整', inst: '民雄日照', period: '2026 Q1', juri: '嘉義縣衛生局', by: '黃文彬', date: '2026.04.09', status: '已產出', kind: 'good' },
  { title: '聖愛家園 · 機構季度成效報告', inst: '聖愛家園', period: '2026 Q1', juri: '嘉義市衛生局', by: 'AI + 吳玉珍', date: '2026.04.11', status: '審核中', kind: 'warn' },
  { title: '吳建國 · 前後測成效報告', inst: '民雄日照', period: '2026.02-04', juri: '嘉義縣衛生局', by: 'AI + 蔡宗翰', date: '2026.04.14', status: '草稿', kind: 'info' },
];

// —— AI / 模型成本 ——（公司內部視角；NT$，早期新創規模）
const AI_COST_KPIS = [
  { label: '本月 AI 成本', value: 'NT$8,420', sub: '較上月 +6%', icon: 'currency-circle-dollar' },
  { label: '每份報告平均成本', value: 'NT$5.4', sub: '本月 38 份', icon: 'file-text' },
  { label: '每位長者月成本', value: 'NT$42', sub: '199 位長者', icon: 'user' },
  { label: '本月 Token 用量', value: '12.4M', sub: '輸入 + 輸出', icon: 'database' },
];
// 模型成本細項（cost 為本月 NT$；占比由 cost 動態計算）
const MODEL_COSTS = [
  { model: 'Claude Opus 4.8', use: '複雜個案推理 · 需關注提示', calls: 420, tokIn: '1.4M', tokOut: '0.7M', cost: 3120, color: 'var(--accent)' },
  { model: 'Claude Sonnet 4.6', use: '前後測成效報告生成', calls: 1840, tokIn: '4.9M', tokOut: '1.9M', cost: 2980, color: 'var(--c-blue)' },
  { model: 'Claude Haiku 4.5', use: '信心度評估 · 分類標記', calls: 5200, tokIn: '2.0M', tokOut: '0.6M', cost: 880, color: 'var(--c-teal)' },
  { model: '語音轉文字 STT', use: '長輩語音回想轉文字', calls: 1200, tokIn: '—', tokOut: '—', cost: 1080, color: 'var(--c-amber)' },
  { model: 'Embedding (語意檢索)', use: '個案歷史比對 · 檢索', calls: 8600, tokIn: '0.7M', tokOut: '—', cost: 360, color: 'var(--c-violet)' },
];
const COST_TREND = [2100, 3650, 5200, 6600, 7800, 8420]; // 每月 NT$，對應 MONTHS（2026 迄今）
// 成本與模型導入時間軸
const COST_TIMELINE = [
  { date: '2026.01', kind: 'inst', title: '平台上線，導入 Claude Sonnet 生成報告', desc: '首批試辦機構上線，AI 自動生成前後測成效報告，當月成本約 NT$2,100。' },
  { date: '2026.02', kind: 'llm', title: '需關注提示改用更強推理模型', desc: '複雜個案改用更高階推理模型，準確度提升、低信心比例下降。' },
  { date: '2026.03', kind: 'tool', title: '信心度評估改用 Claude Haiku 4.5 降本', desc: '分類與信心度評估換成輕量 Haiku，單份報告成本明顯下降。' },
  { date: '2026.04', kind: 'data', title: '導入 Embedding 語意檢索', desc: '個案歷史與同級別比對更精準，每次呼叫成本極低。' },
  { date: '2026.05', kind: 'tool', title: '新增語音回想轉文字模組', desc: '長輩口述自動成文字，當月成本 +NT$1,080。' },
  { date: '2026.06', kind: 'report', title: '升級 Claude Opus 4.8，並建立覆核回饋訓練集', desc: '複雜個案判讀升級至 Opus 4.8；老師的修改與重寫回饋模型，重寫率逐月下降。' },
];

// —— 通知 ——（鈴鐺）
const NOTIFS = [
  { t: '5 分鐘前', kind: 'llm', icon: 'robot', unread: true, go: 'llm', text: '民雄日照 王國棟 的「需關注提示」信心度偏低，待機構老師覆核' },
  { t: '40 分鐘前', kind: 'inst', icon: 'buildings', unread: true, go: 'institutions', text: '台中市長老教會杏林教會 加入導入流程' },
  { t: '23 分鐘前', kind: 'data', icon: 'database', unread: true, go: 'overview', text: '同心圓日間照顧中心 同步 642 筆教具互動數據' },
  { t: '1 小時前', kind: 'tool', icon: 'plugs-connected', unread: true, go: 'integrations', text: '體感律動投影 MoveCast 介接測試進入第 2 階段' },
  { t: '今日 09:20', kind: 'inst', icon: 'buildings', unread: false, go: 'institutions', text: '花蓮愛加倍巷弄長照站 完成基本資料建檔' },
  { t: '昨日 17:40', kind: 'report', icon: 'file-text', unread: false, go: 'reports', text: '聖愛家園 Q2 評鑑佐證（嘉義市衛生局格式）已產出' },
  { t: '昨日 11:02', kind: 'warn', icon: 'warning', unread: false, go: 'integrations', text: '平衡感測踏墊 StepSense 有 1 台離線，請確認連線' },
];

Object.assign(window, {
  INSTITUTIONS, VENDORS_INT, VENDOR_COUNT, TESTING_COUNT, LIVE_COUNT, ONLINE_DEVICES, MONTHS, ACTIVITY_SERIES,
  CARE_LEVELS, SIX, REGION_DIST, FEED, KPIS, AVG_ONLINE, DATA_POINTS, TOTAL_MEMBERS, TOTAL_MONTHLY,
  LLM_KPIS, LLM_FEEDBACK, LLM_TREND, LLM_TREND_LABELS, LLM_QUEUE, FEEDBACK_REASONS, REPORTS, NOTIFS,
  AI_COST_KPIS, MODEL_COSTS, COST_TREND, COST_TIMELINE, fmt, fmtK,
});
