/* Motor de diagnóstico por reglas — determinista, sin IA.
   Toma las respuestas del wizard y devuelve un informe estructurado. */

/* Configura aquí el WhatsApp del negocio (formato internacional sin signos) */
const BUSINESS_WHATSAPP = '34678288284';

/* Palancas: una por área que el usuario puede marcar en Q1.
   Cada una: síntoma (lo que reportó), coste (por qué le cuesta dinero, con
   rangos honestos), acción (1 cosa concreta para esta semana). */
const LEVERS = {
  precios: {
    icon: '💸',
    title: 'Precios y márgenes',
    symptom: 'Dudas de si tus precios son los correctos.',
    cost: 'Un precio mal calibrado es la fuga más silenciosa: revisar tarifas y costes reales casi siempre saca a la luz margen que hoy se está quedando por el camino sin que lo veas.',
    action: 'Coge tus 3 productos o servicios más vendidos y calcula el margen real de cada uno (precio − todos los costes). Casi siempre hay una sorpresa.',
  },
  equipo: {
    icon: '👥',
    title: 'Equipo y productividad',
    symptom: 'Sientes que el equipo no rinde como debería.',
    cost: 'Cuando los roles y las prioridades no están claros, se pierde tiempo en retrabajo y tareas sin foco. Es coste que pagas sin verlo reflejado en ninguna factura.',
    action: 'Pide a cada persona que te liste sus 3 tareas que más tiempo comen. Verás al instante qué se puede delegar, agrupar o automatizar.',
  },
  marketing: {
    icon: '📣',
    title: 'Captación de clientes',
    symptom: 'Tu marketing no te trae clientes de forma constante.',
    cost: 'Sin un canal de captación predecible, la facturación se vuelve una montaña rusa. El problema rara vez es “hacer más”, sino medir de dónde viene de verdad cada cliente.',
    action: 'Pregunta a tus próximos 10 clientes cómo te conocieron. Ese dato, gratis, te dice dónde duplicar y qué dejar de hacer.',
  },
  procesos: {
    icon: '🔁',
    title: 'Procesos y operativa',
    symptom: 'Repites tareas una y otra vez y te agotan.',
    cost: 'Cada proceso manual repetido es tiempo (tuyo, el más caro) que no se reinvierte en crecer. Documentar y automatizar lo repetible libera horas cada semana.',
    action: 'Identifica la tarea que más veces repites a la semana y escribe sus pasos. Ese mini-manual es el primer paso para delegarla o automatizarla.',
  },
  numeros: {
    icon: '📊',
    title: 'Control financiero',
    symptom: 'No tienes claros tus números.',
    cost: 'Gestionar sin números claros es conducir de noche sin luces. Decisiones de precio, gasto o contratación se toman a ciegas, y los errores se pagan caros.',
    action: 'Monta un cuadro simple con 4 cifras: ingresos, gastos fijos, gastos variables y beneficio del mes. Solo con verlo cada semana, cambian las decisiones.',
  },
  tiempo: {
    icon: '⏰',
    title: 'Tu tiempo y foco',
    symptom: 'No te da la vida para todo.',
    cost: 'Si el negocio depende de ti para todo, tu tiempo es el cuello de botella que frena el crecimiento, y el riesgo si tú faltas. Es lo primero que conviene desatascar.',
    action: 'Anota durante 3 días en qué se va tu tiempo. Marca lo que solo puedes hacer tú: todo lo demás es candidato a delegar.',
  },
};

const REVENUE_LABELS = [
  '< 3.000 € / mes', '3.000 – 10.000 € / mes', '10.000 – 25.000 € / mes',
  '25.000 – 50.000 € / mes', '50.000 – 100.000 € / mes',
  '100.000 – 250.000 € / mes', '+ 250.000 € / mes',
];

/* Bandas del Índice de Método */
const BANDS = [
  {
    min: 0, max: 40, key: 'reactiva',
    name: 'Fase Reactiva',
    tag: 'Apagando fuegos',
    desc: 'Tu negocio funciona, pero el día a día te lleva a ti en vez de al revés. Es el punto donde más rápido se notan las mejoras: hay margen claro para ordenar y respirar.',
  },
  {
    min: 41, max: 65, key: 'transicion',
    name: 'Fase En transición',
    tag: 'Empezando a ordenar',
    desc: 'Tienes cosas bajo control y otras que aún te superan. Estás en el punto donde poner método marca más diferencia: ordenar lo que hoy te cuesta te da claridad y tranquilidad.',
  },
  {
    min: 66, max: 85, key: 'ordenada',
    name: 'Fase Ordenada',
    tag: 'Con base sólida',
    desc: 'Tu negocio tiene buenos cimientos. Ahora la mejora viene de afinar: optimizar márgenes, sistematizar lo que funciona y soltar lastre para crecer con cabeza.',
  },
  {
    min: 86, max: 100, key: 'metodo',
    name: 'Fase Con método',
    tag: 'Listo para escalar',
    desc: 'Llevas el negocio con orden y datos. El siguiente nivel ya no es ordenar, es escalar: más volumen, más equipo o nuevas líneas, sin perder el control que has ganado.',
  },
];

function bandFor(score) {
  return BANDS.find((b) => score >= b.min && score <= b.max) || BANDS[0];
}

/* Construye el informe a partir del estado del wizard */
function buildReport(state) {
  const areas = state.areas || [];
  const scale = state.scale ?? 5;            // 1-10 claridad financiera
  const yesno = state.yesno || [];
  // Cada respuesta: 2 = "Me pasa", 1 = "A veces", 0 = "No"
  const painRaw = yesno.reduce((sum, v) => sum + (v === 2 ? 1 : v === 1 ? 0.5 : 0), 0);
  const answered = yesno.filter((v) => v !== null && v !== undefined).length || 4;

  /* Índice 0-100 (más alto = más sano) */
  const clarity = (scale / 10) * 40;                        // 0-40
  const autonomy = ((answered - painRaw) / answered) * 35;  // 0-35
  const focus = ((6 - areas.length) / 6) * 25;              // 0-25
  const score = Math.round(Math.max(4, Math.min(100, clarity + autonomy + focus)));
  const band = bandFor(score);

  /* Palancas priorizadas: las áreas marcadas (máx 4). Si no marcó ninguna,
     usamos las dos más comunes para no dejar el informe vacío. */
  let keys = areas.slice(0, 4);
  if (keys.length === 0) keys = ['numeros', 'tiempo'];
  const levers = keys.map((k) => LEVERS[k]).filter(Boolean);

  /* Espejo de respuestas */
  const mirrorAreas = areas.map((k) => LEVERS[k]?.title).filter(Boolean);

  /* Línea de claridad financiera */
  let clarityLine;
  if (scale <= 3) clarityLine = 'Hoy tus números no te dan visibilidad: es lo primero a ordenar.';
  else if (scale <= 6) clarityLine = 'Tienes una idea de tus números, pero no el detalle para decidir con seguridad.';
  else clarityLine = 'Controlas razonablemente tus números: buena base para afinar el resto.';

  return {
    score,
    band,
    mirrorAreas,
    clarityLine,
    scale,
    painRaw,
    revenueLabel: REVENUE_LABELS[state.revenue ?? 2],
    levers,
    whatsapp: BUSINESS_WHATSAPP,
  };
}

window.Diagnosis = { buildReport, LEVERS, BANDS, REVENUE_LABELS, BUSINESS_WHATSAPP };
