// Home dashboard — pregnancy week, trimester, milestones, upcoming checks.

const BABY_SIZE = [
  { week: 4,  emoji:'🌱', zh:'芝麻粒',  en:'Poppy seed',      cm:'0.1' },
  { week: 5,  emoji:'🌱', zh:'芝麻',    en:'Sesame seed',     cm:'0.2' },
  { week: 6,  emoji:'🫐', zh:'藍莓',    en:'Blueberry',       cm:'0.6' },
  { week: 7,  emoji:'🫐', zh:'大藍莓',  en:'Large blueberry', cm:'1.0' },
  { week: 8,  emoji:'🫒', zh:'橄欖',    en:'Olive',           cm:'1.6' },
  { week: 9,  emoji:'🍇', zh:'葡萄',    en:'Grape',           cm:'2.3' },
  { week: 10, emoji:'🍓', zh:'草莓',    en:'Strawberry',      cm:'3.1' },
  { week: 11, emoji:'🍋', zh:'萊姆',    en:'Lime',            cm:'4.1' },
  { week: 12, emoji:'🍋', zh:'檸檬',    en:'Lemon',           cm:'5.4' },
  { week: 13, emoji:'🍑', zh:'桃子',    en:'Peach',           cm:'7.4' },
  { week: 14, emoji:'🍊', zh:'橘子',    en:'Orange',          cm:'8.7' },
  { week: 15, emoji:'🍎', zh:'蘋果',    en:'Apple',           cm:'10'  },
  { week: 16, emoji:'🥑', zh:'酪梨',    en:'Avocado',         cm:'11.6' },
  { week: 17, emoji:'🍐', zh:'西洋梨',  en:'Pear',            cm:'13'  },
  { week: 18, emoji:'🍠', zh:'地瓜',    en:'Sweet potato',    cm:'14.2' },
  { week: 19, emoji:'🥭', zh:'芒果',    en:'Mango',           cm:'15.3' },
  { week: 20, emoji:'🍌', zh:'香蕉',    en:'Banana',          cm:'16.4' },
  { week: 21, emoji:'🥕', zh:'紅蘿蔔',  en:'Carrot',          cm:'26.7' },
  { week: 22, emoji:'🌽', zh:'玉米',    en:'Corn',            cm:'27.8' },
  { week: 23, emoji:'🍆', zh:'茄子',    en:'Eggplant',        cm:'28.9' },
  { week: 24, emoji:'🌽', zh:'大玉米',  en:'Large corn',      cm:'30'  },
  { week: 25, emoji:'🥦', zh:'花椰菜',  en:'Cauliflower',     cm:'34.6' },
  { week: 26, emoji:'🥬', zh:'大白菜',  en:'Cabbage',         cm:'35.6' },
  { week: 27, emoji:'🫑', zh:'甜椒',    en:'Bell pepper',     cm:'36.6' },
  { week: 28, emoji:'🍆', zh:'大茄子',  en:'Large eggplant',  cm:'37.6' },
  { week: 29, emoji:'🎃', zh:'橡實南瓜', en:'Acorn squash',   cm:'38.6' },
  { week: 30, emoji:'🥥', zh:'椰子',    en:'Coconut',         cm:'39.9' },
  { week: 31, emoji:'🍈', zh:'哈密瓜',  en:'Cantaloupe',      cm:'41.1' },
  { week: 32, emoji:'🎃', zh:'南瓜',    en:'Squash',          cm:'42.4' },
  { week: 33, emoji:'🍍', zh:'鳳梨',    en:'Pineapple',       cm:'43.7' },
  { week: 34, emoji:'🍈', zh:'甜瓜',    en:'Honeydew melon',  cm:'45'  },
  { week: 35, emoji:'🍉', zh:'小西瓜',  en:'Small watermelon',cm:'46.2' },
  { week: 36, emoji:'🥬', zh:'長白菜',  en:'Large cabbage',   cm:'47.4' },
  { week: 37, emoji:'🍍', zh:'大鳳梨',  en:'Large pineapple', cm:'48.6' },
  { week: 38, emoji:'🎃', zh:'冬瓜',    en:'Winter melon',    cm:'49.8' },
  { week: 39, emoji:'🍉', zh:'西瓜',    en:'Watermelon',      cm:'50.7' },
  { week: 40, emoji:'👶', zh:'足月寶寶', en:'Full-term baby',  cm:'51'  },
];

const MILESTONES = [
  { week:4,  zh:'著床期，hCG 開始上升', en:'Implantation · HCG rising', trim:1 },
  { week:6,  zh:'可見胎心跳（約 90–110 bpm）', en:'Fetal heartbeat visible ~6 wks', trim:1 },
  { week:8,  zh:'胚胎→胎兒轉變，器官形成', en:'Embryo → fetus transition', trim:1 },
  { week:10, zh:'NIPT / 非侵入性產前檢測可做', en:'NIPT available from ~10 wks', trim:1 },
  { week:11, zh:'初唐篩檢黃金期（11–14 週）', en:'NT scan window 11–14 wks', trim:1 },
  { week:13, zh:'進入第二孕期！相對穩定', en:'2nd trimester! More stable', trim:2 },
  { week:16, zh:'部分媽媽開始感覺胎動', en:'Some moms feel first flutters', trim:2 },
  { week:18, zh:'高層次超音波（18–22 週）', en:'Anatomy scan 18–22 wks', trim:2 },
  { week:20, zh:'胎動明顯，確認胎兒性別', en:'Fetal movement felt clearly', trim:2 },
  { week:24, zh:'妊娠糖尿病篩檢（OGTT）', en:'Gestational diabetes screen', trim:2 },
  { week:28, zh:'進入第三孕期！每日胎動計數', en:'3rd trimester · daily kick count', trim:3 },
  { week:32, zh:'胎兒開始儲存脂肪、肺部發育', en:'Fat storage · lung maturation', trim:3 },
  { week:35, zh:'乙型鏈球菌篩檢（35–37 週）', en:'GBS screening 35–37 wks', trim:3 },
  { week:36, zh:'胎位確認，準備分娩', en:'Confirm fetal position', trim:3 },
  { week:37, zh:'足月！隨時可能分娩', en:'Full term! Birth may come', trim:3 },
  { week:40, zh:'預產期', en:'Due date', trim:3 },
];

const CHECKS = [
  { week:8,  zh:'第一次正式產檢', en:'First OB visit' },
  { week:11, zh:'初唐篩檢 / NT 超音波', en:'NT scan' },
  { week:16, zh:'母血唐氏症篩檢（四指標）', en:'Quad screen' },
  { week:20, zh:'高層次超音波', en:'Anatomy scan' },
  { week:24, zh:'OGTT 妊娠糖尿病', en:'Glucose challenge' },
  { week:28, zh:'開始每月產檢', en:'Monthly OB visits' },
  { week:32, zh:'每兩週產檢', en:'Biweekly OB visits' },
  { week:36, zh:'GBS 乙型鏈球菌篩檢', en:'GBS screen' },
  { week:36, zh:'每週產檢', en:'Weekly OB visits' },
  { week:40, zh:'預產期', en:'Due date' },
];

const TRIM_COLOR = ['','var(--accent)','var(--sage)','var(--butter)'];
const TRIM_BG    = ['','var(--accent-soft)','var(--sage-soft)','color-mix(in oklab,var(--butter) 25%,white)'];

function HomePage({ onNavigate }) {
  const saved = (() => { try { return JSON.parse(localStorage.getItem('preg_home')||'{}'); } catch(e){return{};} })();
  const [lmp, setLmp] = React.useState(saved.lmp || '');
  const [etDate, setEtDate] = React.useState(saved.etDate || '');
  const [mode, setMode] = React.useState(saved.mode || 'lmp'); // 'lmp' | 'et' | 'due'
  const [dueDate, setDueDate] = React.useState(saved.dueDate || '');

  React.useEffect(() => {
    localStorage.setItem('preg_home', JSON.stringify({ lmp, etDate, mode, dueDate }));
  }, [lmp, etDate, mode, dueDate]);

  const today = new Date();

  const calcWeek = () => {
    let start;
    if (mode === 'lmp' && lmp)     start = new Date(lmp);
    else if (mode === 'et' && etDate) { start = new Date(etDate); start.setDate(start.getDate() - 14); }
    else if (mode === 'due' && dueDate) { start = new Date(dueDate); start.setDate(start.getDate() - 280); }
    if (!start || isNaN(start)) return null;
    const days = Math.floor((today - start) / 86400000);
    if (days < 0 || days > 300) return null;
    return { days, week: Math.floor(days / 7) + 1, day: (days % 7) + 1, total: days };
  };

  const preg = calcWeek();
  const week = preg?.week || 0;
  const trim = week <= 12 ? 1 : week <= 27 ? 2 : 3;
  const trimLabel = ['','第一孕期','第二孕期','第三孕期'][trim];
  const trimEn = ['','1st Trimester','2nd Trimester','3rd Trimester'][trim];

  const getDue = () => {
    if (mode === 'due' && dueDate) return new Date(dueDate);
    if (mode === 'lmp' && lmp) { const d = new Date(lmp); d.setDate(d.getDate()+280); return d; }
    if (mode === 'et' && etDate) { const d = new Date(etDate); d.setDate(d.getDate()+266); return d; }
    return null;
  };
  const due = getDue();
  const daysLeft = due ? Math.max(0, Math.round((due - today) / 86400000)) : null;

  const nextMilestone = MILESTONES.find(m => m.week >= week);
  const nextCheck = CHECKS.find(c => c.week >= week);
  const upcomingMilestones = MILESTONES.filter(m => m.week >= week && m.week <= week + 4).slice(0,3);

  const progress = week > 0 ? Math.min(100, ((week-1)/40)*100) : 0;

  const tips = {
    1: ['每日補充葉酸 400–800 mcg', '避免菸酒咖啡因', '注意早期出血，如有立即就醫', '多休息，避免提重物'],
    2: ['補充鈣質（每日 1000 mg）', '補充鐵質（每日 27 mg）', '適度運動（散步、游泳）', '按摩肚皮預防妊娠紋'],
    3: ['每日計數胎動（10次/2小時）', '練習拉梅茲呼吸法', '觀察產兆：陣痛、破水、落紅', '預防水腫，抬高雙腳'],
  };

  return (
    <div style={{ padding:'16px 16px 24px', display:'flex', flexDirection:'column', gap:16 }}>
      {/* Week input */}
      <Card pad="16px">
        <SectionTitle zh="懷孕資訊" en="Pregnancy Info" />
        <div style={{ display:'flex', gap:6, marginBottom:12 }}>
          {[['lmp','末次月經'],['et','胚胎植入'],['due','預產期']].map(([v,l]) => (
            <button key={v} className="btn-reset" onClick={() => setMode(v)} style={{
              flex:1, padding:'7px 0', fontSize:11, borderRadius:8,
              border:`1px solid ${mode===v?'var(--accent)':'var(--line)'}`,
              background: mode===v?'var(--accent-soft)':'transparent',
              color: mode===v?'var(--accent-ink)':'var(--ink-soft)',
              fontWeight: mode===v?600:400,
            }}>{l}</button>
          ))}
        </div>
        <div style={{ display:'grid', gridTemplateColumns:'1fr', gap:8 }}>
          {mode==='lmp' && (
            <div>
              <div style={{ fontSize:10.5, color:'var(--ink-faint)', marginBottom:4 }}>末次月經第一天 LMP</div>
              <input type="date" value={lmp} onChange={e=>setLmp(e.target.value)} />
            </div>
          )}
          {mode==='et' && (
            <div>
              <div style={{ fontSize:10.5, color:'var(--ink-faint)', marginBottom:4 }}>胚胎植入日 Transfer date</div>
              <input type="date" value={etDate} onChange={e=>setEtDate(e.target.value)} />
            </div>
          )}
          {mode==='due' && (
            <div>
              <div style={{ fontSize:10.5, color:'var(--ink-faint)', marginBottom:4 }}>預產期 Due date</div>
              <input type="date" value={dueDate} onChange={e=>setDueDate(e.target.value)} />
            </div>
          )}
        </div>
      </Card>

      {preg ? (
        <>
          {/* Main week display */}
          <Card pad="20px" style={{ background: TRIM_BG[trim] || 'var(--card)', border:`1px solid color-mix(in oklab,${TRIM_COLOR[trim]} 30%,var(--line))` }}>
            <div style={{ display:'flex', alignItems:'flex-end', gap:10, marginBottom:4 }}>
              <div className="serif" style={{ fontSize:56, fontWeight:600, lineHeight:1, color:TRIM_COLOR[trim] }}>
                {week}
              </div>
              <div style={{ paddingBottom:8 }}>
                <div style={{ fontSize:13, color:'var(--ink)', fontWeight:500 }}>週 · Week</div>
                <div style={{ fontSize:11, color:'var(--ink-soft)' }}>Day {preg.day} of 7</div>
              </div>
              <div style={{ marginLeft:'auto', textAlign:'right', paddingBottom:6 }}>
                <div style={{ fontSize:11, color:TRIM_COLOR[trim], fontWeight:600 }}>{trimLabel}</div>
                <div className="en" style={{ fontSize:9.5, color:'var(--ink-faint)' }}>{trimEn}</div>
              </div>
            </div>

            {/* Progress bar */}
            <div style={{ height:6, background:'var(--line)', borderRadius:99, overflow:'hidden', marginBottom:12 }}>
              <div style={{
                height:'100%', width:`${progress}%`,
                background:`linear-gradient(90deg, var(--accent), ${TRIM_COLOR[trim]})`,
                borderRadius:99, transition:'width 0.5s',
              }}/>
            </div>

            <div style={{ display:'flex', gap:10 }}>
              <StatChip label="距預產期" value={daysLeft ?? '—'} unit="天 days" color={TRIM_COLOR[trim]} />
              <StatChip label="已懷孕" value={preg.total} unit="天 days" color="var(--ink-soft)" />
            </div>
          </Card>

          {/* Baby size this week */}
          {(() => {
            const size = BABY_SIZE.find(s => s.week === week);
            if (!size) return null;
            return (
              <Card pad="16px 20px" style={{
                background: TRIM_BG[trim] || 'var(--card)',
                border:`1px solid color-mix(in oklab,${TRIM_COLOR[trim]} 25%,var(--line))`,
              }}>
                <div style={{ fontSize:9.5, color:'var(--ink-faint)', letterSpacing:'0.06em', marginBottom:10 }}>
                  本週寶寶大小 · BABY SIZE THIS WEEK
                </div>
                <div style={{ display:'flex', alignItems:'center', gap:16 }}>
                  <div style={{ fontSize:54, lineHeight:1, userSelect:'none' }}>{size.emoji}</div>
                  <div>
                    <div style={{ fontSize:20, fontWeight:600, color:TRIM_COLOR[trim] }}>{size.zh}</div>
                    <div className="en" style={{ fontSize:12, color:'var(--ink-soft)', marginTop:1 }}>{size.en}</div>
                    <div className="mono" style={{ fontSize:13, color:'var(--ink-faint)', marginTop:5 }}>
                      約 {size.cm} cm
                    </div>
                  </div>
                </div>
              </Card>
            );
          })()}

          {/* Next milestone */}
          {nextMilestone && (
            <Card pad="14px 16px">
              <div style={{ fontSize:9.5, color:'var(--ink-faint)', letterSpacing:'0.06em', marginBottom:6 }}>
                即將到來 · UPCOMING MILESTONE
              </div>
              <div style={{ display:'flex', alignItems:'center', gap:10 }}>
                <div style={{
                  minWidth:38, height:38, borderRadius:99,
                  background:`color-mix(in oklab,${TRIM_COLOR[nextMilestone.trim]} 18%,white)`,
                  border:`1px solid color-mix(in oklab,${TRIM_COLOR[nextMilestone.trim]} 30%,var(--line))`,
                  display:'flex', alignItems:'center', justifyContent:'center',
                  fontFamily:"'JetBrains Mono',monospace", fontSize:11,
                  color: TRIM_COLOR[nextMilestone.trim], fontWeight:600,
                }}>W{nextMilestone.week}</div>
                <div>
                  <div style={{ fontSize:13, color:'var(--ink)', fontWeight:500 }}>{nextMilestone.zh}</div>
                  <div className="en" style={{ fontSize:10.5 }}>{nextMilestone.en}</div>
                </div>
                <div style={{
                  marginLeft:'auto', fontFamily:"'JetBrains Mono',monospace",
                  fontSize:11, color:'var(--ink-faint)', whiteSpace:'nowrap',
                }}>
                  {nextMilestone.week > week ? `+${nextMilestone.week - week}w` : '本週'}
                </div>
              </div>
            </Card>
          )}

          {/* Tips for current trimester */}
          <Card pad="16px">
            <div style={{ fontSize:9.5, color:'var(--ink-faint)', letterSpacing:'0.06em', marginBottom:10 }}>
              {trimLabel}注意事項 · TRIMESTER TIPS
            </div>
            <div style={{ display:'flex', flexDirection:'column', gap:8 }}>
              {(tips[trim]||[]).map((t,i) => (
                <div key={i} style={{ display:'flex', gap:10, alignItems:'flex-start' }}>
                  <div style={{
                    minWidth:6, height:6, borderRadius:'50%',
                    background:TRIM_COLOR[trim], marginTop:5,
                  }}/>
                  <div style={{ fontSize:12.5, color:'var(--ink)', lineHeight:1.5 }}>{t}</div>
                </div>
              ))}
            </div>
          </Card>

          {/* Quick links */}
          {week <= 13 && (
            <button className="btn-reset" onClick={() => onNavigate('hcg')} style={{
              padding:'14px 16px',
              background:'var(--accent-soft)', borderRadius:'var(--radius)',
              border:`1px solid color-mix(in oklab,var(--accent) 30%,var(--line))`,
              display:'flex', alignItems:'center', gap:12, textAlign:'left',
            }}>
              <div style={{ fontSize:28 }}>📈</div>
              <div>
                <div style={{ fontSize:13, fontWeight:600, color:'var(--accent-ink)' }}>查看 HCG 曲線</div>
                <div style={{ fontSize:11, color:'var(--ink-soft)', marginTop:2 }}>追蹤 β-hCG 翻倍走勢 · Track beta</div>
              </div>
              <div style={{ marginLeft:'auto', color:'var(--ink-faint)' }}>›</div>
            </button>
          )}
          {week >= 16 && (
            <button className="btn-reset" onClick={() => onNavigate('kicks')} style={{
              padding:'14px 16px',
              background:'var(--sage-soft)', borderRadius:'var(--radius)',
              border:`1px solid color-mix(in oklab,var(--sage) 30%,var(--line))`,
              display:'flex', alignItems:'center', gap:12, textAlign:'left',
            }}>
              <div style={{ fontSize:28 }}>👶</div>
              <div>
                <div style={{ fontSize:13, fontWeight:600, color:'#556a52' }}>記錄胎動</div>
                <div style={{ fontSize:11, color:'var(--ink-soft)', marginTop:2 }}>每日 10 次計數 · Daily kick count</div>
              </div>
              <div style={{ marginLeft:'auto', color:'var(--ink-faint)' }}>›</div>
            </button>
          )}
        </>
      ) : (
        <Card pad="40px 20px" style={{ textAlign:'center' }}>
          <div style={{ fontSize:40, marginBottom:12 }}>🌸</div>
          <div className="serif" style={{ fontSize:20, color:'var(--ink-soft)', marginBottom:6 }}>
            請填入日期以開始追蹤
          </div>
          <div className="en" style={{ fontSize:12 }}>
            Enter your LMP, transfer date, or due date above
          </div>
        </Card>
      )}
    </div>
  );
}

Object.assign(window, { HomePage });
