// theme.jsx — design tokens, palettes, tone-driven copy
// Exports to window: ThemeCtx, useTheme, buildTheme, PALETTES, getCopy

const PALETTES = {
  '暖橙':   { primary: '#FF7A45', dark: '#E85C28', soft: '#FFE9DC', tintBg: '#FFF8F3' },
  '莓粉':   { primary: '#FF5E86', dark: '#E63E69', soft: '#FFE2EB', tintBg: '#FFF6F8' },
  '抹茶':   { primary: '#46B07A', dark: '#2F9461', soft: '#DEF3E8', tintBg: '#F6FBF7' },
  '蓝莓':   { primary: '#5B7CFA', dark: '#3E5FE0', soft: '#E6ECFF', tintBg: '#F7F8FF' },
};

const FONTS = {
  '圆趣 Fredoka': "'Fredoka', 'Noto Sans SC', sans-serif",
  '软糖 Baloo':   "'Baloo 2', 'Noto Sans SC', sans-serif",
  '清爽黑体':     "'Noto Sans SC', 'PingFang SC', sans-serif",
};

const RADII = { '圆润': 28, '适中': 18, '方正': 10 };

function buildTheme(tw) {
  const p = PALETTES[tw.palette] || PALETTES['暖橙'];
  const R = RADII[tw.radius] != null ? RADII[tw.radius] : 28;
  return {
    primary: p.primary, dark: p.dark, soft: p.soft,
    bg: p.tintBg, surface: '#FFFFFF',
    ink: '#2B2218', inkSoft: '#9A8E7F', inkFaint: '#C9BEB0',
    line: '#F1E8DE',
    good: '#3FB97A', warn: '#F2A93C', over: '#F0594B',
    R, rSm: Math.max(8, Math.round(R * 0.5)), rLg: Math.round(R * 1.25),
    display: FONTS[tw.font] || FONTS['圆趣 Fredoka'],
    density: tw.density || '标准',
    tone: tw.tone || '幽默',
  };
}

const ThemeCtx = React.createContext(buildTheme({}));
function useTheme() { return React.useContext(ThemeCtx); }

// ── Tone-driven copy. mode: 减脂 | 增肌 | 维持 ──
function getCopy(tone, mode) {
  const verdicts = {
    '幽默': { title: '热量略微超标啦 😋', sub: '不慌，吃都吃了，咱们想办法平衡回来～' },
    '亲切': { title: '今天稍微多了一点点', sub: '没关系，下一餐清淡些就能补回来。' },
    '专业': { title: '本餐热量高于单餐建议值', sub: '建议在后续餐次中适度下调摄入。' },
  };
  const tips = {
    '幽默': [
      { icon: 'run',  t: '想抵消这顿？',   d: '慢跑约 42 分钟，或者……快走 1 小时假装在散步。' },
      { icon: 'leaf', t: '蛋白质有点害羞', d: '它在这盘里只占 18%，下一餐让鸡胸/鸡蛋当主角呗。' },
      { icon: 'oil',  t: '油脂偷偷加戏',   d: '麻辣香锅的灵魂是油，下次让老板「少油」，热量直接 -150。' },
      { icon: 'water',t: '记得多喝水',     d: '重口味之后身体会喊渴，咕咚两杯，水肿拜拜。' },
    ],
    '亲切': [
      { icon: 'run',  t: '动一动更安心',   d: '饭后散步 30 分钟，帮助消化也舒缓一下心情。' },
      { icon: 'leaf', t: '补点蛋白质',     d: '这餐蛋白偏少，下一餐可以加个鸡蛋或一杯牛奶。' },
      { icon: 'oil',  t: '油可以再少些',   d: '下次点餐时备注少油，口味不变热量更友好。' },
      { icon: 'water',t: '多喝水哦',       d: '重口味后多补充水分，对身体更好。' },
    ],
    '专业': [
      { icon: 'run',  t: '能量消耗建议',   d: '约需中等强度有氧 40 分钟以平衡本餐超出部分。' },
      { icon: 'leaf', t: '蛋白质摄入偏低', d: '本餐蛋白占比 18%，建议下一餐补足至 25–30%。' },
      { icon: 'oil',  t: '脂肪占比偏高',   d: '脂肪供能比偏高，建议减少烹饪用油及高脂配料。' },
      { icon: 'water',t: '注意钠与水分',   d: '高钠饮食后建议增加饮水，关注次日体重波动。' },
    ],
  };
  const modeNote = {
    '减脂': '减脂期目标：制造热量缺口，优先高蛋白、高纤维。',
    '增肌': '增肌期目标：热量略盈余，保证蛋白质与碳水充足。',
    '维持': '维持期目标：热量收支平衡，营养均衡分配。',
  };
  return {
    verdict: verdicts[tone] || verdicts['幽默'],
    tips: tips[tone] || tips['幽默'],
    modeNote: modeNote[mode] || modeNote['减脂'],
  };
}

Object.assign(window, { ThemeCtx, useTheme, buildTheme, PALETTES, FONTS, RADII, getCopy });
