// TAROT — i18n: UI strings + lang hook + toggle component
// Persiste idioma en localStorage. ES por defecto.

const I18N = {
  // ─── Nav ────────────────────────────────────────────────────────────
  nav_mazo:    { es: 'MAZO · 78',  en: 'DECK · 78' },
  nav_tirada:  { es: 'TIRADA',     en: 'SPREAD' },
  nav_dorso:   { es: 'DORSO',      en: 'BACK' },
  // Sub-nav del mazo
  nav_mayores:       { es: 'MAYORES · 22',       en: 'MAJOR · 22' },
  nav_caos:          { es: 'CAOS · 14',          en: 'CHAOS · 14' },
  nav_interaccion:   { es: 'INTERACCIÓN · 14',   en: 'INTERACTION · 14' },
  nav_orden:         { es: 'ORDEN · 14',         en: 'ORDER · 14' },
  nav_organizacion:  { es: 'ORGANIZACIÓN · 14',  en: 'ORGANIZATION · 14' },
  nav_indice:        { es: 'ÍNDICE · 78',        en: 'INDEX · 78' },

  // ─── Mazo page ──────────────────────────────────────────────────────
  mazo_meta_top:   { es: 'TAROT · 78 CARTAS · MAZO COMPLETO · DIRECCIÓN RITUAL',
                     en: 'TAROT · 78 CARDS · COMPLETE DECK · RITUAL DIRECTION' },
  mazo_title:      { es: 'Tarot del Pensamiento Complejo',
                     en: 'Tarot of Complex Thinking' },
  mazo_subtitle:   { es: 'Mazo completo · 22 arquetipos rectores + 4 dominios (Caos, Interacción, Orden, Organización) × 14 rangos',
                     en: 'Complete deck · 22 governing archetypes + 4 domains (Chaos, Interaction, Order, Organization) × 14 ranks' },
  mazo_meta_illu:  { es: '78 / 78 ILUSTRADAS', en: '78 / 78 ILLUSTRATED' },
  mazo_meta_sig:   { es: 'SIGILOS ÚNICOS',     en: 'UNIQUE SIGILS' },
  mazo_meta_size:  { es: '89 × 127 mm',        en: '89 × 127 mm' },
  mazo_meta_lang:  { es: 'ES / EN',            en: 'ES / EN' },

  // Suit dividers
  suit_majors_title:   { es: 'ARCANOS MAYORES · 22', en: 'MAJOR ARCANA · 22' },
  suit_majors_h:       { es: 'Arcanos Mayores',      en: 'Major Arcana' },
  suit_majors_note:    { es: 'principio · Los 22 arquetipos rectores de la complejidad.',
                         en: 'principle · The 22 governing archetypes of complexity.' },

  // Full index
  index_title:     { es: 'ÍNDICE COMPLETO', en: 'COMPLETE INDEX' },
  index_h:         { es: '78 principios',   en: '78 principles' },
  index_majors_h:  { es: 'ARCANOS MAYORES — 22', en: 'MAJOR ARCANA — 22' },

  // Mazo footer
  mazo_footer_tag: { es: 'EL MAZO EN USO', en: 'THE DECK IN USE' },
  mazo_footer:     { es_html: 'Las 78 cartas tienen sigilo único, dorso ritual y dos tiradas signature ancladas en pensamiento complejo: El Principio (una carta, diagnóstico veloz) y El Bucle (tres cartas, retroalimentación). Cada carta lleva una lectura aplicada y su sombra, además del principio rector.',
                     en_html: 'The 78 cards have unique sigils, ritual back, and two signature spreads anchored in complex thinking: The Principle (one card, swift diagnosis) and The Loop (three cards, feedback). Each card carries an applied reading and its shadow, alongside the governing principle.' },

  // ─── Tirada page ────────────────────────────────────────────────────
  tirada_title:    { es: 'Lectura como diagnóstico de sistema',
                     en: 'Reading as system diagnosis' },
  tirada_intro_html: { es: 'Estas tiradas no predicen: <i>diagnostican</i>. Una sola lente (<b>El Principio</b>) para nombrar el momento; o tres cartas en <b>El Bucle</b> para leer la retroalimentación que ya está operando.',
                       en: 'These spreads do not predict: they <i>diagnose</i>. A single lens (<b>The Principle</b>) to name the moment; or three cards in <b>The Loop</b> to read the feedback already operating.' },

  btn_draw_first:  { es: 'MEZCLAR Y TIRAR', en: 'SHUFFLE AND DRAW' },
  btn_draw_again:  { es: 'TIRAR DE NUEVO',  en: 'DRAW AGAIN' },
  toca_revelar:    { es: 'TOCA PARA REVELAR', en: 'TAP TO REVEAL' },
  pulsa_mezclar:   { es: 'Pulsa MEZCLAR Y TIRAR para invocar la tirada',
                     en: 'Press SHUFFLE AND DRAW to invoke the spread' },

  // Reading breakdown
  breakdown_tag:   { es: 'INTERPRETACIÓN POR POSICIÓN', en: 'INTERPRETATION BY POSITION' },
  breakdown_h:     { es: 'Lo que dice cada carta donde cayó',
                     en: 'What each card says where it fell' },
  aun_boca_abajo:  { es: 'Aún boca abajo — toca la carta arriba para revelar.',
                     en: 'Still face down — tap the card above to reveal.' },
  label_lectura:   { es: 'LECTURA', en: 'READING' },
  label_sombra:    { es: 'SOMBRA',  en: 'SHADOW' },
  label_campo:     { es: 'CAMPO',   en: 'FIELD' },

  // Constellation
  constellation_tag: { es: 'CONSTELACIÓN', en: 'CONSTELLATION' },
  constellation_h:   { es: 'Patrones del conjunto', en: 'Patterns of the set' },

  // Cómo leer
  como_leer_tag:    { es: 'CÓMO LEER', en: 'HOW TO READ' },
  como_leer_html:   { es: 'Cada tirada plantea una pregunta sistémica, no biográfica. La carta no <i>predice</i> qué va a pasar; ofrece una <i>lente</i> — un concepto de complejidad — para mirar la situación. Lee primero la posición (qué rol cumple en el diagnóstico), después el principio de la carta (la idea-resorte), y al final la lectura aplicada y su sombra. La <b style="color:#d4af6a">constelación</b> es la lectura del conjunto: patrones que solo emergen cuando se mira el sistema, no la pieza.',
                      en: 'Each spread poses a systemic question, not a biographical one. The card does not <i>predict</i> what will happen; it offers a <i>lens</i> — a concept of complexity — to look at the situation. Read first the position (what role it plays in the diagnosis), then the principle of the card (the spring-idea), and finally the applied reading and its shadow. The <b style="color:#d4af6a">constellation</b> is the reading of the set: patterns that only emerge when you look at the system, not the piece.' },

  // ─── Card labels ────────────────────────────────────────────────────
  card_header_major:   { es: 'ARQUETIPO · PRINCIPIO RECTOR',
                         en: 'ARCHETYPE · GOVERNING PRINCIPLE' },
  card_tag_mayor:      { es: 'MAYOR', en: 'MAJOR' },

  // ─── Dorso page ─────────────────────────────────────────────────────
  dorso_meta:      { es: 'DORSO · MAZO DE 78 CARTAS · DISEÑO RITUAL',
                     en: 'BACK · DECK OF 78 CARDS · RITUAL DESIGN' },
  dorso_title:     { es: 'El reverso del mazo', en: 'The reverse of the deck' },
  dorso_subtitle:  { es: 'Una quaternidad ritual: cuatro glifos de dominio orbitando un principio rector. La cosmología del mazo, condensada en un solo emblema dorado sobre negro profundo.',
                     en: 'A ritual quaternity: four domain glyphs orbiting a governing principle. The cosmology of the deck, condensed into a single golden emblem on deep black.' },
  dorso_card_meta: { es: 'DORSO · 89 × 127 mm', en: 'BACK · 89 × 127 mm' },
  dorso_emblem_tag:{ es: 'LECTURA DEL EMBLEMA', en: 'READING THE EMBLEM' },
  dorso_emblem_html: {
    es: '<p>En el centro, <b style="color:#d4af6a">☉</b> — el <i>principio rector</i>, la posición desde la cual todo el resto se ordena. Es el Sol de los arcanos mayores: lo que no es ni Caos ni Interacción ni Orden ni Organización, sino el eje desde el cual se distinguen.</p><p>En las cuatro posiciones cardinales, los <b style="color:#d4af6a">cuatro dominios</b>:</p><ul style="padding-left:20px;margin-top:6px"><li><b style="color:#d4af6a">◌ arriba</b> · Caos — lo que perturba</li><li><b style="color:#d4af6a">⇄ derecha</b> · Interacción — lo que acopla</li><li><b style="color:#d4af6a">⬡ abajo</b> · Organización — lo que integra</li><li><b style="color:#d4af6a">⊞ izquierda</b> · Orden — lo que patroniza</li></ul><p>Los anillos concéntricos y los radios cardinales evocan un observatorio antiguo: el mazo se piensa a sí mismo como instrumento de orientación, no de adivinación.</p><p style="font-style:italic;border-left:2px solid #d4af6a55;padding-left:12px;margin-top:18px;color:rgba(232,220,192,0.75)">«Quien sostiene una carta boca abajo sostiene también la totalidad: no la respuesta, sino el sistema de preguntas.»</p>',
    en: '<p>At the center, <b style="color:#d4af6a">☉</b> — the <i>governing principle</i>, the position from which everything else is ordered. It is the Sun of the Major Arcana: what is neither Chaos nor Interaction nor Order nor Organization, but the axis from which they are distinguished.</p><p>At the four cardinal positions, the <b style="color:#d4af6a">four domains</b>:</p><ul style="padding-left:20px;margin-top:6px"><li><b style="color:#d4af6a">◌ top</b> · Chaos — what disturbs</li><li><b style="color:#d4af6a">⇄ right</b> · Interaction — what couples</li><li><b style="color:#d4af6a">⬡ bottom</b> · Organization — what integrates</li><li><b style="color:#d4af6a">⊞ left</b> · Order — what patterns</li></ul><p>The concentric rings and cardinal rays evoke an ancient observatory: the deck thinks of itself as an instrument of orientation, not divination.</p><p style="font-style:italic;border-left:2px solid #d4af6a55;padding-left:12px;margin-top:18px;color:rgba(232,220,192,0.75)">«Whoever holds a card face down also holds the totality: not the answer, but the system of questions.»</p>'
  },
  dorso_compare_tag:   { es: 'PARIDAD FRENTE / DORSO', en: 'FRONT / BACK PARITY' },
  dorso_compare_h:     { es: 'Misma proporción, dos códigos visuales',
                         en: 'Same proportion, two visual codes' },
  dorso_grid_tag:      { es: 'EL MAZO BOCA ABAJO', en: 'THE DECK FACE DOWN' },
  dorso_grid_h:        { es: 'Una cuadrícula uniforme — listo para tirar',
                         en: 'A uniform grid — ready to draw' },
  dorso_label_dorso:   { es: 'DORSO', en: 'BACK' },
  dorso_label_frente:  { es: 'FRENTE', en: 'FRONT' },
  dorso_next_tag:      { es: 'SIGUIENTE', en: 'NEXT' },
  dorso_next_html:     { es_html: 'Con el dorso definido, las cartas pueden tirarse boca abajo. Ve a <a href="index.html" style="color:#d4af6a">TIRADA</a> para probar las dos tiradas signature: <b>El Principio</b> (una carta, diagnóstico veloz) y <b>El Bucle</b> (tres cartas, retroalimentación).',
                         en_html: 'With the back defined, cards can be drawn face down. Go to <a href="index.html" style="color:#d4af6a">SPREAD</a> to try the two signature spreads: <b>The Principle</b> (one card, swift diagnosis) and <b>The Loop</b> (three cards, feedback).' },

  // Patterns
  pat_mayores_many:  { es: (n) => `${n} Mayores`, en: (n) => `${n} Majors` },
  pat_mayores_many_text: { es: 'La tirada toca arquetipos rectores, no solo situaciones — la pregunta se juega en el plano del principio. Las menores describen cómo se vive lo que las mayores nombran.',
                           en: 'The spread touches governing archetypes, not just situations — the question plays out on the plane of principle. The minors describe how what the majors name is lived.' },
  pat_mayor_one:     { es: '1 Mayor presente', en: '1 Major present' },
  pat_mayor_one_text: { es: (name) => `${name} aporta el principio que ordena toda la lectura — léelo como clave de las menores.`,
                        en: (name) => `${name} provides the principle that orders the entire reading — read it as the key to the minors.` },
  pat_sin_mayores:   { es: 'Sin Mayores', en: 'No Majors' },
  pat_sin_mayores_text: { es: 'Toda la tirada vive en lo concreto: situaciones, gestos, operadores. Lo arquetípico está implícito — leelo en la combinatoria de los palos.',
                          en: 'The whole spread lives in the concrete: situations, gestures, operators. The archetypal is implicit — read it in the combinatorics of the suits.' },
  pat_dominio:       { es: (suit) => `Dominio ${suit}`, en: (suit) => `${suit} dominance` },
  pat_dominio_text:  { es: (n, suit, dom) => `${n} cartas de ${suit} — la situación pesa en ${dom.toLowerCase()}.`,
                       en: (n, suit, dom) => `${n} cards of ${suit} — the situation weighs in ${dom.toLowerCase()}.` },
  pat_eje:           { es: (suit) => `Eje ${suit}`, en: (suit) => `${suit} axis` },
  pat_eje_text:      { es: (suit, note) => `Dos cartas de ${suit} marcan un eje conceptual — ${note.toLowerCase()}`,
                       en: (suit, note) => `Two cards of ${suit} mark a conceptual axis — ${note.toLowerCase()}` },
  pat_figuras:       { es: (n) => `${n} figuras`, en: (n) => `${n} courts` },
  pat_figuras_text:  { es: 'Hay operadores activos: personas, agentes o roles que mueven la situación más que las circunstancias.',
                       en: 'There are active operators: people, agents, or roles that move the situation more than the circumstances do.' },
  pat_ases:          { es: (n) => `${n} ${n > 1 ? 'Ases' : 'As'}`,
                       en: (n) => `${n} ${n > 1 ? 'Aces' : 'Ace'}` },
  pat_ases_text:     { es: (n) => `Inicios: algo empieza ${n > 1 ? 'en varios dominios' : 'en un dominio'} — semillas todavía sin desarrollo.`,
                       en: (n) => `Beginnings: something starts ${n > 1 ? 'in several domains' : 'in one domain'} — seeds still undeveloped.` },
};

// ─── Hook + helpers ────────────────────────────────────────────────────
function useLang() {
  const [lang, setLangState] = React.useState(() => {
    if (typeof window === 'undefined') return 'es';
    try { return localStorage.getItem('tarot_lang') || 'es'; } catch { return 'es'; }
  });
  const setLang = React.useCallback((l) => {
    setLangState(l);
    try { localStorage.setItem('tarot_lang', l); } catch {}
    document.documentElement.lang = l;
  }, []);
  React.useEffect(() => {
    document.documentElement.lang = lang;
  }, [lang]);
  return [lang, setLang];
}

// t(key, lang) → string (o llama función si valor es callable y se pasan args)
function t(key, lang, ...args) {
  const entry = I18N[key];
  if (!entry) return key;
  const v = entry[lang] ?? entry.es;
  if (typeof v === 'function') return v(...args);
  return v;
}

// t para strings con HTML — devuelve __html object para dangerouslySetInnerHTML
function tHtml(key, lang) {
  const entry = I18N[key];
  if (!entry) return { __html: key };
  const v = entry[lang + '_html'] ?? entry[lang] ?? entry.es_html ?? entry.es;
  return { __html: v };
}

// Helper para sacar campo bilingüe de cards: cardField(card, 'principle', lang)
function cardField(card, base, lang) {
  if (!card) return '';
  if (lang === 'en') return card[base + 'En'] || card[base] || '';
  return card[base] || '';
}

// ─── Toggle component ──────────────────────────────────────────────────
function LangToggle({ lang, setLang, style = {} }) {
  const baseBtn = {
    background: 'transparent',
    border: '1px solid rgba(232,220,192,0.25)',
    color: 'rgba(232,220,192,0.65)',
    fontFamily: '"JetBrains Mono", monospace',
    fontSize: 11,
    fontWeight: 700,
    letterSpacing: 1.5,
    padding: '6px 10px',
    cursor: 'pointer',
    transition: 'all 0.15s ease',
  };
  const active = { color: '#fff', borderColor: '#d4af6a', background: 'rgba(212,175,106,0.12)' };
  return React.createElement('div', {
    style: { display: 'inline-flex', gap: 4, marginLeft: 'auto', alignItems: 'center', ...style },
  },
    React.createElement('button', {
      style: { ...baseBtn, ...(lang === 'es' ? active : {}) },
      onClick: () => setLang('es'),
    }, 'ES'),
    React.createElement('button', {
      style: { ...baseBtn, ...(lang === 'en' ? active : {}) },
      onClick: () => setLang('en'),
    }, 'EN'),
  );
}

Object.assign(window, { I18N, useLang, t, tHtml, cardField, LangToggle });
