// data.jsx — Conteúdo do app Calistenia "Zenith"
// Programa de 30 dias, objetivos, níveis do avatar, badges, treino do dia.

const LEVELS = [
  { id: 'iniciante', label: 'Iniciante', desc: 'Construir base e consistência', meta: '30 min/dia' },
  { id: 'intermediario', label: 'Intermediário', desc: 'Ganhar força e volume', meta: '40 min/dia' },
  { id: 'avancado', label: 'Avançado', desc: 'Movimentos e skills', meta: '50 min/dia' },
];

// glyph = nome de uma forma simples desenhada em components (sem emoji)
const GOALS = [
  { id: 'flexao', label: 'Flexão', desc: 'Peito, ombro, tríceps', glyph: 'push' },
  { id: 'barra', label: 'Barra', desc: 'Costas e pegada', glyph: 'bar' },
  { id: 'core', label: 'Core', desc: 'Abdômen e estabilidade', glyph: 'core' },
  { id: 'emagrecer', label: 'Emagrecer', desc: 'Queima e condicionamento', glyph: 'burn' },
  { id: 'forca', label: 'Força', desc: 'Potência de corpo inteiro', glyph: 'power' },
];

// Objetivos (anamnese) — perder / ganhar / manter
const OBJECTIVES = [
  { id: 'perder', label: 'Perder Peso',       desc: 'Queimar gordura e definir', glyph: 'burn' },
  { id: 'ganhar', label: 'Aumentar Músculos', desc: 'Hipertrofia e força',        glyph: 'power' },
  { id: 'manter', label: 'Manter a Forma',    desc: 'Condicionamento e saúde',    glyph: 'balance' },
];

const SEXES = [
  { id: 'masc', label: 'Masculino' },
  { id: 'fem',  label: 'Feminino' },
  { id: 'na',   label: 'Prefiro não dizer' },
];

// Tipos de corpo — placeholders marcados (silhuetas viriam depois)
const BODY_NOW = [
  { id: 'magro',    label: 'Magro' },
  { id: 'normal',   label: 'Normal' },
  { id: 'sobrepeso',label: 'Sobrepeso' },
  { id: 'musculoso',label: 'Musculoso' },
];
const BODY_TARGET = [
  { id: 'forma',     label: 'Em Forma' },
  { id: 'atletico',  label: 'Atlético' },
  { id: 'definido',  label: 'Definido' },
  { id: 'musculoso', label: 'Musculoso' },
];

// IMC
function computeIMC(weightKg, heightCm) {
  const m = heightCm / 100;
  return weightKg / (m * m);
}
function imcCategory(imc) {
  if (imc < 18.5) return { label: 'Abaixo do peso', pos: imc / 18.5 * 0.18 };
  if (imc < 25)   return { label: 'Peso normal',    pos: 0.18 + (imc - 18.5) / 6.5 * 0.22 };
  if (imc < 30)   return { label: 'Sobrepeso',      pos: 0.40 + (imc - 25) / 5 * 0.22 };
  if (imc < 35)   return { label: 'Obesidade I',    pos: 0.62 + (imc - 30) / 5 * 0.18 };
  if (imc < 40)   return { label: 'Obesidade II',   pos: 0.80 + (imc - 35) / 5 * 0.12 };
  return { label: 'Obesidade III', pos: 0.96 };
}

// Estimativa de tempo para alcançar o objetivo
function estimatePlan({ objective, weight, targetWeight, days }) {
  const diff = Math.abs(weight - targetWeight);
  let weeks;
  if (objective === 'manter' || diff < 0.5) {
    weeks = Math.max(6, Math.round(days * 3));
  } else if (objective === 'ganhar') {
    const perWeek = 0.12 + days * 0.035; // kg/semana
    weeks = Math.ceil(diff / perWeek);
  } else { // perder
    const perWeek = 0.35 + days * 0.07;
    weeks = Math.ceil(diff / perWeek);
  }
  weeks = Math.max(4, Math.min(weeks, 104));
  let text;
  if (weeks < 9) text = `${weeks} semanas`;
  else { const months = Math.round(weeks / 4.345); text = `~${months} ${months === 1 ? 'mês' : 'meses'}`; }
  return { weeks, text };
}

// Avatar Zenith — 5 níveis de evolução
const ZENITH_LEVELS = [
  { lvl: 1, range: 'Dias 1–5',   name: 'Desperta',   ability: 'Lembretes básicos',          phrase: 'Vamos começar?',              ring: 0.18 },
  { lvl: 2, range: 'Dias 6–10',  name: 'Ascende',    ability: 'Contagem de reps em tempo real', phrase: 'Você está no caminho certo!', ring: 0.40 },
  { lvl: 3, range: 'Dias 11–15', name: 'Irradia',    ability: 'Análise de performance',      phrase: 'Seu progresso é real!',        ring: 0.62 },
  { lvl: 4, range: 'Dias 16–20', name: 'Domina',     ability: 'Sugestões de desafios',       phrase: 'Você está transformado!',      ring: 0.82 },
  { lvl: 5, range: 'Dias 21–30', name: 'O Pico',     ability: 'Acesso a treinos avançados',  phrase: 'Você é o pico da evolução!',   ring: 1.0 },
];

function zenithForDay(day) {
  if (day <= 5) return ZENITH_LEVELS[0];
  if (day <= 10) return ZENITH_LEVELS[1];
  if (day <= 15) return ZENITH_LEVELS[2];
  if (day <= 20) return ZENITH_LEVELS[3];
  return ZENITH_LEVELS[4];
}

// Badges / conquistas
const BADGES = [
  { id: 'fogo',      name: 'Fogo Sagrado', desc: '7 dias consecutivos',        glyph: 'flame',   req: 7 },
  { id: 'diamante',  name: 'Diamante',     desc: '14 dias consecutivos',       glyph: 'diamond', req: 14 },
  { id: 'coroa',     name: 'Coroa',        desc: '30 dias consecutivos',       glyph: 'crown',   req: 30 },
  { id: 'pico',      name: 'Pico',         desc: 'Nível máximo do avatar',     glyph: 'peak',    req: 21 },
  { id: 'equilibrio',name: 'Equilíbrio',   desc: '5 treinos de mindfulness',   glyph: 'balance', req: 5 },
  { id: 'forca',     name: 'Força Bruta',  desc: '10 flexões no chão',         glyph: 'fist',    req: 10 },
  { id: 'precisao',  name: 'Precisão',     desc: '95%+ de acurácia',           glyph: 'target',  req: 95 },
];

// Programa de 30 dias (Iniciante, 30 min/dia)
const PROGRAM_30 = [
  { day: 1,  foco: 'Aquecimento e Mobilidade', ex: 'Rotação de articulações, caminhada no lugar, alongamento dinâmico', frase: 'Hoje você planta a semente. Cada movimento é um passo em direção ao seu melhor eu. Comece agora.' },
  { day: 2,  foco: 'Flexões (Modificadas)', ex: '3×8 flexões na parede, 2×10 flexões inclinadas, alongamento', frase: 'A consistência é a ponte entre o desejo e a realidade. Seu corpo agradece cada repetição.' },
  { day: 3,  foco: 'Mobilidade de Quadril', ex: 'Agachamentos assistidos, lunges estáticos, ponte glútea', frase: 'Você não compete com ninguém. Compete com quem era ontem. Hoje é seu dia de evoluir.' },
  { day: 4,  foco: 'Força de Core', ex: 'Prancha na parede (3×15s), dead bug, bird dog', frase: 'O core é seu centro. Fortaleça-o e encontrará equilíbrio em tudo. Respire, resista, persista.' },
  { day: 5,  foco: 'Flexões Progressivas', ex: '3×10 flexões inclinadas, 2×5 flexões no chão, alongamento', frase: 'Cada flexão é uma vitória. Não importa quantas você faz, importa que você começou.' },
  { day: 6,  foco: 'Força de Pernas', ex: 'Agachamentos corporais, step-ups, glute bridge', frase: 'Suas pernas carregam seus sonhos. Fortaleça-as com intenção e gratidão pelo movimento.' },
  { day: 7,  foco: 'Descanso Ativo', ex: 'Caminhada leve, alongamento profundo, respiração consciente', frase: 'O descanso também é treino. Honre seu corpo permitindo que ele se recupere com sabedoria.' },
  { day: 8,  foco: 'Flexões + Core', ex: '4×8 flexões inclinadas, 3×20s prancha, dead bug', frase: 'Você já é mais forte que era. Reconheça seu progresso e use-o como combustível.' },
  { day: 9,  foco: 'Mobilidade + Força', ex: 'Agachamentos, lunges dinâmicos, ponte glútea, alongamento', frase: 'A flexibilidade é força. Quanto mais você se adapta, mais resiliente se torna.' },
  { day: 10, foco: 'Flexões no Chão', ex: '3×5 flexões no chão, 4×10 flexões inclinadas, alongamento', frase: 'Seu limite é apenas uma ilusão. Ultrapasse-o com calma, respiração e determinação.' },
  { day: 11, foco: 'Core Avançado', ex: '3×25s prancha, 2×10 mountain climbers, bird dog', frase: 'O centro do seu ser é forte. Cultive essa força interior e ela se refletirá no corpo.' },
  { day: 12, foco: 'Treino Completo', ex: '3×8 flexões, 3×15 agachamentos, 2×20s prancha, alongamento', frase: 'Você está construindo mais que músculos. Está construindo disciplina, confiança e caráter.' },
  { day: 13, foco: 'Força de Pernas', ex: '4×12 agachamentos, 3×10 lunges, 2×15 glute bridge', frase: 'Cada movimento é meditação. Sinta seu corpo, honre seu esforço, celebre sua presença.' },
  { day: 14, foco: 'Descanso Ativo', ex: 'Yoga leve, respiração profunda, reflexão sobre a semana', frase: 'Duas semanas. Você já mudou. Veja como seu corpo responde. Isso é apenas o começo.' },
  { day: 15, foco: 'Flexões Intensas', ex: '4×10 flexões inclinadas, 3×6 flexões no chão, alongamento', frase: 'O desafio é o caminho para a transformação. Abrace-o com coragem e respiração consciente.' },
  { day: 16, foco: 'Mobilidade Total', ex: 'Agachamentos profundos, lunges alternados, ponte glútea, alongamento', frase: 'Seu corpo é sábio. Ouça-o, respeite-o, trabalhe com ele, não contra ele.' },
  { day: 17, foco: 'Core + Flexões', ex: '3×30s prancha, 3×8 flexões, 2×12 mountain climbers', frase: 'A paciência é a virtude do guerreiro. Cada dia você fica mais próximo de seus objetivos.' },
  { day: 18, foco: 'Força Funcional', ex: '4×12 agachamentos, 3×10 lunges, 3×15 glute bridge, alongamento', frase: 'Você não está apenas treinando. Está aprendendo a conhecer seu corpo e seus limites.' },
  { day: 19, foco: 'Flexões + Mobilidade', ex: '4×8 flexões, 3×15 agachamentos, 2×25s prancha, alongamento', frase: 'Cada dia é uma nova oportunidade. Não desperdice. Seu futuro agradece seu esforço hoje.' },
  { day: 20, foco: 'Treino Completo', ex: '4×10 flexões inclinadas, 4×15 agachamentos, 3×30s prancha, alongamento', frase: 'Você está em harmonia com seu corpo. Sinta a força crescendo. Isso é real, isso é seu.' },
  { day: 21, foco: 'Descanso Ativo', ex: 'Caminhada consciente, alongamento profundo, meditação', frase: 'Três semanas. Você é uma pessoa diferente. Mais forte, mais consciente, mais você.' },
  { day: 22, foco: 'Flexões Progressivas', ex: '4×10 flexões no chão, 3×8 flexões profundas, alongamento', frase: 'Você superou seus medos. Agora colha os frutos da sua coragem e consistência.' },
  { day: 23, foco: 'Força Total', ex: '4×15 agachamentos, 4×12 lunges, 3×35s prancha, alongamento', frase: 'A transformação não é mágica. É disciplina, é presença, é você escolhendo evoluir todos os dias.' },
  { day: 24, foco: 'Core Avançado', ex: '3×35s prancha, 3×15 mountain climbers, 2×12 bird dog, alongamento', frase: 'Seu core é seu alicerce. Quanto mais forte, mais estável você fica em todas as áreas da vida.' },
  { day: 25, foco: 'Treino Completo', ex: '4×10 flexões, 4×15 agachamentos, 3×35s prancha, alongamento', frase: 'Você não é o mesmo de 25 dias atrás. Reconheça essa evolução. Você merece essa vitória.' },
  { day: 26, foco: 'Mobilidade + Força', ex: '4×12 agachamentos profundos, 4×10 lunges, 3×15 glute bridge', frase: 'O corpo e a mente são um. Quando você treina com intenção, ambos se fortalecem.' },
  { day: 27, foco: 'Flexões Intensas', ex: '4×12 flexões inclinadas, 4×8 flexões no chão, 2×30s prancha', frase: 'Você está pronto para o próximo nível. Mas antes, celebre onde você chegou. Você é forte.' },
  { day: 28, foco: 'Treino Completo', ex: '4×12 flexões, 4×15 agachamentos, 3×40s prancha, alongamento', frase: 'Quatro semanas. Você plantou, regou, cuidou. Agora colha os frutos de sua dedicação.' },
  { day: 29, foco: 'Força Máxima', ex: '5×10 flexões, 5×15 agachamentos, 4×40s prancha, alongamento', frase: 'Você é capaz de muito mais do que imagina. Cada dia prova isso. Continue acreditando.' },
  { day: 30, foco: 'Celebração + Reflexão', ex: 'Treino favorito da semana, alongamento profundo, meditação de gratidão', frase: 'Você completou 30 dias. Você é disciplinado. Você é consistente. Você é transformado. Agora, continue.' },
];

// Treino do dia detalhado (estrutura para a tela de treino ativo)
// type: 'reps' (contador) | 'time' (cronômetro) | 'rest'
const TODAY_WORKOUT = {
  day: 12,
  title: 'Treino Completo',
  blocks: [
    { id: 'w1', phase: 'Aquecimento', name: 'Mobilidade articular',   type: 'time', target: 40, sets: 1, cue: 'Solte ombros, quadril e tornozelos.' },
    { id: 'w2', phase: 'Aquecimento', name: 'Polichinelo',            type: 'reps', target: 20, sets: 1, cue: 'Ritmo leve, suba a frequência cardíaca.' },
    { id: 'm1', phase: 'Principal',   name: 'Flexão',                 type: 'reps', target: 8,  sets: 3, rest: 40, cue: 'Cotovelos a 45°, corpo em linha reta.' },
    { id: 'm2', phase: 'Principal',   name: 'Agachamento livre',      type: 'reps', target: 15, sets: 3, rest: 40, cue: 'Peito aberto, joelhos na direção dos pés.' },
    { id: 'm3', phase: 'Principal',   name: 'Prancha',                type: 'time', target: 20, sets: 2, rest: 30, cue: 'Abdômen firme, glúteo ativado.' },
    { id: 'c1', phase: 'Alongamento', name: 'Alongamento guiado',     type: 'time', target: 60, sets: 1, cue: 'Respire fundo. Honre o esforço de hoje.' },
  ],
};

// Estado simulado do usuário (protótipo)
const USER_STATE = {
  name: 'Você',
  level: 'iniciante',   // ritmo do timer de execução
  sex: 'masc',          // define a voz (homem → voz feminina; mulher → voz masculina)
  currentDay: 12,
  streak: 9,
  totalWorkouts: 11,
  totalMinutes: 247,
  totalReps: 1480,
  plankSeconds: 920,
  accuracy: 92,
  // histórico de 30 dias: 'done' | 'rest' | 'today' | 'future' | 'missed'
  history: [
    'done','done','done','done','done','rest','done','done','missed','done',
    'done','today','future','future','future','future','future','future','future','future',
    'future','future','future','future','future','future','future','future','future','future',
  ],
  earnedBadges: ['fogo','forca'],
};

// Ritmo médio de execução por repetição (segundos), conforme o nível do usuário
const REP_PACE = { iniciante: 2.8, intermediario: 2.2, avancado: 1.8 };
function blockDuration(block, level) {
  if (block.type === 'time') return block.target;
  const pace = REP_PACE[level] || 2.4;
  return Math.max(12, Math.round(block.target * pace));
}

Object.assign(window, {
  LEVELS, GOALS, OBJECTIVES, SEXES, BODY_NOW, BODY_TARGET,
  computeIMC, imcCategory, estimatePlan, REP_PACE, blockDuration,
  ZENITH_LEVELS, zenithForDay, BADGES, PROGRAM_30, TODAY_WORKOUT, USER_STATE,
});
