/* global React, useApp */
/* Páginas legales independientes: Términos y Condiciones · Política de Privacidad */
const { createElement: l } = React;

/* Convierte el correo y "WhatsApp" dentro de un texto en enlaces clicables */
function linkify(text) {
  if (typeof text !== "string") return text;
  var re = /(mictlan\.talento@gmail\.com|WhatsApp)/g;
  var out = [], last = 0, m, k = 0;
  while ((m = re.exec(text)) !== null) {
    if (m.index > last) out.push(text.slice(last, m.index));
    if (m[0] === "WhatsApp")
      out.push(l("a", { key: "k" + (k++), href: "https://wa.me/message/CR42U3DQIYNNI1", target: "_blank", rel: "noopener noreferrer", style: { color: "var(--gold-claro)", textDecoration: "underline" } }, "WhatsApp"));
    else
      out.push(l("a", { key: "k" + (k++), href: "mailto:mictlan.talento@gmail.com", style: { color: "var(--gold-claro)", textDecoration: "underline" } }, "mictlan.talento@gmail.com"));
    last = m.index + m[0].length;
  }
  if (last < text.length) out.push(text.slice(last));
  return out.length ? out : text;
}

function LegalPage({ title, updated, intro, sections, numbered, note }) {
  const { navigate } = useApp();
  const num = numbered !== false;
  return l("div", { style: { background: "var(--bone)", minHeight: "72vh" } },
    /* encabezado */
    l("div", { style: { background: "radial-gradient(ellipse at 50% 0%, var(--obsidian-3), var(--obsidian))", color: "var(--ink)", padding: "46px 0 40px", textAlign: "center" } },
      l("div", { className: "wrap" },
        l("h1", { className: "display", style: { fontSize: "clamp(28px,3.6vw,44px)", margin: 0, textTransform: "uppercase", letterSpacing: ".05em", color: "var(--gold-claro)", textShadow: "0 2px 18px rgba(0,0,0,.55)" } }, title),
        updated && l("p", { className: "serif", style: { fontSize: 15, opacity: .8, margin: "10px 0 0", color: "var(--ink-soft)" } }, "Última actualización: " + updated))),
    /* cuerpo */
    l("div", { className: "wrap", style: { maxWidth: 820, margin: "0 auto", padding: "40px 32px 72px" } },
      l("button", { onClick: () => navigate("home", {}), style: { background: "none", border: "none", color: "var(--vino)", cursor: "pointer", fontFamily: "var(--font-ui)", fontSize: 12, letterSpacing: ".12em", textTransform: "uppercase", margin: "0 0 26px", padding: 0 } }, "← Volver al inicio"),
      intro && l("p", { className: "serif", style: { fontSize: 18.5, lineHeight: 1.6, color: "var(--ink-soft)", margin: "0 0 32px" } }, intro),
      sections.map((s, i) => {
        var content = [
          s.h && l("h2", { key: "h", className: "display", style: { fontSize: 18, color: "var(--ink)", textTransform: "uppercase", letterSpacing: ".05em", margin: "0 0 10px" } }, (num ? (i + 1) + ". " : "") + s.h)
        ].concat((s.p || []).map((p, j) => l("p", { key: "p" + j, className: "serif", style: { fontSize: 16.5, lineHeight: 1.66, color: "var(--ink-soft)", margin: "0 0 10px" } }, linkify(p))));
        if (s.list) content.push(l("ul", { key: "ul", style: { margin: "2px 0 0", paddingLeft: 22 } }, s.list.map((li, j) => l("li", { key: j, className: "serif", style: { fontSize: 16.5, lineHeight: 1.6, color: "var(--ink-soft)", marginBottom: 6 } }, linkify(li)))));
        if (s.table) content.push(l("div", { key: "tb", style: { overflowX: "auto", marginTop: 8 } },
          l("table", { style: { width: "100%", borderCollapse: "collapse", fontFamily: "var(--font-ui)", fontSize: 14.5 } },
            l("thead", null, l("tr", null, s.table.head.map((h, k) => l("th", { key: k, style: { textAlign: "left", padding: "10px 12px", borderBottom: "1px solid var(--amate-line)", color: "var(--gold-claro)", textTransform: "uppercase", letterSpacing: ".06em", fontSize: 11.5 } }, h)))),
            l("tbody", null, s.table.rows.map((r, k) => l("tr", { key: k }, r.map((cc, m) => l("td", { key: m, style: { padding: "10px 12px", borderBottom: "1px solid rgba(0,0,0,.08)", color: "var(--ink-soft)" } }, cc))))))));
        return l("div", { key: i, style: { marginBottom: 26 } },
          s.media
            ? l("div", { className: "legal-fig" },
                l("img", { src: s.media, alt: "Referencia de medidas", className: "legal-fig-img" }),
                l("div", { style: { flex: 1, minWidth: 0 } }, content))
            : content);
      }),
      l("p", { className: "serif", style: { fontSize: 15, color: "var(--ink-faint)", marginTop: 30, fontStyle: "italic" } }, linkify(note || "Para cualquier duda escríbenos a mictlan.talento@gmail.com o por WhatsApp."))));
}

function TermsPage() {
  return l(LegalPage, {
    title: "Términos y condiciones",
    updated: "junio de 2026",
    intro: "Bienvenido a Mictlán. Estos Términos y Condiciones regulan el uso de nuestro sitio y la compra de los artículos que ofrecemos. Al navegar o realizar un pedido, aceptas lo aquí descrito.",
    sections: [
      { h: "Sobre Mictlán", p: ["Mictlán es una tienda mexicana de artículos decorativos, accesorios y piezas de inspiración gótica, oculta y eterna. Para cualquier asunto puedes contactarnos en mictlan.talento@gmail.com o por WhatsApp."] },
      { h: "Los artículos", p: ["La mayoría de nuestros artículos son elaborados o ensamblados a mano. Por su naturaleza artesanal pueden existir ligeras variaciones de color, forma o medida respecto a las fotografías, que son ilustrativas. Hacemos nuestro mejor esfuerzo por mostrarlos con la mayor fidelidad posible."] },
      { h: "Precios y pagos", p: ["Todos los precios se muestran en pesos mexicanos (MXN) e incluyen los impuestos aplicables, salvo que se indique lo contrario. Los precios pueden cambiar sin previo aviso; el precio válido será el vigente al confirmar tu pedido.", "Los pagos se procesan mediante plataformas seguras de terceros. Mictlán no almacena los datos completos de tu tarjeta."] },
      { h: "Pedidos y disponibilidad", p: ["Todo pedido está sujeto a disponibilidad. Al tratarse de piezas únicas o de tiraje limitado, un artículo puede agotarse. Nos reservamos el derecho de cancelar un pedido por falta de existencias o por un error evidente en precio o descripción, notificándote y reembolsando lo pagado."] },
      { h: "Envíos y entregas", p: ["Realizamos envíos a todo México y entrega local en CDMX. Los tiempos son estimados y dependen de la paquetería; no somos responsables por demoras ajenas a nosotros. Los costos y plazos se informan antes de concluir la compra."] },
      { h: "Cambios y devoluciones", p: ["Si tu artículo llega dañado o con un defecto de fábrica, contáctanos dentro de los 5 días naturales posteriores a la entrega, adjuntando fotografías, vía WhatsApp o correo. El producto debe conservarse en su estado y empaque original.", "Los artículos personalizados o hechos por encargo no admiten cambio ni devolución, salvo que presenten un defecto."] },
      { h: "Uso responsable de los artículos", p: ["Algunos artículos —como las velas— requieren un uso responsable: nunca los dejes encendidos sin vigilancia, mantenlos lejos del alcance de niños, mascotas y materiales inflamables. Mictlán no se hace responsable por el uso inadecuado de los productos."] },
      { h: "Propiedad intelectual", p: ["La marca Mictlán, su logotipo, textos, fotografías y diseños son propiedad de Mictlán y están protegidos por la ley. No pueden reproducirse ni utilizarse sin autorización por escrito."] },
      { h: "Cambios a estos términos", p: ["Podemos actualizar estos Términos y Condiciones en cualquier momento. La versión vigente siempre será la publicada en este sitio."] },
      { h: "Ley aplicable", p: ["Estos Términos se rigen por las leyes de los Estados Unidos Mexicanos. Para cualquier controversia en materia de consumo aplica la Ley Federal de Protección al Consumidor (PROFECO)."] }
    ]
  });
}

function PrivacyPage() {
  return l(LegalPage, {
    title: "Política de privacidad",
    updated: "junio de 2026",
    intro: "En Mictlán valoramos tu privacidad. Este Aviso describe cómo recabamos, usamos y protegemos tus datos personales, conforme a la Ley Federal de Protección de Datos Personales en Posesión de los Particulares (LFPDPPP).",
    sections: [
      { h: "Responsable de tus datos", p: ["El responsable del tratamiento de tus datos personales es Mictlán, con contacto en mictlan.talento@gmail.com."] },
      { h: "Datos que recabamos", p: ["Recabamos los datos que nos proporcionas al comprar o contactarnos: nombre, correo electrónico, teléfono, dirección de envío y los detalles de tu pedido.", "Los pagos se procesan a través de una pasarela externa; no almacenamos los datos completos de tu tarjeta."] },
      { h: "Para qué usamos tus datos", p: ["Usamos tus datos para procesar y enviar tus pedidos, brindarte atención, gestionar cambios o devoluciones y —solo si lo autorizas— enviarte novedades y promociones. Puedes solicitar dejar de recibir comunicaciones en cualquier momento."] },
      { h: "Con quién los compartimos", p: ["Compartimos únicamente los datos necesarios con empresas de paquetería (para entregar tu pedido) y con la pasarela de pago (para procesar el cobro). No vendemos ni rentamos tus datos a terceros."] },
      { h: "Cookies y analítica", p: ["El sitio puede usar cookies y herramientas de análisis para mejorar tu experiencia de navegación. Puedes deshabilitar las cookies desde la configuración de tu navegador."] },
      { h: "Tus derechos (ARCO)", p: ["Tienes derecho a Acceder, Rectificar, Cancelar u Oponerte al tratamiento de tus datos personales, así como a revocar tu consentimiento. Para ejercer estos derechos, escríbenos a mictlan.talento@gmail.com."] },
      { h: "Seguridad", p: ["Aplicamos medidas razonables para proteger tu información. Ningún medio es completamente infalible, pero trabajamos para resguardar tus datos en todo momento."] },
      { h: "Cambios a este aviso", p: ["Podemos actualizar esta Política de Privacidad cuando sea necesario. La versión vigente estará siempre disponible en este sitio."] }
    ]
  });
}

function FaqPage() {
  return l(LegalPage, {
    title: "Preguntas frecuentes",
    numbered: false,
    intro: "Resolvemos las dudas más comunes sobre tus pedidos en Mictlán. Si necesitas algo más, escríbenos por WhatsApp.",
    sections: [
      { h: "¿Cómo hago un pedido?", p: ["Explora el catálogo, agrega tus artículos al carrito y finaliza la compra. También puedes apartar o cotizar directamente por WhatsApp."] },
      { h: "¿Cuánto tarda en llegar mi pedido?", p: ["Nuestros artículos se elaboran bajo pedido, así que el tiempo total es: tiempo de producción + tiempo de envío. Al confirmar tu compra te indicamos la fecha estimada de entrega."] },
      { h: "¿Hacen entregas en CDMX?", p: ["Sí. Ofrecemos entrega local en la Ciudad de México (punto de encuentro o mensajería local) y envíos a todo México."] },
      { h: "¿Los productos son hechos a mano?", p: ["La mayoría sí. Por ser artesanales pueden existir ligeras variaciones de color, forma o medida respecto a las fotografías."] },
      { h: "¿Puedo personalizar un artículo?", p: ["Varios artículos se pueden personalizar o hacer por encargo. Escríbenos por WhatsApp para cotizar tiempo y costo."] },
      { h: "¿Qué formas de pago aceptan?", p: ["Aceptamos tarjeta, transferencia y pago en efectivo (OXXO), mediante plataformas de pago seguras."] },
      { h: "¿Puedo cambiar o cancelar mi pedido?", p: ["Si tu pedido aún no entra a producción, sí. Una vez iniciada la elaboración (al ser bajo pedido) ya no es posible. Consulta la sección de Cambios y devoluciones."] },
      { h: "¿Cómo doy seguimiento a mi pedido?", p: ["Te avisamos cuando tu pedido entra a producción y cuando se envía; te compartimos el número de guía o el estatus por WhatsApp o correo."] }
    ]
  });
}

function EnviosPage() {
  return l(LegalPage, {
    title: "Envíos y entregas",
    updated: "junio de 2026",
    intro: "Somos una tienda en línea. Manejamos entrega local en CDMX y envíos a todo México. Como nuestros artículos se hacen bajo pedido, el tiempo total considera la producción más el envío.",
    sections: [
      { h: "Tiempo de producción", p: ["La mayoría de los artículos se elaboran bajo pedido. El tiempo estimado de producción es de 3 a 10 días hábiles, según la pieza y la temporada. Te confirmamos la fecha al concretar tu compra."] },
      { h: "Entrega en CDMX", p: ["Ofrecemos entrega local en la Ciudad de México mediante punto de encuentro acordado o mensajería local. El costo y el horario dependen de la zona."] },
      { h: "Envíos nacionales", p: ["Enviamos a todo México por paquetería. El tiempo de tránsito estimado es de 2 a 6 días hábiles una vez terminada la producción."] },
      { h: "Costos de envío", p: ["El costo se calcula según el destino y el peso o volumen del paquete, y se muestra antes de finalizar tu compra."] },
      { h: "Seguimiento", p: ["Cuando tu pedido se envía, te compartimos el número de guía. Los tiempos de la paquetería son estimados y pueden variar por causas ajenas a Mictlán."] },
      { h: "Empaque", p: ["Empacamos con cuidado cada pieza —especialmente las frágiles— para que llegue en perfecto estado."] }
    ]
  });
}

function CambiosPage() {
  return l(LegalPage, {
    title: "Cambios y devoluciones",
    updated: "junio de 2026",
    intro: "Queremos que ames tus piezas. Como trabajamos con artículos hechos bajo pedido, aplican las siguientes condiciones.",
    sections: [
      { h: "Producto con defecto o dañado", p: ["Si tu artículo llega con un defecto de fábrica o dañado en el envío, contáctanos dentro de los 5 días naturales posteriores a la entrega, adjuntando fotografías. Te ofrecemos reposición o reembolso."] },
      { h: "Artículos personalizados o bajo pedido", p: ["Por elaborarse especialmente para ti, los artículos personalizados o por encargo no admiten cambio ni devolución, salvo que presenten un defecto."] },
      { h: "Condiciones para cambios", p: ["El producto debe estar sin uso y en su empaque original. Los cambios están sujetos a disponibilidad."] },
      { h: "Cancelaciones", p: ["Puedes cancelar tu pedido sin costo siempre que aún no haya entrado a producción. Una vez iniciada la elaboración, no es posible cancelar."] },
      { h: "Cómo solicitarlo", p: ["Escríbenos por WhatsApp o a mictlan.talento@gmail.com con tu número de pedido y, si aplica, fotografías del artículo."] },
      { h: "Reembolsos", p: ["Una vez aprobada la solicitud, el reembolso se realiza al mismo medio de pago en un plazo aproximado de 5 a 10 días hábiles."] }
    ]
  });
}

function TallasPage() {
  return l(LegalPage, {
    title: "Guía de tallas",
    numbered: false,
    intro: "Usa esta guía para elegir tu talla. Las medidas están en centímetros (ancho × alto) y son aproximadas, con una tolerancia de ±0.5 cm. Abajo encontrarás las tablas del Jersey Mictlán y de las playeras 100% algodón.",
    note: "¿Dudas con tu talla? Escríbenos por WhatsApp con tus medidas y te ayudamos a elegir.",
    sections: [
      { h: "Jersey Mictlán",
        p: ["Corte regular fit · Tolerancia ±0.5 cm · Medidas en centímetros."],
        table: { head: ["Tallas", "Ancho | cm", "Alto | cm"], rows: [["XCH", "51", "70"], ["CH", "53", "73"], ["M", "55", "76"], ["G", "57", "79"], ["XG", "59", "82"], ["EEG", "61", "85"]] } },
      { h: "Playera 100% algodón · Corte fit",
        p: ["100% algodón peinado · Corte fit · Medidas en centímetros (ancho × alto), tolerancia ±0.5 cm."] },
      { h: "Dama",
        table: { head: ["Talla", "Ancho | cm", "Largo | cm"], rows: [["S / CH", "41.5", "60"], ["M / M", "44.5", "63.5"], ["L / G", "47", "66"], ["XL / EG", "49.5", "68.5"], ["2XL / 2EG", "52", "71"]] } },
      { h: "Caballero",
        table: { head: ["Talla", "Ancho | cm", "Largo | cm"], rows: [["S / CH", "45.5", "69.5"], ["M / M", "50.5", "72"], ["L / G", "55.5", "74.5"], ["XL / EG", "60.5", "77"], ["2XL / 2EG", "66", "80.5"]] } },
      { h: "Niñ@",
        table: { head: ["Talla", "Ancho | cm", "Largo | cm"], rows: [["XS / XCH", "30.5", "44"], ["S / CH", "34", "47"], ["M / M", "38", "52"], ["L / G", "41.5", "57"], ["XL / EG", "45.5", "63"]] } },
      { h: "Bebé · Pañalero",
        table: { head: ["Edad", "Ancho | cm", "Largo | cm"], rows: [["3 meses", "20", "35.5"], ["6 meses", "22.5", "38"], ["9 meses", "25", "40.5"], ["12 meses", "27.5", "43"], ["18 meses", "29", "45.5"], ["24 meses", "30.5", "48"]] } },
      { h: "Cómo medir", p: ["Ancho: mide la prenda de costado a costado, justo por debajo de las axilas.", "Largo / Alto: mide desde el hombro hasta el borde inferior de la prenda."] },
      { h: "Otros artículos", p: ["Varios productos (tazas, velas, accesorios y decoración) son de talla o medida única; sus dimensiones se indican en la ficha de cada artículo."] }
    ]
  });
}

Object.assign(window, { TermsPage, PrivacyPage, FaqPage, EnviosPage, CambiosPage, TallasPage });
