// LPR Platform — shared mock data (Mariana's case is the canonical example)

const LPR_PROTOCOL = {
  id: 'LPR-LR-1',
  name: 'LPR — Lifestyle Precision Reset',
  version: 'v1.4.2',
  status: 'Publicado',
  publishedAt: '2026-03-12',
  modules: ['LPR-DM2', 'LPR-Reganho', 'LPR-Adesão'],
};

// 8 domínios LPR
const LPR_DOMAINS = [
  { id: 'metabolic', label: 'Metabólico',         short: 'Metab',  icon: 'Activity' },
  { id: 'gut',       label: 'Intestinal',         short: 'Intest', icon: 'Apple' },
  { id: 'mito',      label: 'Mitocondrial',       short: 'Mito',   icon: 'Zap' },
  { id: 'inflam',    label: 'Inflamatório',       short: 'Inflam', icon: 'Flame' },
  { id: 'hormone',   label: 'Neuroendócrino',     short: 'Hormon', icon: 'Brain' },
  { id: 'circadian', label: 'Circadiano/Sono',    short: 'Circad', icon: 'Moon2' },
  { id: 'body',      label: 'Composição/Movim.',  short: 'Corpo',  icon: 'Dumbbell' },
  { id: 'behavior',  label: 'Comportamental',     short: 'Comport',icon: 'Target' },
];

// Mariana — paciente principal
const MARIANA = {
  id: 'p-0421',
  name: 'Mariana Corrêa',
  age: 44, sex: 'F',
  mrn: 'MRN 04219',
  protocol: 'LPR — Lifestyle Precision Reset',
  protocolShort: 'LPR-LR-1 v1.4.2',
  cycle: 'Ciclo 2 · Dia 18 / 60',
  phase: 'Fase 1 — Reset Circadiano',
  startedAt: '2026-04-15',
  lastCheckin: 'há 12h',
  lastCheckinFull: '02/05/2026 · 07:42',
  doctor: 'Dr. Helena Marques',
  clinic: 'Longevium Clínica Médica',
  scoreGlobal: 58,            // 0-100
  scoreGlobalDelta: +4,       // semana atual vs anterior
  scoreTrend: [42, 44, 41, 46, 49, 52, 55, 54, 56, 58], // últimas 10 semanas
  semaphore: 'yellow',
  // Por domínio:
  domains: {
    metabolic: {
      score: 58, semaphore: 'yellow', delta: +3,
      drivers: ['Variabilidade glicêmica (CGM)', 'HOMA-IR alterado', 'Insulina jejum 14 µUI/mL'],
      lastTrend: [50, 49, 52, 54, 56, 58],
    },
    gut: {
      score: 54, semaphore: 'yellow', delta: +2,
      drivers: ['Distensão pós-prandial recorrente', 'Constipação 2-3x/semana', 'GI Symptom Score 11/30'],
      lastTrend: [48, 49, 50, 52, 53, 54],
    },
    mito: {
      score: 52, semaphore: 'yellow', delta: +1,
      drivers: ['VO₂ estimado baixo', 'HRV reduzido (rMSSD 28ms)', 'Fadiga subjetiva 6/10'],
      lastTrend: [50, 51, 50, 51, 52, 52],
    },
    inflam: {
      score: 60, semaphore: 'yellow', delta: 0,
      drivers: ['hsCRP 2.8 mg/L', 'Ferritina limítrofe (24 ng/mL)'],
      lastTrend: [58, 59, 58, 60, 60, 60],
    },
    hormone: {
      score: 56, semaphore: 'yellow', delta: -1,
      drivers: ['Cortisol AM 22 µg/dL (alto)', 'Sintomas de perimenopausa', 'TSH 3.4 mUI/L'],
      lastTrend: [60, 58, 57, 56, 56, 56],
    },
    circadian: {
      score: 38, semaphore: 'red', delta: +6,
      drivers: ['Início do sono ~01:30', 'Jet lag social 2h08', 'Acorda cansada 5/7 dias'],
      lastTrend: [22, 24, 28, 32, 36, 38],
    },
    body: {
      score: 55, semaphore: 'yellow', delta: +2,
      drivers: ['Gordura visceral 9 (alta)', 'Massa magra perdendo (-0.4kg/mês)', 'Passos médios 4.2k'],
      lastTrend: [50, 51, 52, 53, 54, 55],
    },
    behavior: {
      score: 41, semaphore: 'red', delta: +8,
      drivers: ['Adesão 58% (semana)', 'Alimentação emocional 3 episódios', 'Rotina inconsistente'],
      lastTrend: [25, 28, 30, 34, 38, 41],
    },
  },
  // Meta-classificação LPR
  classification: {
    leader: 'circadian',
    amplifier: 'behavior',
    saboteur: 'behavior',
    pattern: 'Desregulação circadiana como driver metabólico',
  },
  riskModules: [
    { id: 'LPR-DM2',     label: 'LPR–DM2',           level: 'moderate' },
    { id: 'LPR-Reganho', label: 'LPR–Reganho de peso', level: 'high' },
    { id: 'LPR-Adesão',  label: 'LPR–Adesão',         level: 'critical' },
  ],
  // Próxima ação sugerida pelo sistema
  nextAction: {
    title: 'Continuar Fase 1 — Reset Circadiano',
    rationale: 'Padrão emergente: sono → glicemia → adesão. Estabilizar circadiano antes de qualquer intervenção metabólica.',
    blocks: [
      { name: 'GLP-1 (semaglutida 0.25mg)', decision: 'Block', reason: 'Adesão crítica + comportamento instável' },
    ],
    activates: [
      'Rotina de sono estruturada (janela 23:00–06:30)',
      'Exposição solar 10 min na primeira hora',
      'Janela alimentar 11:00–20:00',
    ],
  },
};

// Outros pacientes para a lista (nomes brasileiros plausíveis)
const PATIENTS = [
  MARIANA,
  {
    id: 'p-0387', name: 'Rafael Toledo', age: 52, sex: 'M', mrn: 'MRN 03872',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 1 · Dia 42/60', scoreGlobal: 72, scoreGlobalDelta: +2,
    semaphore: 'yellow', lastCheckin: 'há 4h', lastCheckinFull: '03/05/2026 · 06:10',
    redDomains: ['behavior'], yellowDomains: ['metabolic', 'body', 'mito'], greenDomains: ['gut','inflam','hormone','circadian'],
    alerts: 1, examsStatus: 'pending', adherence: 76, safety: 'allow',
    scoreTrend: [60, 64, 67, 70, 71, 72],
  },
  {
    id: 'p-0512', name: 'Beatriz Lima', age: 38, sex: 'F', mrn: 'MRN 05123',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 3 · Dia 9/60', scoreGlobal: 81, scoreGlobalDelta: +3,
    semaphore: 'green', lastCheckin: 'há 6h', lastCheckinFull: '03/05/2026 · 05:40',
    redDomains: [], yellowDomains: ['hormone'], greenDomains: ['metabolic','gut','mito','inflam','circadian','body','behavior'],
    alerts: 0, examsStatus: 'validated', adherence: 92, safety: 'allow',
    scoreTrend: [72, 74, 76, 78, 80, 81],
  },
  {
    id: 'p-0299', name: 'Eduardo Pacheco', age: 61, sex: 'M', mrn: 'MRN 02991',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 1 · Dia 22/60', scoreGlobal: 44, scoreGlobalDelta: -2,
    semaphore: 'red', lastCheckin: 'há 2d', lastCheckinFull: '01/05/2026 · 21:18',
    redDomains: ['metabolic','inflam'], yellowDomains: ['gut','mito','hormone','circadian','body','behavior'], greenDomains: [],
    alerts: 4, examsStatus: 'lowConfidence', adherence: 41, safety: 'block',
    scoreTrend: [50, 49, 48, 47, 45, 44],
  },
  {
    id: 'p-0445', name: 'Luana Ferreira', age: 29, sex: 'F', mrn: 'MRN 04451',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 1 · Dia 5/60', scoreGlobal: 62, scoreGlobalDelta: +1,
    semaphore: 'yellow', lastCheckin: 'há 18h', lastCheckinFull: '02/05/2026 · 02:30',
    redDomains: [], yellowDomains: ['metabolic','behavior'], greenDomains: ['gut','mito','inflam','hormone','circadian','body'],
    alerts: 1, examsStatus: 'pending', adherence: 84, safety: 'caution',
    scoreTrend: [58, 59, 60, 60, 61, 62],
  },
  {
    id: 'p-0156', name: 'Carlos Andrade', age: 57, sex: 'M', mrn: 'MRN 01561',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 2 · Dia 33/60', scoreGlobal: 67, scoreGlobalDelta: +5,
    semaphore: 'yellow', lastCheckin: 'há 8h', lastCheckinFull: '03/05/2026 · 03:50',
    redDomains: ['inflam'], yellowDomains: ['metabolic','body'], greenDomains: ['gut','mito','hormone','circadian','behavior'],
    alerts: 2, examsStatus: 'validated', adherence: 88, safety: 'modify',
    scoreTrend: [60, 62, 63, 64, 66, 67],
  },
  {
    id: 'p-0703', name: 'Sofia Mendonça', age: 35, sex: 'F', mrn: 'MRN 07033',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 1 · Dia 12/60', scoreGlobal: 53, scoreGlobalDelta: +1,
    semaphore: 'yellow', lastCheckin: 'há 1d', lastCheckinFull: '02/05/2026 · 13:00',
    redDomains: ['behavior'], yellowDomains: ['metabolic','gut','hormone','circadian'], greenDomains: ['mito','inflam','body'],
    alerts: 2, examsStatus: 'pending', adherence: 62, safety: 'allow',
    scoreTrend: [49, 50, 51, 51, 52, 53],
  },
  {
    id: 'p-0810', name: 'Pedro Vasconcelos', age: 48, sex: 'M', mrn: 'MRN 08109',
    protocol: 'LPR-LR-1 v1.4.2', protocolShort: 'LPR-LR-1',
    cycle: 'Ciclo 2 · Dia 51/60', scoreGlobal: 76, scoreGlobalDelta: +4,
    semaphore: 'green', lastCheckin: 'há 3h', lastCheckinFull: '03/05/2026 · 09:12',
    redDomains: [], yellowDomains: ['hormone','body'], greenDomains: ['metabolic','gut','mito','inflam','circadian','behavior'],
    alerts: 0, examsStatus: 'validated', adherence: 95, safety: 'allow',
    scoreTrend: [68, 70, 71, 73, 75, 76],
  },
];

// Resumo MARIANA para a lista (sintetizado)
PATIENTS[0].redDomains = ['circadian','behavior'];
PATIENTS[0].yellowDomains = ['metabolic','gut','mito','inflam','hormone','body'];
PATIENTS[0].greenDomains = [];
PATIENTS[0].alerts = 3;
PATIENTS[0].examsStatus = 'pending';
PATIENTS[0].adherence = 58;
PATIENTS[0].safety = 'block';

// Exames laboratoriais (Mariana, último painel)
const EXAMS_PANEL = [
  { name: 'Glicemia jejum',     value: 98,   unit: 'mg/dL',  refLab: '70–99',     refProto: '70–95',  status: 'borderline', domain: 'metabolic' },
  { name: 'Insulina jejum',     value: 14,   unit: 'µUI/mL', refLab: '2.6–24.9',  refProto: '<8',     status: 'high',       domain: 'metabolic' },
  { name: 'HOMA-IR',            value: 3.4,  unit: '',       refLab: '<2.7',      refProto: '<1.8',   status: 'high',       domain: 'metabolic' },
  { name: 'HbA1c',              value: 5.6,  unit: '%',      refLab: '<5.7',      refProto: '<5.4',   status: 'borderline', domain: 'metabolic' },
  { name: 'hsCRP',              value: 2.8,  unit: 'mg/L',   refLab: '<3.0',      refProto: '<1.0',   status: 'high',       domain: 'inflam' },
  { name: 'Ferritina',          value: 24,   unit: 'ng/mL',  refLab: '13–150',    refProto: '50–150', status: 'low',        domain: 'inflam' },
  { name: '25-OH Vitamina D',   value: 28,   unit: 'ng/mL',  refLab: '30–100',    refProto: '40–60',  status: 'low',        domain: 'mito' },
  { name: 'Vitamina B12',       value: 412,  unit: 'pg/mL',  refLab: '200–900',   refProto: '500–900',status: 'borderline', domain: 'mito' },
  { name: 'TSH',                value: 3.4,  unit: 'mUI/L',  refLab: '0.4–4.5',   refProto: '<2.5',   status: 'high',       domain: 'hormone' },
  { name: 'T4 livre',           value: 1.1,  unit: 'ng/dL',  refLab: '0.9–1.7',   refProto: '1.1–1.5',status: 'normal',     domain: 'hormone' },
  { name: 'Cortisol manhã',     value: 22,   unit: 'µg/dL',  refLab: '6.7–22.6',  refProto: '8–18',   status: 'high',       domain: 'hormone' },
  { name: 'Triglicerídeos',     value: 142,  unit: 'mg/dL',  refLab: '<150',      refProto: '<100',   status: 'borderline', domain: 'metabolic' },
  { name: 'HDL',                value: 48,   unit: 'mg/dL',  refLab: '>40',       refProto: '>55',    status: 'low',        domain: 'metabolic' },
  { name: 'LDL',                value: 128,  unit: 'mg/dL',  refLab: '<130',      refProto: '<100',   status: 'borderline', domain: 'metabolic' },
  { name: 'GGT',                value: 36,   unit: 'U/L',    refLab: '<38',       refProto: '<25',    status: 'borderline', domain: 'metabolic' },
];

// Lista de uploads de exames
const EXAM_UPLOADS = [
  { id: 'u1', file: 'Painel_metabolico_Apr2026.pdf', size: '342 KB', uploadedAt: '02/05/2026 · 11:08', status: 'validated', markers: 8, lab: 'Fleury', confidence: 0.98 },
  { id: 'u2', file: 'Hormonal_completo_Apr2026.pdf', size: '298 KB', uploadedAt: '02/05/2026 · 11:08', status: 'validated', markers: 6, lab: 'Fleury', confidence: 0.96 },
  { id: 'u3', file: 'CGM_export_28d.csv',            size: '1.2 MB', uploadedAt: '01/05/2026 · 22:14', status: 'extracted', markers: 1, lab: 'Freestyle Libre', confidence: 0.99 },
  { id: 'u4', file: 'Tireoide_painel.pdf',            size: '210 KB', uploadedAt: '30/04/2026 · 09:42', status: 'lowConfidence', markers: 2, lab: 'Sabin', confidence: 0.62 },
  { id: 'u5', file: 'Composicao_corporal_dexa.pdf',   size: '1.8 MB', uploadedAt: '28/04/2026 · 14:30', status: 'pending',    markers: 0, lab: 'Bioscan', confidence: null },
];

// Questionários
const QUESTIONNAIRES = [
  { id: 'lpr-onb',       name: 'LPR Onboarding',           freq: 'Início',        last: '15/04/2026', score: 42, max: 100, domains: ['metabolic','behavior','circadian','hormone'] },
  { id: 'lpr-daily',     name: 'LPR Daily',                freq: 'Diário',        last: 'hoje',       score: 6.2, max: 10,  domains: ['behavior','circadian','mito'] },
  { id: 'gi-sym',        name: 'GI Symptom Score',         freq: 'Semanal',       last: '28/04/2026', score: 11, max: 30,  domains: ['gut'] },
  { id: 'psqi',          name: 'PSQI (Pittsburgh)',        freq: '4 semanas',     last: '20/04/2026', score: 11, max: 21,  domains: ['circadian'] },
  { id: 'phq-9',         name: 'PHQ-9',                    freq: '4 semanas',     last: '20/04/2026', score: 8,  max: 27,  domains: ['behavior','hormone'] },
  { id: 'gad-7',         name: 'GAD-7',                    freq: '4 semanas',     last: '20/04/2026', score: 7,  max: 21,  domains: ['behavior','hormone'] },
  { id: 'who5',          name: 'WHO-5 Bem-estar',          freq: '2 semanas',     last: '22/04/2026', score: 56, max: 100, domains: ['behavior'] },
  { id: 'meno-q',        name: 'Menopause Rating Scale',   freq: '4 semanas',     last: '20/04/2026', score: 18, max: 44,  domains: ['hormone'] },
  { id: 'pss-10',        name: 'PSS-10 (Estresse)',        freq: '2 semanas',     last: 'pendente',  score: null, max: 40,  domains: ['hormone','behavior'] },
  { id: 'food-freq',     name: 'Frequência alimentar',     freq: 'Mensal',        last: '15/04/2026', score: null, max: null, domains: ['metabolic','gut'] },
];

// Alertas
const ALERTS = [
  { id: 'a1', sev: 'high',   for: 'doctor',  domain: 'behavior',  patient: 'Mariana Corrêa',  text: 'Adesão semanal 58% — abaixo do limiar do protocolo (70%)', when: 'há 12h', kind: 'trend' },
  { id: 'a2', sev: 'high',   for: 'doctor',  domain: 'circadian', patient: 'Mariana Corrêa',  text: 'Padrão emergente: piora progressiva do sono + variabilidade glicêmica', when: 'há 1d', kind: 'pattern' },
  { id: 'a3', sev: 'high',   for: 'doctor',  domain: null,        patient: 'Mariana Corrêa',  text: 'Safety Engine: GLP-1 BLOQUEADO — adesão crítica + comportamento instável', when: 'há 2d', kind: 'safety' },
  { id: 'a4', sev: 'medium', for: 'doctor',  domain: 'hormone',   patient: 'Mariana Corrêa',  text: 'Cortisol AM 22 µg/dL acima da referência do protocolo (8–18)', when: 'há 3d', kind: 'lab' },
  { id: 'a5', sev: 'medium', for: 'doctor',  domain: null,        patient: 'Eduardo Pacheco', text: 'Exame Tireoide_painel.pdf com baixa confiança de extração (62%)', when: 'há 5h', kind: 'data' },
  { id: 'a6', sev: 'high',   for: 'doctor',  domain: 'metabolic', patient: 'Eduardo Pacheco', text: 'Glicemia jejum 142 mg/dL — fora do esperado para o ciclo', when: 'há 8h', kind: 'lab' },
  { id: 'a7', sev: 'low',    for: 'doctor',  domain: null,        patient: 'Sofia Mendonça',  text: 'Dados faltantes: PSS-10 não respondido há 14 dias', when: 'há 1d', kind: 'data' },
  { id: 'a8', sev: 'medium', for: 'patient', domain: 'circadian', patient: 'Mariana Corrêa',  text: 'Você dormiu menos de 6h em 4 dos últimos 7 dias', when: 'hoje', kind: 'trend' },
  { id: 'a9', sev: 'low',    for: 'patient', domain: 'behavior',  patient: 'Mariana Corrêa',  text: 'Lembrete: questionário PSS-10 disponível', when: 'hoje', kind: 'data' },
];

// Decisões do Safety Engine (histórico para Mariana)
const SAFETY_HISTORY = [
  { id: 'sd1', date: '01/05/2026', intervention: 'GLP-1 (semaglutida 0.25mg)', decision: 'Block', by: 'Sistema', reason: 'Adesão crítica + comportamento instável', rules: ['R-014', 'R-022'] },
  { id: 'sd2', date: '24/04/2026', intervention: 'Treino de força 3x/sem', decision: 'Modify', by: 'Sistema', reason: 'Massa magra perdendo — reduzir volume, prioridade técnica', rules: ['R-031'] },
  { id: 'sd3', date: '18/04/2026', intervention: 'Jejum intermitente 16:8', decision: 'Postpone', by: 'Sistema', reason: 'Cortisol AM elevado + sono instável', rules: ['R-008', 'R-019'] },
  { id: 'sd4', date: '15/04/2026', intervention: 'Reset Circadiano', decision: 'Allow', by: 'Sistema', reason: 'Driver primário identificado', rules: ['R-001'] },
];

// Regras do Safety Engine (mocks)
const SAFETY_RULES = [
  { id: 'R-001', name: 'Permitir reset circadiano sempre', sev: 'low', enabled: true,
    cond: 'IF protocolo == LPR-LR-1', then: 'Allow Reset Circadiano',
    affectedDomains: ['circadian'], requireReview: false, allowOverride: true },
  { id: 'R-008', name: 'Postergar jejum se cortisol alto', sev: 'medium', enabled: true,
    cond: 'IF cortisol_am > 18 AND psqi >= 8', then: 'Postpone Jejum Intermitente',
    affectedDomains: ['hormone','circadian'], requireReview: false, allowOverride: true },
  { id: 'R-014', name: 'Bloquear GLP-1 se adesão crítica', sev: 'high', enabled: true,
    cond: 'IF adesao_semanal < 60% AND comportamental == red', then: 'Block GLP-1',
    affectedDomains: ['behavior','metabolic'], requireReview: true, allowOverride: true },
  { id: 'R-019', name: 'Cautela em restrição calórica com sono ruim', sev: 'medium', enabled: true,
    cond: 'IF psqi >= 10 AND deficit_calorico > 500', then: 'Caution Dieta Restritiva',
    affectedDomains: ['circadian','metabolic','behavior'], requireReview: false, allowOverride: true },
  { id: 'R-022', name: 'Revisão médica obrigatória — comportamento crítico', sev: 'high', enabled: true,
    cond: 'IF risco_LPR-Adesao == critical', then: 'Require Medical Review',
    affectedDomains: ['behavior'], requireReview: true, allowOverride: false },
  { id: 'R-031', name: 'Modificar treino se massa magra cai', sev: 'medium', enabled: true,
    cond: 'IF delta_massa_magra < -0.3 kg/mes', then: 'Modify Treino Intenso',
    affectedDomains: ['body','mito'], requireReview: false, allowOverride: true },
  { id: 'R-045', name: 'Bloquear restrição se ferritina baixa', sev: 'high', enabled: true,
    cond: 'IF ferritina < 30 AND dieta_restritiva == true', then: 'Block Dieta Restritiva',
    affectedDomains: ['inflam','metabolic'], requireReview: true, allowOverride: true },
  { id: 'R-051', name: 'Cautela suplementação ferro com PCR alta', sev: 'low', enabled: false,
    cond: 'IF hsCRP > 3.0 AND suplemento == ferro', then: 'Caution Suplementação Ferro',
    affectedDomains: ['inflam'], requireReview: false, allowOverride: true },
];

// LPR Daily — perguntas (mobile)
const DAILY_QUESTIONS = [
  { id: 'sleep',    type: 'scale', label: 'Dormi bem?',           min: 0, max: 10, value: 4, hint: '0 = muito mal · 10 = perfeito' },
  { id: 'energy',   type: 'scale', label: 'Energia hoje?',        min: 0, max: 10, value: 5 },
  { id: 'mood',     type: 'scale', label: 'Humor?',               min: 0, max: 10, value: 6 },
  { id: 'stress',   type: 'scale', label: 'Estresse hoje?',       min: 0, max: 10, value: 7, inverse: true },
  { id: 'evac',     type: 'yesno', label: 'Evacuação hoje?',      value: true },
  { id: 'bristol',  type: 'bristol', label: 'Escala de Bristol',  value: 4 },
  { id: 'bloat',    type: 'scale', label: 'Distensão abdominal?', min: 0, max: 10, value: 3, inverse: true },
  { id: 'plan',     type: 'percent', label: 'Segui o plano?',      value: 70 },
  { id: 'pain',     type: 'scale', label: 'Dor hoje?',            min: 0, max: 10, value: 1, inverse: true },
  { id: 'exercise', type: 'yesno', label: 'Fiz exercício?',       value: true },
  { id: 'meds',     type: 'yesno', label: 'Tomei medicamentos/suplementos?', value: true },
  { id: 'note',     type: 'text',  label: 'Observação livre',     value: '' },
];

Object.assign(window, {
  LPR_PROTOCOL, LPR_DOMAINS, MARIANA, PATIENTS, EXAMS_PANEL, EXAM_UPLOADS,
  QUESTIONNAIRES, ALERTS, SAFETY_HISTORY, SAFETY_RULES, DAILY_QUESTIONS,
});
