// ============================================================
// plan-store.jsx — single source of truth for the plan being edited.
// Persists to localStorage so the doctor can close the tab, come back,
// and pick up where they left off. Also keeps a history index of every
// plan ever saved so they can switch between patients.
// ============================================================

const STORAGE_PREFIX = 'blife.plans.';
const INDEX_KEY      = 'blife.plans.index';
const CURRENT_KEY    = 'blife.plans.current';

function _uid() {
  if (typeof crypto !== 'undefined' && crypto.randomUUID) return crypto.randomUUID();
  return 'p_' + Date.now() + '_' + Math.random().toString(36).slice(2, 8);
}

function blankPlan() {
  return {
    id: _uid(),
    createdAt: Date.now(),
    updatedAt: Date.now(),
    patient: { name: '', date: '', sex: '', age: '' },
    doctor: { name: 'Dra Joana Costa', role: '', license: '' },
    lang: 'pt-BR',
    chapters: {},
    savedChapters: {},
  };
}

// Fully populated demo plan — loaded via "Carregar modelo".
const SAMPLE_PLAN = {
  id: '__sample__',           // overwritten on load
  createdAt: 0, updatedAt: 0, // overwritten on load
  patient: { name: 'Fabrizio Santos', date: '15 mai 2026', sex: 'Masculino', age: '42' },
  doctor:  { name: 'Dra Luiza Simões', role: 'Medicina longevidade', license: 'CRM 12.345' },
  chapters: {
    carta: {
      mensagem:
        '<p>Olhei todos os dados sobre você.</p>' +
        '<p style="font-style:italic">"Quero aumentar minha energia para dar conta dos meus filhos e voltar a treinar corrida".</p>',
    },
    resultado: {
      fileName: 'Laudo_Fabrizio_abr2026.pdf',
      examDate: '18 abr 2026',
      lab: 'Laboratório DASA',
      bioAge: '38,5',
      comentario: '',
      biomarkers: [
        { name: 'Colesterol Total', category: 'Cardiovascular', value: '182', unit: 'mg/dL', status: 'otimo', ref: '< 200' },
        { name: 'Colesterol HDL', category: 'Cardiovascular', value: '40', unit: 'mg/dL', status: 'atencao', ref: '> 60' },
        { name: 'Colesterol LDL', category: 'Cardiovascular', value: '108', unit: 'mg/dL', status: 'normal', ref: '< 100' },
        { name: 'Triglicerídeos', category: 'Cardiovascular', value: '88', unit: 'mg/dL', status: 'otimo', ref: '< 90' },
        { name: 'Apolipoproteína B', category: 'Cardiovascular', value: '69', unit: 'mg/dL', status: 'atencao', ref: '< 60' },
        { name: 'Homocisteína', category: 'Cardiovascular', value: '10', unit: 'µmol/L', status: 'normal', ref: '7–8' },
        { name: 'Hemoglobina Glicada', category: 'Cardiovascular', value: '5.2', unit: '%', status: 'otimo', ref: '< 5,4' },
        { name: 'Glicose', category: 'Metabólico', value: '88', unit: 'mg/dL', status: 'otimo', ref: '75–90' },
        { name: 'TSH', category: 'Tireoide', value: '2.8', unit: 'µUI/mL', status: 'normal', ref: '1–2' },
        { name: 'Ferritina', category: 'Energia & Resistência', value: '40', unit: 'ng/mL', status: 'normal', ref: '70–150' },
        { name: 'Hemoglobina', category: 'Energia & Resistência', value: '15.1', unit: 'g/dL', status: 'otimo', ref: '14–15' },
        { name: 'Vitamina B12', category: 'Energia & Resistência', value: '520', unit: 'pg/mL', status: 'otimo', ref: '> 500' },
        { name: '25-OH Vitamina D', category: 'Imunidade', value: '32', unit: 'ng/mL', status: 'atencao', ref: '50–70' },
        { name: 'Magnésio', category: 'Metabólico', value: '2.1', unit: 'mg/dL', status: 'normal', ref: '2,2–2,5' },
        { name: 'Alanina aminotransferase', category: 'Fígado', value: '22', unit: 'U/L', status: 'otimo', ref: '< 25' },
        { name: 'Gama GT', category: 'Fígado', value: '34', unit: 'U/L', status: 'normal', ref: '< 20' },
        { name: 'Ácido Úrico', category: 'Cardiovascular', value: '5.8', unit: 'mg/dL', status: 'otimo', ref: '3,5–6' },
        { name: 'Cortisol', category: 'Hormonal', value: '18', unit: 'µg/dL', status: 'normal', ref: '10–15' },
      ],
    },
    objetivos: {
      items: [
        { id: 1, text: 'Energy Levels & Cognitive Performance' },
      ],
      statement:
        '<p style="font-style:italic">"Quero aumentar minha energia para dar conta dos meus filhos e voltar a treinar corrida."</p>',
    },
    biomarcadores: {
      laudoData: '18 abr 2026',
      comentario:
        '<p>Apo B e HDL pedem atenção este ciclo. Vamos focar em ajuste de ômega-3, atividade física e revisar daqui a 90 dias.</p>',
      focused: [
        { name: 'Apolipoproteína B',    category: 'Cardiovascular',              value: '69', unit: 'mg/dL',  status: 'atencao' },
        { name: 'Homocisteína',         category: 'Metabolismo · metilação',     value: '10', unit: 'µmol/L', status: 'normal'  },
        { name: 'HDL Colesterol',       category: 'Imunidade · cardiovascular',  value: '40', unit: 'mg/dL',  status: 'atencao' },
        { name: 'Ferritina',            category: 'Hematologia · energia',       value: '40', unit: 'ng/mL',  status: 'normal'  },
        { name: '25-OH Vitamina D',     category: 'Imunidade · ósseo',           value: '32', unit: 'ng/mL',  status: 'atencao' },
        { name: 'Magnésio eritrocitário', category: 'Metabolismo · neuromuscular', value: '21', unit: 'mg/dL', status: 'otimo' },
      ],
    },
    recmedicas: {
      intro: '<p>O objetivo é otimizar o estado de saúde, abordando de forma personalizada as necessidades específicas. Cada alvo abaixo reúne a conduta clínica priorizada para este ciclo.</p>',
      items: [
        { id: 1, target: 'Otimizar saúde cardiovascular',
          recommendation: '<ul><li>Otimizar homocisteína para 7–8 µmol/L com complexo B metilado, melhorando metilação e viscosidade sanguínea.</li><li>Manter boa ingestão de gorduras boas e elevar o índice de ômega-3 acima de 8%.</li><li>Elevar VO₂máx para faixas de alta performance.</li></ul>' },
        { id: 2, target: 'Saúde metabólica',
          recommendation: '<ul><li>Abordagem low-carb moderada e flexibilidade metabólica conforme o plano alimentar.</li><li>Caminhadas de 10 min após refeições maiores para reduzir picos de insulina.</li><li>Gestão de stress — o cortisol é importante condutor de glicose no sangue.</li></ul>' },
        { id: 3, target: 'Equilíbrio hormonal & detox',
          recommendation: '<ul><li>Adaptógenos para regular o cortisol; sulforafano para metabolização de estrogênio.</li><li>Reduzir peixes de alto mercúrio; clorela diária e suporte de detox com NAC e ácido alfa-lipoico.</li></ul>' },
      ],
    },
    medicamentos: [
      {
        name: 'Atorvastatina 10mg', dose: '1 cp', period: 'Noite', duration: 'Contínuo',
        howTo: 'Tomar 1 comprimido após o jantar, sempre no mesmo horário. Não interromper sem orientação médica.',
        objective: 'Reduzir LDL colesterol e Apo B em 30% nos próximos 90 dias, dentro do programa de saúde cardiovascular.',
        bio: ['LDL Colesterol', 'Apolipoproteína B'],
      },
    ],
    peptideos: [
      { name: 'BPC-157', dose: '10 mg · 0,1 mL', freq: 'Seg a sex · manhã' },
      { name: 'KPV sublingual', dose: '1 spray', freq: 'Diariamente · manhã' },
      { name: 'CJC (no DAC) + Ipamorelina', dose: '5 + 5 mg · 0,1 mL', freq: 'Diariamente ao deitar' },
      { name: 'MOTS-C', dose: '0,1 mg', freq: 'Antes do exercício físico' },
    ],
    suplementacao: [
      {
        name: 'Coenzima Q10 com Methyl-B', dose: '100mg + B-complex', qty: '1 cápsula', period: 'Manhã',
        howTo: 'Tomar 1 cápsula ao despertar, junto com o café da manhã que contenha gordura (ovo, abacate, oleaginosas). Não tomar à noite — pode atrapalhar o sono.',
        objective: 'Suportar a produção mitocondrial de ATP e otimizar a metilação da homocisteína (atualmente em 14,2 µmol/L — limite superior da faixa).',
        shop: 'https://blife.life/loja/coq10-methyl-b',
        bio: ['CoQ10', 'Homocisteína', 'Vitamina B12', 'Folato'],
      },
      {
        name: 'Ferro Bisglicinato 35mg', dose: '35mg de ferro elementar', qty: '1 cápsula', period: 'Manhã',
        howTo: 'Tomar em jejum, 30 minutos antes do café da manhã, com 1 copo de suco de laranja (vitamina C aumenta absorção em ~40%). NÃO tomar junto com café, chá preto, leite ou suplemento de cálcio.',
        objective: 'Reverter o quadro de anemia ferropriva leve identificado nos exames de abril. Restaurar reservas até final do ciclo (90 dias).',
        shop: 'https://blife.life/loja/ferro-bisglicinato',
        bio: ['Ferritina', 'Ferro sérico', 'Hemoglobina', 'Saturação de transferrina'],
      },
      {
        name: 'Ômega 3 EPA+DHA 1700mg', dose: '850mg EPA + 850mg DHA', qty: '2 cápsulas', period: 'Almoço',
        howTo: 'Tomar 2 cápsulas com a refeição principal (almoço), preferencialmente acompanhadas de azeite ou abacate. Conservar refrigerado após aberto.',
        objective: 'Modular processo inflamatório sistêmico (PCR-us 3,4 mg/L) e elevar o índice ômega-3 acima de 8% — patamar protetivo cardiovascular.',
        shop: 'https://blife.life/loja/omega3-tg',
        bio: ['Índice ômega-3', 'Apo B', 'PCR ultrassensível', 'Triglicérides', 'HDL'],
      },
      {
        name: 'Magnésio Bisglicinato 400mg', dose: '400mg de magnésio elementar', qty: '1 cápsula', period: 'Noite',
        howTo: 'Tomar 1 cápsula 60 minutos antes de dormir, longe da última refeição. Combina bem com chá de camomila.',
        objective: 'Melhorar arquitetura do sono profundo (atualmente 47 min/noite, meta >90 min) e auxiliar no relaxamento muscular pós-treino.',
        shop: 'https://blife.life/loja/magnesio-bisglicinato',
        bio: ['Magnésio eritrocitário', 'HRV noturno', 'Cortisol noturno'],
      },
    ],
    estilo: {
      frase: 'Para melhorar sua energia, foque o ciclo nesta combinação durante 6 meses.',
      blocks: [
        {
          id: 'alimentacao', icon: 'bowl', title: 'Alimentação · Nutrição anti-inflamatória', badge: 'Diária · 3 ações',
          kv: [
            { k: 'Distribuição de macros', v: 'Carboidratos 40% · Proteínas 30% · Gorduras boas 30%' },
            { k: 'Hidratação', v: '2,5L/dia · eletrólitos nos dias de treino' },
          ],
          direcionamentos: '<ul><li>Acrescente fontes de ômega-3 no almoço (sardinha, salmão)</li><li>Reduza ultra-processados, açúcares simples e álcool</li><li>Fermentados a cada refeição: kombucha, kefir, miso, pickles</li></ul>',
          recomendados: ['Açaí', 'Salmão', 'Brócolis', 'Linhaça', 'Chá-verde', 'Folhas verdes', 'Abacate', 'Castanhas'],
          evite: ['Refrigerante', 'Embutidos', 'Frituras', 'Açúcar refinado', 'Margarina', 'Ultra-processados'],
        },
        {
          id: 'atividade', icon: 'activity', title: 'Atividade Física', badge: 'Meta semanal',
          direcionamentos: '<ul><li>Seg/Qua/Sex — Força funcional (45 min)</li><li>Ter/Qui — Beach tennis</li><li>Sáb — Trilha leve</li></ul>',
          bio: ['VO2 máx', 'HRV', 'FC repouso', 'Massa magra', 'Glicemia jejum', 'Lactato'],
        },
        {
          id: 'sono', icon: 'sleep', title: 'Sono', badge: '',
          direcionamentos: '<ul><li>Sem telas após as 21h</li><li>Quarto entre 18–20°C</li><li>Higiene de sono: rotina fixa por 30 dias</li></ul>',
          bio: ['Melatonina', 'Cortisol noturno', 'HRV noturno', 'TSH', 'Ferritina'],
        },
        {
          id: 'stress', icon: 'heart', title: 'Stress & Bem-estar emocional', badge: '',
          direcionamentos: '<ul><li>Respiração 4-7-8 antes de dormir</li><li>10 min de meditação ao acordar</li><li>Pausas ativas a cada 90 min de trabalho</li></ul>',
          bio: ['Cortisol salivar', 'HRV', 'DHEA-S', 'Melatonina', 'PCR ultrassensível'],
        },
      ],
    },
    recomendacoes: {
      coachName: 'Pedro Costa',
      mensagem:
        '<p>Olá Fabrizio! Olhei seu exame com calma — o que mais me chamou atenção foi a <strong>ferritina caída (24 ng/mL)</strong> e a <strong>vitamina D abaixo do ideal (22 ng/mL)</strong>. Esses dois sozinhos já explicam boa parte da fadiga das 16h que você descreveu. A boa notícia é que dá pra reverter sem fórmula mágica, com consistência.</p>' +
        '<p>Meu plano é simples: <strong>tirar do papel uma semana de cada vez</strong>. Vou te mandar 1 mensagem no domingo à noite com as 3 prioridades da semana, e a gente ajusta no chat conforme você for testando.</p>' +
        '<p>Na 4ª semana já tem uma ressonância da sua adesão aqui no app e a gente vê se sobe a intensidade do treino ou se mantém leve mais um pouco. Conta comigo nessa.</p>',
      motivacao:
        '<p>Voltar a correr a Maratona do Rio em 2027. Acompanhar os filhos (Théo, 8 e Olívia, 5) nas trilhas de fim de semana sem fadiga.</p>',
      compromisso: '“Vou treinar 4x na semana antes das 7h.”',
    },
    proximos: {
      exames: [
        { date: 'Jun 2026', type: 'Imagem abdominal',         title: 'Ultrassonografia abdominal',              note: 'Avaliar esteatose hepática' },
        { date: 'Jun 2026', type: 'Bioquímico complementar',  title: 'Teste complementar a colesterol total',   note: 'Reavaliação 90 dias após início da suplementação' },
        { date: 'Jul 2026', type: 'Genético',                 title: 'Investigar polimorfismo genético MTHFR',  note: 'Indicar Genera, Ciera ou Mendelics' },
        { date: 'Jun 2026', type: 'Endócrino',                title: 'Teste Quantose hormone curve insulina',   note: 'Avaliar resistência periférica' },
      ],
      acompanha: [
        { name: 'Perfil lipídico completo', tag: '90 dias',  note: 'Apo B / HDL — checar tendência' },
        { name: 'Homocisteína',             tag: '90 dias',  note: 'Após suplementação de B-complex' },
        { name: '25-OH Vitamina D',         tag: '90 dias',  note: 'Confirmar reposição' },
        { name: 'Magnésio eritrocitário',   tag: '6 meses',  note: 'Manter ótimo' },
      ],
    },
    observacoes: {
      texto: '<p>O plano apresentado tem caráter exclusivamente informativo e deve ser interpretado em contexto de avaliação clínica integrada. Em caso de efeitos adversos ou dúvidas, entre em contato com a equipe B-Life antes de descontinuar qualquer terapêutica.</p>',
    },
  },
};

// ============================================================
// TEMPLATE_PLAN — clinical starting template the doctor edits on
// top of. Every chapter is filled with patient-neutral, ready-to-
// adapt content (drawn from the B-Life longevity check-up format).
// Only the patient name + date are blank; the doctor fills those.
// Loaded via the "Modelo" button.
// ============================================================
const TEMPLATE_PLAN = {
  id: '__template__',
  createdAt: 0, updatedAt: 0,
  patient: { name: '', date: '', sex: '', age: '' },          // ← intentionally blank
  doctor:  { name: 'Dra Joana Costa', role: 'Medicina de longevidade', license: 'CRM' },
  savedChapters: {},
  chapters: {
    carta: {
      mensagem:
        '<p>Revisei com atenção todos os seus exames, marcadores e hábitos. Este plano reúne as prioridades do ciclo e o caminho que vamos percorrer juntos nos próximos 90 dias.</p>' +
        '<p>Cada recomendação aqui tem um porquê — e está conectada a um marcador que vamos acompanhar. Comece pelo que for mais simples de sustentar: consistência vale mais do que intensidade.</p>',
    },
    objetivos: {
      items: [
        { id: 1, text: 'Longevidade e envelhecimento saudável' },
        { id: 2, text: 'Saúde metabólica e composição corporal' },
        { id: 3, text: 'Energia, sono e performance cognitiva' },
      ],
      statement: '<p style="font-style:italic">"Descreva aqui, nas palavras do paciente, o que ele mais quer alcançar."</p>',
    },
    biomarcadores: {
      laudoData: '',
      comentario:
        '<p>Os marcadores abaixo concentram a atenção deste ciclo. Preencha os valores a partir do laudo mais recente; vamos reavaliar em 90 dias.</p>',
      focused: [
        { name: 'Apolipoproteína B',        category: 'Cardiovascular',           value: '', unit: 'mg/dL',  status: 'normal'  },
        { name: 'Homocisteína',             category: 'Metabolismo · metilação',  value: '', unit: 'µmol/L', status: 'atencao' },
        { name: 'HDL Colesterol',           category: 'Cardiovascular',           value: '', unit: 'mg/dL',  status: 'normal'  },
        { name: '25-OH Vitamina D',         category: 'Imunidade · ósseo',        value: '', unit: 'ng/mL',  status: 'normal'  },
        { name: 'Hemoglobina glicada (HbA1c)', category: 'Metabolismo',           value: '', unit: '%',      status: 'normal'  },
        { name: 'Ferritina',                category: 'Hematologia · energia',    value: '', unit: 'ng/mL',  status: 'normal'  },
      ],
    },
    recmedicas: {
      intro:
        '<p>O objetivo é otimizar o seu estado de saúde, abordando de forma personalizada as suas necessidades específicas. Cada alvo abaixo reúne a conduta clínica do ciclo.</p>',
      items: [
        { id: 1, target: 'Otimizar saúde cardiovascular',
          recommendation: '<ul><li>Otimizar homocisteína para 7–8 µmol/L com complexo B metilado, melhorando a metilação e a viscosidade sanguínea.</li><li>Manter boa ingestão de gorduras boas (azeite, abacate, oleaginosas) e índice de ômega-3 acima de 8%.</li><li>Elevar VO₂máx para faixas de alta performance.</li></ul>' },
        { id: 2, target: 'Saúde metabólica',
          recommendation: '<ul><li>Abordagem low-carb moderada e flexibilidade metabólica conforme o plano alimentar.</li><li>Caminhadas de 10 min após refeições maiores para reduzir picos de insulina.</li><li>Considerar monitor contínuo de glicose por 15 dias.</li><li>Gestão de stress — o cortisol é importante condutor de glicose no sangue.</li></ul>' },
        { id: 3, target: 'Monitoramento da tireóide',
          recommendation: '<ul><li>Reavaliar função e anticorpos tireoidianos em 6 meses.</li><li>Dieta anti-inflamatória para reduzir títulos de autoimunidade.</li><li>Atenção a toxinas alimentares e cosméticas que podem afetar a tireóide.</li></ul>' },
        { id: 4, target: 'Saúde intestinal',
          recommendation: '<ul><li>Enzimas digestivas às refeições e suporte com prebióticos (fibras, vegetais, fermentados).</li><li>Reavaliar na próxima consulta; persistindo sintomas, indicar análise de microbiota.</li></ul>' },
        { id: 5, target: 'Equilíbrio hormonal & detoxificação',
          recommendation: '<ul><li>Adaptógenos para regular o cortisol; sulforafano para metabolização de estrogênio.</li><li>Reduzir peixes de alto mercúrio; clorela diária e suporte de detox com NAC e ácido alfa-lipoico.</li></ul>' },
        { id: 6, target: 'Cognição & bem-estar mental',
          recommendation: '<ul><li>Sono acima de 6–7h por noite; respiração para aumentar o tônus parassimpático.</li><li>Treino de memória de trabalho e, se indicado, psicoterapia para resiliência emocional.</li></ul>' },
        { id: 7, target: 'Vitamina D & saúde óssea',
          recommendation: '<ul><li>Ajustar a dose de vitamina D conforme estação e nível sérico.</li><li>Em caso de CTX elevado, avaliar densitometria óssea pelo risco de fratura.</li></ul>' },
      ],
    },
    medicamentos: [
      {
        name: '(Exemplo) Montelucaste 10mg', dose: '1 comprimido', period: 'Noite', duration: '3 meses',
        howTo: 'Tomar 1 comprimido à noite, sempre no mesmo horário. Edite ou remova conforme o caso.',
        objective: 'Exemplo de prescrição. Substitua pelo medicamento, dose e objetivo clínico do paciente.',
        bio: ['IgE total'],
      },
    ],
    peptideos: [
      { name: '(Exemplo) BPC-157', dose: '10 mg · 0,1 mL', freq: 'Seg a sex · manhã' },
    ],
    suplementacao: [
      {
        name: 'Suporte de metilação', dose: 'Metilfolato 800mcg + Metilcobalamina 400mcg + P-5-P 25mg + TMG 1g', qty: '1 dose', period: 'Manhã', tomarCom: 'Café da manhã',
        howTo: 'Tomar ao café da manhã, por 3 meses.',
        objective: 'Otimizar a metilação e reduzir a homocisteína para a faixa de 7–8 µmol/L.',
        shop: '', bio: ['Homocisteína', 'Vitamina B12', 'Folato'],
      },
      {
        name: 'Sono, stress & cortisol', dose: 'Ashwagandha 450mg + Magnésio bisglicinato 300mg + Glicina 3g + Rhodiola 250mg', qty: '1 dose', period: 'Noite', tomarCom: 'Após o jantar',
        howTo: 'Rhodiola pela manhã; os demais após o jantar, por 3 meses.',
        objective: 'Melhorar a qualidade do sono, dar suporte ao stress e equilibrar a liberação de cortisol.',
        shop: '', bio: ['Cortisol noturno', 'HRV noturno'],
      },
      {
        name: 'Detox & metabolização', dose: 'NAC 600mg + Ácido alfa-lipoico 100mg + Clorela 1000mg + Extrato de brócolis 200mg', qty: '1 de cada', period: 'Manhã', tomarCom: 'Café da manhã',
        howTo: '1 de cada ao café da manhã; enzimas digestivas a cada refeição.',
        objective: 'Suportar as vias de detoxificação, a metabolização de estrogênio e a ligação ao mercúrio.',
        shop: '', bio: ['Mercúrio'],
      },
      {
        name: 'Suporte de minerais', dose: 'Zinco picolinato 50mg + Cobre 3mg', qty: '1 cápsula', period: 'Manhã', tomarCom: 'Pela manhã',
        howTo: 'Tomar pela manhã, por 3 meses.',
        objective: 'Suporte à membrana celular, produção hormonal, imunidade, pele e regulação do stress oxidativo.',
        shop: '', bio: ['Zinco', 'Cobre'],
      },
    ],
    estilo: {
      frase: 'Use a alimentação e a rotina como ferramentas terapêuticas: estabilidade metabólica, intestino e sono são a base do ciclo.',
      blocks: [
        {
          id: 'alimentacao', icon: 'bowl', title: 'Alimentação · Nutrição anti-inflamatória', badge: 'Base diária',
          kv: [
            { k: 'Calorias estimadas', v: '~2200–2400 kcal/dia · foco em perda de gordura e energia estável' },
            { k: 'Macros', v: 'Proteína ~140–160g · Gorduras ~80–95g · Carboidratos ~100–170g (low-carb moderado)' },
            { k: 'Fibras & hidratação', v: '>30g de fibra/dia · 2,5–3L de água/dia' },
            { k: 'Estrutura das refeições', v: 'Proteína em todas as refeições (20–45g) · caminhada de 10 min após as principais' },
          ],
          direcionamentos: '<ul><li>Proteína logo cedo para reduzir desejos no fim do dia</li><li>"Âncoras de saciedade": proteína + fibra + gordura boa em cada refeição</li><li>Introduzir fermentados gradualmente (kefir, chucrute, kimchi, iogurte natural)</li><li>Reduzir ultraprocessados, açúcares simples e álcool</li></ul>',
          recomendados: ['Sardinha', 'Salmão selvagem', 'Azeite extra virgem', 'Abacate', 'Brócolis', 'Folhas verdes', 'Frutas vermelhas', 'Chá-verde', 'Batata-doce', 'Quinoa'],
          evite: ['Refrigerante', 'Ultraprocessados', 'Açúcar refinado', 'Frituras', 'Embutidos', 'Excesso de álcool'],
        },
        {
          id: 'atividade', icon: 'activity', title: 'Atividade física · Força & mobilidade', badge: 'Meta semanal',
          direcionamentos: '<ul><li>Treino de força com amplitude controlada para ganhar estabilidade articular</li><li>Corrigir assimetrias de força e a mobilidade de tornozelo</li><li>Incluir condicionamento aeróbico para elevar o VO₂máx</li></ul>',
          bio: ['VO2 máx', 'HRV', 'Massa magra', 'Glicemia jejum'],
        },
        {
          id: 'sono', icon: 'sleep', title: 'Sono · Ritmo circadiano', badge: 'Higiene de sono',
          stat: { value: '—', unit: '', statusKind: 'warn', statusLabel: 'A medir' },
          direcionamentos: '<ul><li>Horário de acordar mais consistente (ex.: 8h30–9h)</li><li>Ritual de desligamento 60–90 min antes de dormir</li><li>Sem telas à noite; quarto entre 18–20°C</li><li>Luz solar pela manhã para regular o ritmo circadiano</li></ul>',
          bio: ['Melatonina', 'Cortisol noturno', 'HRV noturno', 'TSH'],
        },
        {
          id: 'stress', icon: 'heart', title: 'Bem-estar & gestão de stress', badge: 'Rotina diária',
          stat: { value: '—', unit: 'ms', statusKind: 'warn', statusLabel: 'A medir' },
          direcionamentos: '<ul><li>Respiração 4-7-8 e práticas para o tônus parassimpático</li><li>Meditação ao ar livre / exposição solar matinal</li><li>Práticas restaurativas: massagem, sauna, banhos quentes, mobilidade</li><li>Equilibrar eventos sociais com noites de recuperação</li></ul>',
          bio: ['Cortisol salivar', 'HRV', 'DHEA-S'],
        },
      ],
    },
    recomendacoes: {
      coachName: 'Health Coach',
      mensagem:
        '<p>Olá! Revisei seu plano com calma. Vamos tirar do papel uma semana de cada vez — escolho com você as 3 prioridades de cada semana e ajustamos no chat conforme você for testando.</p>' +
        '<p>Na 4ª semana revemos sua adesão e decidimos se subimos a intensidade. Conte comigo nessa.</p>',
      motivacao:
        '<p>Construir uma vida longa, saudável e funcional, com energia e qualidade de vida — alinhando saúde e hábitos ao seu propósito pessoal e profissional.</p>',
      compromisso: '"Meu compromisso para este ciclo: ____."',
    },
    proximos: {
      exames: [
        { date: 'Jun 2026', type: 'Microbioma', title: 'Teste de saúde intestinal',  note: 'A agendar — investigar sintomas digestivos' },
        { date: 'Dez 2026', type: 'Imagem',     title: 'Densitometria óssea',         note: 'Avaliar risco de fratura (CTX elevado)' },
        { date: 'Set 2026', type: 'Consulta',   title: 'Consulta de nutrição',        note: 'Nutricionista — plano alimentar detalhado' },
        { date: 'Set 2026', type: 'Consulta',   title: 'Consulta de longevidade',     note: 'Reavaliação do ciclo com a médica responsável' },
      ],
      acompanha: [
        { name: 'Homocisteína',              tag: '90 dias', note: 'Após complexo B metilado' },
        { name: 'Perfil lipídico + Apo B',   tag: '90 dias', note: 'Checar tendência cardiovascular' },
        { name: '25-OH Vitamina D',          tag: '90 dias', note: 'Ajuste sazonal de dose' },
        { name: 'Hemoglobina glicada (HbA1c)', tag: '6 meses', note: 'Saúde metabólica' },
      ],
    },
    observacoes: {
      texto: '<p>O plano apresentado tem caráter exclusivamente informativo e deve ser interpretado em contexto de avaliação clínica integrada. Em caso de efeitos adversos ou dúvidas, entre em contato com a equipe B-Life antes de descontinuar qualquer terapêutica.</p>',
    },
  },
};

// ─── localStorage IO ───────────────────────────────────────────

function _readJSON(key, fallback) {
  try { return JSON.parse(localStorage.getItem(key) || JSON.stringify(fallback)); }
  catch (e) { return fallback; }
}
function _writeJSON(key, value) {
  try { localStorage.setItem(key, JSON.stringify(value)); }
  catch (e) { console.warn('plan-store: quota error', e); }
}
function listSavedPlans() { return _readJSON(INDEX_KEY, []); }
function _entryFor(plan) {
  return {
    id: plan.id,
    patientName: (plan.patient && plan.patient.name) || 'Paciente sem nome',
    doctorName:  (plan.doctor  && plan.doctor.name)  || '',
    planDate:    (plan.patient && plan.patient.date) || '',
    createdAt:   plan.createdAt,
    updatedAt:   plan.updatedAt,
  };
}
function _writeIndex(plan) {
  const cur = listSavedPlans().filter(e => e.id !== plan.id);
  cur.unshift(_entryFor(plan));
  _writeJSON(INDEX_KEY, cur);
}
function _saveRaw(plan) {
  _writeJSON(STORAGE_PREFIX + plan.id, plan);
  _writeIndex(plan);
  _writeJSON(CURRENT_KEY, plan.id);
}
function _loadRaw(id) { return _readJSON(STORAGE_PREFIX + id, null); }
function _deleteRaw(id) {
  try { localStorage.removeItem(STORAGE_PREFIX + id); } catch (e) {}
  _writeJSON(INDEX_KEY, listSavedPlans().filter(e => e.id !== id));
  const cur = _readJSON(CURRENT_KEY, null);
  if (cur === id) try { localStorage.removeItem(CURRENT_KEY); } catch (e) {}
}

// ─── Provider + hooks ─────────────────────────────────────────

const PlanContext = React.createContext(null);

function PlanProvider({ children }) {
  // First load: rehydrate the last edited plan, else start blank.
  const [plan, setPlan] = React.useState(() => {
    const id = _readJSON(CURRENT_KEY, null);
    if (id) {
      const loaded = _loadRaw(id);
      if (loaded) return loaded;
    }
    return blankPlan();
  });

  // Auto-save (debounced) on every change. Bump updatedAt at save time.
  const lastSavedRef = React.useRef(0);
  React.useEffect(() => {
    const t = setTimeout(() => {
      const stamped = { ...plan, updatedAt: Date.now() };
      _saveRaw(stamped);
      lastSavedRef.current = stamped.updatedAt;
    }, 400);
    return () => clearTimeout(t);
  }, [plan]);

  const setPatient = React.useCallback((next) => {
    setPlan(p => ({ ...p, patient: typeof next === 'function' ? next(p.patient) : { ...p.patient, ...next } }));
  }, []);
  const setDoctor = React.useCallback((next) => {
    setPlan(p => ({ ...p, doctor: typeof next === 'function' ? next(p.doctor) : { ...p.doctor, ...next } }));
  }, []);
  const setLang = React.useCallback((code) => {
    setPlan(p => ({ ...p, lang: code }));
  }, []);
  const setChapter = React.useCallback((id, next) => {
    setPlan(p => {
      const prev = p.chapters[id];
      const fresh = typeof next === 'function' ? next(prev) : next;
      return { ...p, chapters: { ...p.chapters, [id]: fresh } };
    });
  }, []);
  const saveChapter = React.useCallback((id) => {
    setPlan(p => ({
      ...p,
      savedChapters: { ...(p.savedChapters || {}), [id]: Date.now() },
    }));
  }, []);

  const startNew = React.useCallback(() => setPlan(blankPlan()), []);
  const startFromSample = React.useCallback(() => {
    const fresh = JSON.parse(JSON.stringify(SAMPLE_PLAN));
    fresh.id = _uid();
    fresh.createdAt = Date.now();
    fresh.updatedAt = Date.now();
    setPlan(fresh);
  }, []);
  const startFromTemplate = React.useCallback(() => {
    // "Modelo" = exemplo completo do paciente Fabrizio Santos, com todas as
    // seções preenchidas (a médica edita por cima).
    const fresh = JSON.parse(JSON.stringify(SAMPLE_PLAN));
    fresh.id = _uid();
    fresh.createdAt = Date.now();
    fresh.updatedAt = Date.now();
    setPlan(fresh);
  }, []);
  const openPlan = React.useCallback((id) => {
    const loaded = _loadRaw(id);
    if (loaded) setPlan(loaded);
  }, []);
  // Import an external plan object (e.g. a .json handed off by another
  // professional). Gets a fresh id so it lives as its own plan in history.
  const loadExternalPlan = React.useCallback((obj) => {
    const fresh = JSON.parse(JSON.stringify(obj || {}));
    fresh.id = _uid();
    fresh.createdAt = Date.now();
    fresh.updatedAt = Date.now();
    fresh.patient = fresh.patient || { name: '', date: '' };
    fresh.doctor = fresh.doctor || { name: '' };
    fresh.chapters = fresh.chapters || {};
    fresh.savedChapters = fresh.savedChapters || {};
    setPlan(fresh);
    return fresh;
  }, []);
  const deletePlan = React.useCallback((id) => {
    _deleteRaw(id);
    setPlan(p => p.id === id ? blankPlan() : p);
  }, []);

  // Set global plan language synchronously so fl()/labels read it during render.
  if (typeof window !== 'undefined') window.__planLang = (plan && plan.lang) || 'pt-BR';

  const value = React.useMemo(() => ({
    plan, setPlan, setPatient, setDoctor, setLang, setChapter, saveChapter,
    startNew, startFromSample, startFromTemplate, openPlan, deletePlan, loadExternalPlan,
  }), [plan, setPatient, setDoctor, setLang, setChapter, saveChapter, startNew, startFromSample, startFromTemplate, openPlan, deletePlan, loadExternalPlan]);

  return <PlanContext.Provider value={value}>{children}</PlanContext.Provider>;
}

function usePlan() { return React.useContext(PlanContext); }

// useChapter — slice of plan.chapters[id]. Lazy-defaults; first set materializes.
function useChapter(id, defaults) {
  const { plan, setChapter } = usePlan();
  const stored = plan.chapters[id];
  const value  = stored !== undefined ? stored : defaults;
  const setValue = React.useCallback((next) => {
    setChapter(id, prev => {
      const base = prev !== undefined ? prev : defaults;
      return typeof next === 'function' ? next(base) : next;
    });
  // eslint-disable-next-line react-hooks/exhaustive-deps
  }, [id]);
  return [value, setValue];
}

// Compat hook so existing usePatient() callers keep working.
function usePatient() {
  const { plan, setPatient, setDoctor } = usePlan();
  return {
    patient: plan.patient,
    setPatient,
    doctor: plan.doctor,
    setDoctor,
  };
}

// Convenience: dispatch a toast from anywhere via custom event.
function blifeToast(message) {
  window.dispatchEvent(new CustomEvent('blife-toast', { detail: message }));
}

Object.assign(window, {
  PlanProvider, usePlan, useChapter, usePatient,
  listSavedPlans, blankPlan, SAMPLE_PLAN, TEMPLATE_PLAN, blifeToast,
});
