// ── Legal pages (ES / UE) ─────────────────────────────────────────────────────
// Aviso legal (LSSI), Política de privacidad (RGPD/LOPDGDD), Política de cookies
// y Términos de uso, redactados según el funcionamiento REAL de Atlas Method:
// una PWA 100% del lado del cliente (sin backend, sin cuentas, sin cookies;
// todos los datos se guardan en el navegador del propio dispositivo).
//
// HUECOS A COMPLETAR por el titular: [NOMBRE], [NIF], [DOMICILIO],
// [LOCALIDAD]. Textos en lenguaje claro; conviene una revisión por asesoría
// legal antes de publicar en producción.

const LG = {
  page: '#FAFAF7', card: '#FFFFFF', ink: '#0F1A2E', body: '#2C3542',
  sub: '#5C6477', muted: '#8A8F9C', border: 'rgba(15,26,46,0.08)', blue: '#1a4fa0',
};

const LEGAL_LAST_UPDATE = '[FECHA]';

// Convierte las URLs de un texto en enlaces clicables (se abren en pestaña nueva).
function lgLinkify(text) {
  if (typeof text !== 'string' || text.indexOf('http') === -1) return text;
  const parts = text.split(/(https?:\/\/[^\s)]+)/g);
  return parts.map((p, i) =>
    /^https?:\/\//.test(p)
      ? <a key={i} href={p} target="_blank" rel="noopener noreferrer" style={{ color: '#1a4fa0', textDecoration: 'underline', wordBreak: 'break-word' }}>{p}</a>
      : p
  );
}

// Shared reader layout. Renders real <h1>/<h2> headings (también mejora a11y).
function LegalLayout({ title, intro, sections, isMobile, navigate }) {
  return (
    <section style={{ background: LG.page, minHeight: '100vh', padding: isMobile ? '24px 16px calc(80px + env(safe-area-inset-bottom))' : '56px 32px 96px' }}>
      <div style={{ maxWidth: 760, margin: '0 auto' }}>
        <button onClick={() => navigate('/perfil')} style={{ display: 'inline-flex', alignItems: 'center', gap: 8, marginBottom: 28, background: 'none', border: 'none', cursor: 'pointer', fontFamily: '"Inter",system-ui', fontSize: 14, fontWeight: 600, color: LG.sub, padding: 0 }}>
          ← Volver
        </button>
        <h1 style={{ fontFamily: '"Inter",system-ui', fontSize: isMobile ? 28 : 38, fontWeight: 800, color: LG.ink, letterSpacing: -0.8, lineHeight: 1.1, margin: '0 0 10px' }}>{title}</h1>
        <div style={{ fontFamily: 'ui-monospace,Menlo,monospace', fontSize: 11, color: LG.muted, marginBottom: 26 }}>Última actualización: {LEGAL_LAST_UPDATE}</div>
        {intro && <p style={{ fontFamily: '"Inter",system-ui', fontSize: 15.5, color: LG.body, lineHeight: 1.65, margin: '0 0 28px' }}>{intro}</p>}
        {sections.map((s, i) => (
          <div key={i} style={{ marginBottom: 26 }}>
            {s.h && <h2 style={{ fontFamily: '"Inter",system-ui', fontSize: isMobile ? 18 : 20, fontWeight: 800, color: LG.ink, letterSpacing: -0.3, margin: '0 0 10px' }}>{s.h}</h2>}
            {s.p && s.p.map((para, j) => (
              <p key={j} style={{ fontFamily: '"Inter",system-ui', fontSize: 15, color: LG.body, lineHeight: 1.65, margin: '0 0 12px' }}>{lgLinkify(para)}</p>
            ))}
            {s.list && (
              <ul style={{ margin: '4px 0 12px', paddingLeft: 20, display: 'flex', flexDirection: 'column', gap: 7 }}>
                {s.list.map((li, j) => <li key={j} style={{ fontFamily: '"Inter",system-ui', fontSize: 15, color: LG.body, lineHeight: 1.6 }}>{lgLinkify(li)}</li>)}
              </ul>
            )}
          </div>
        ))}
        <div style={{ marginTop: 36, padding: '14px 16px', borderRadius: 12, background: 'rgba(42,111,219,0.05)', border: '1px solid rgba(42,111,219,0.14)', fontFamily: '"Inter",system-ui', fontSize: 13, color: LG.sub, lineHeight: 1.55 }}>
          Documento orientativo redactado según el funcionamiento real de la aplicación. Completa los datos entre corchetes y revísalo con asesoría legal antes de publicarlo.
        </div>
      </div>
    </section>
  );
}

// ── Texto compartido ──────────────────────────────────────────────────────────
const LG_TITULAR = 'Titular: [NOMBRE] · NIF: [NIF] · Domicilio: [DOMICILIO] · Correo de contacto: atlasmethod.app@gmail.com.';
const LG_LOCAL = 'Atlas Method es una aplicación web progresiva (PWA) que funciona por completo en tu dispositivo: no hay cuentas de usuario ni servidores propios. Todo lo que registras (perfil, entrenamientos, conversaciones con el Coach y preferencias) se guarda únicamente en el almacenamiento local (localStorage) de tu navegador y no se envía a Atlas.';
const LG_TERCEROS = 'La app se sirve desde el proveedor de alojamiento Vercel Inc. (EE. UU.) y carga algunas imágenes desde terceros: fotografías decorativas de Unsplash (Unsplash, EE. UU.) e imágenes de ejercicios desde GitHub (free-exercise-db). Al cargar estos recursos, tu navegador comunica tu dirección IP a dichos proveedores, como ocurre con cualquier contenido remoto. No se cargan analíticas ni rastreadores, y no se les envía ningún dato de tu perfil ni de salud.';

function AvisoLegalPage() {
  const isMobile = useIsMobile(); const { navigate } = useRoute();
  return <LegalLayout isMobile={isMobile} navigate={navigate} title="Aviso legal"
    intro="En cumplimiento de la Ley 34/2002, de servicios de la sociedad de la información y de comercio electrónico (LSSI-CE), se facilita la siguiente información."
    sections={[
      { h: 'Titular del sitio', p: [LG_TITULAR] },
      { h: 'Objeto', p: ['Este aviso regula el acceso y uso de la aplicación web Atlas Method (en adelante, “la app”), una herramienta de entrenamiento basada en evidencia científica. El acceso a la app es gratuito y no requiere registro.'] },
      { h: 'Propiedad intelectual e industrial', p: ['Los textos, el diseño, el código y los contenidos originales de la app pertenecen a su titular o se usan con licencia. Algunos recursos de terceros se emplean bajo sus respectivas licencias; consulta la página de Créditos y licencias.'] },
      { h: 'Responsabilidad', p: ['La app se ofrece “tal cual”. El titular no garantiza la disponibilidad ininterrumpida del servicio ni se responsabiliza de los daños derivados de un uso inadecuado. El contenido tiene finalidad informativa y formativa y no sustituye el consejo de un profesional (véanse los Términos de uso).'] },
      { h: 'Legislación aplicable', p: ['Este aviso se rige por la legislación española. Para cualquier controversia, las partes se someten a los juzgados y tribunales de [LOCALIDAD], salvo que la normativa de consumo disponga otro fuero.'] },
    ]} />;
}

function PrivacidadPage() {
  const isMobile = useIsMobile(); const { navigate } = useRoute();
  return <LegalLayout isMobile={isMobile} navigate={navigate} title="Política de privacidad"
    intro="Esta política explica cómo se tratan tus datos en Atlas Method, conforme al Reglamento (UE) 2016/679 (RGPD) y a la Ley Orgánica 3/2018 (LOPDGDD)."
    sections={[
      { h: 'Responsable del tratamiento', p: [LG_TITULAR] },
      { h: 'Dónde se guardan tus datos', p: [LG_LOCAL, 'Esto significa que Atlas no tiene acceso a tus datos: residen en tu navegador. Si borras los datos del navegador, desinstalas la app o usas otro dispositivo, esa información no viaja contigo salvo que la exportes manualmente.'] },
      { h: 'Qué datos se tratan', p: ['Para funcionar, la app guarda en tu dispositivo:'],
        list: [
          'Datos de entrenamiento: objetivo, experiencia, días por semana, equipo, prioridades musculares, rutinas e historial de sesiones (cargas, repeticiones, RPE/RIR).',
          'Datos opcionales del perfil: sexo, edad, altura y peso.',
          'Datos de salud (opcionales): lesiones actuales o pasadas, limitaciones y ejercicios a evitar, incluidas notas de texto libre.',
          'Conversaciones con Atlas Coach y tus preferencias de la app.',
        ] },
      { h: 'Finalidad y base jurídica', p: ['Los datos se usan solo para prestar las funciones de la app en tu dispositivo (generar y ajustar rutinas, registrar tu progreso y personalizar recomendaciones). La base jurídica es la ejecución de la relación de uso que solicitas y tu consentimiento, que prestas al introducir cada dato opcional. Los datos de salud son siempre opcionales y solo se tratan si decides facilitarlos; se guardan únicamente en tu dispositivo.'] },
      { h: 'Terceros y transferencias', p: [LG_TERCEROS, 'Estos proveedores pueden estar ubicados fuera del Espacio Económico Europeo. Atlas no realiza transferencias internacionales de tus datos de perfil o de salud, porque esos datos no salen de tu dispositivo.'] },
      { h: 'Conservación', p: ['Los datos permanecen en tu dispositivo hasta que los eliminas tú (desde la app, borrando los datos del navegador o desinstalando la PWA).'] },
      { h: 'Tus derechos', p: ['Como los datos están bajo tu control en tu dispositivo, puedes acceder a ellos, rectificarlos y suprimirlos directamente desde la app en cualquier momento. Para cualquier consulta sobre protección de datos puedes escribir a atlasmethod.app@gmail.com. También puedes presentar una reclamación ante la Agencia Española de Protección de Datos (www.aepd.es).'] },
      { h: 'Contacto por correo', p: ['Si nos escribes a atlasmethod.app@gmail.com (por ejemplo, desde “Enviar opinión” o cualquier opción de “Ayuda y sugerencias”), los datos de ese correo se usan únicamente para responder a tu consulta y no se ceden a terceros. La app no recoge ningún dato en estos casos: solo se abre tu cliente de correo.'] },
      { h: 'Menores', p: ['El uso de la app requiere tener al menos 14 años. Si eres menor de esa edad, no debes usar Atlas Method ni facilitar datos.'] },
    ]} />;
}

function CookiesPage() {
  const isMobile = useIsMobile(); const { navigate } = useRoute();
  return <LegalLayout isMobile={isMobile} navigate={navigate} title="Política de cookies"
    intro="Atlas Method no utiliza cookies de seguimiento ni publicitarias. Por eso no se muestra un banner de consentimiento."
    sections={[
      { h: '¿Usa cookies esta app?', p: ['No. La app no instala cookies de analítica, publicidad ni perfilado. Tampoco hay herramientas de medición de audiencia.'] },
      { h: 'Almacenamiento local (técnico)', p: ['Para funcionar, Atlas utiliza el almacenamiento local del navegador (localStorage) y la caché del service worker. Este almacenamiento es técnicamente necesario para prestar el servicio que solicitas y, conforme a la guía de la AEPD, está exento del deber de consentimiento previo. Se usa para:'],
        list: [
          'Guardar tu perfil, rutinas, historial y preferencias en tu dispositivo.',
          'Recordar ajustes de la interfaz (por ejemplo, avisos ya cerrados).',
          'Permitir que la app funcione sin conexión (caché de la propia aplicación y de las imágenes).',
        ] },
      { h: 'Recursos de terceros', p: [LG_TERCEROS] },
      { h: 'Cómo eliminarlo', p: ['Puedes borrar este almacenamiento en cualquier momento desde los ajustes de tu navegador (borrar datos del sitio) o desinstalando la PWA. Al hacerlo se eliminarán también tus datos guardados en el dispositivo.'] },
    ]} />;
}

function TerminosPage() {
  const isMobile = useIsMobile(); const { navigate } = useRoute();
  return <LegalLayout isMobile={isMobile} navigate={navigate} title="Términos de uso"
    intro="Estos términos regulan el uso de Atlas Method. Al utilizar la app, aceptas estas condiciones."
    sections={[
      { h: 'Edad mínima', p: ['Para usar Atlas Method debes tener al menos 14 años.'] },
      { h: 'Aviso de salud', p: ['Atlas Method ofrece información y herramientas de entrenamiento con fines formativos. No es un servicio médico y no sustituye el consejo, diagnóstico o tratamiento de un profesional sanitario. Antes de empezar un programa de ejercicio —y especialmente si tienes lesiones, patologías, estás embarazada, tomas medicación o notas dolor o malestar— consulta a un profesional de la salud. El uso de la información de la app es responsabilidad del usuario.'] },
      { h: 'Uso de la app', p: ['Te comprometes a usar la app de forma lícita y conforme a estos términos. La app se ofrece de forma gratuita y “tal cual”, sin garantía de resultados concretos: el progreso depende de múltiples factores personales.'] },
      { h: 'Propiedad intelectual', p: ['El contenido y el código originales pertenecen a su titular o se usan con licencia. Los recursos de terceros se emplean bajo sus licencias (véase Créditos y licencias).'] },
      { h: 'Limitación de responsabilidad', p: ['En la medida permitida por la ley, el titular no será responsable de los daños derivados del uso o de la imposibilidad de uso de la app, ni de las decisiones que tomes basándote en su contenido. Nada en estos términos excluye responsabilidades que no puedan limitarse legalmente.'] },
      { h: 'Modificaciones', p: ['El titular puede actualizar estos términos y las políticas asociadas. La versión vigente es la publicada en la app.'] },
      { h: 'Ley aplicable', p: ['Estos términos se rigen por la legislación española. Para cualquier controversia, las partes se someten a los juzgados y tribunales de [LOCALIDAD], sin perjuicio del fuero que corresponda a las personas consumidoras.'] },
      { h: 'Contacto', p: ['Para cualquier cuestión: atlasmethod.app@gmail.com.'] },
    ]} />;
}

function CreditosPage() {
  const isMobile = useIsMobile(); const { navigate } = useRoute();
  return <LegalLayout isMobile={isMobile} navigate={navigate} title="Créditos y licencias"
    intro="Atlas Method se apoya en recursos de código abierto y de uso libre. Agradecemos a sus autores y reconocemos sus licencias."
    sections={[
      { h: 'Base de datos de ejercicios', p: ['Imágenes y datos de ejercicios: free-exercise-db (yuhonas), bajo The Unlicense (dominio público). https://github.com/yuhonas/free-exercise-db'] },
      { h: 'Mapa muscular', p: ['Rutas SVG del mapa anatómico: react-muscle-highlighter (Sorooj Shehryar), bajo licencia MIT. https://github.com/soroojshehryar/react-muscle-highlighter'] },
      { h: 'Fotografías', p: ['Fotografías de Unsplash, bajo la Unsplash License (https://unsplash.com/license). Fotos con autoría identificada:'],
        list: [
          'Plantilla Upper/Lower — «Gimnasio vacío con racks de potencia, barras y discos», Mirko Meister. https://unsplash.com/photos/j4T5z94b8ns',
          'Aula · Hipertrofia — «Espalda musculada de un hombre en penumbra», Monis Yousafzai. https://unsplash.com/photos/LH5Pg8WHiNM',
          'Aula · Fuerza — «Persona levantando una barra en un gimnasio con poca luz», Anastase Maragos. https://unsplash.com/photos/Al2wRDIJBjQ',
          'Aula · Biomecánica — «Maquetas anatómicas de la articulación de la rodilla», CHUTTERSNAP. https://unsplash.com/photos/Iq7CXTzBNbQ',
          'Aula · Suplementos — «Cacito de proteína en polvo sobre una mesa», Alex Saks. https://unsplash.com/photos/MUlIfSNODXE',
          'Artículo «¿El cardio te hace perder músculo?» — «Gimnasio luminoso con cintas de correr y bicicletas estáticas», eran design. https://unsplash.com/photos/X0rfCRWl690',
          'Artículo «Frecuencia de entrenamiento» — «Par de mancuernas sobre una pista de atletismo», Alora Griffiths. https://unsplash.com/photos/zEAX0E0KJxs',
          'Artículo «HRV» — «Pulsera de actividad en la muñeca», Luismi Sánchez. https://unsplash.com/photos/mmfs0e7wtiQ',
          'Artículo «Deload» — «Persona estirando al aire libre», Michael DeMoya. https://unsplash.com/photos/dZW-IiWXFek',
          'Artículo «Dormir» — «Cama deshecha con luz suave», Quin Stevenson. https://unsplash.com/photos/3oyeaivM_fE',
          'Artículo «Proteína» — «Plato con huevo, aguacate y verduras», Brooke Lark. https://unsplash.com/photos/jUPOXXRNdcA',
          'Artículo «Mecanismos de hipertrofia» — «Brazo levantando una mancuerna», engin akyurt. https://unsplash.com/photos/1lkg9MLl_rU',
          'Artículo «RPE y RIR» — «Mujer levantando pesas en un gimnasio», Land O’Lakes, Inc. https://unsplash.com/photos/IYLLF511aOY',
          'Artículo «Sobrecarga progresiva» — «Barra con discos sobre suelo de madera», Alex Saks. https://unsplash.com/photos/4fH_sMlbKz8',
          'Otras fotografías: Unsplash (Unsplash License).',
        ] },
      { h: 'Tipografías', p: ['Inter, Space Grotesk e Instrument Serif, bajo SIL Open Font License 1.1. Se sirven autoalojadas desde la propia app.'] },
      { h: 'Librerías de software', p: ['React y ReactDOM (Meta), Babel Standalone y jsPDF, todas bajo licencia MIT. Se sirven autoalojadas desde la propia app.'] },
      { h: 'Textos completos de licencia', p: ['Los textos completos de las licencias anteriores se incluyen en el repositorio del proyecto, en la carpeta /LICENSES/.'] },
    ]} />;
}

// ── Enlaces legales reutilizables (footer + Perfil) ───────────────────────────
const LEGAL_LINKS = [
  ['Aviso legal', '/legal'],
  ['Privacidad', '/privacidad'],
  ['Cookies', '/cookies'],
  ['Términos', '/terminos'],
  ['Créditos', '/creditos'],
];

function LegalLinksRow({ color = '#5C6477', center = false, size = 13 }) {
  const { navigate } = useRoute();
  return (
    <nav aria-label="Enlaces legales" style={{ display: 'flex', flexWrap: 'wrap', gap: '8px 16px', justifyContent: center ? 'center' : 'flex-start' }}>
      {LEGAL_LINKS.map(([label, path]) => (
        <button key={path} onClick={() => navigate(path)} style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, fontFamily: '"Inter",system-ui', fontSize: size, fontWeight: 600, color }}>{label}</button>
      ))}
    </nav>
  );
}

// ── Aviso de salud en el primer uso ───────────────────────────────────────────
const HEALTH_ACK_KEY = 'atlas.health.ack.v1';

function HealthFirstRunNotice() {
  const { navigate } = useRoute();
  const [open, setOpen] = React.useState(() => { try { return localStorage.getItem(HEALTH_ACK_KEY) !== 'true'; } catch { return true; } });
  const accept = React.useCallback(() => { try { localStorage.setItem(HEALTH_ACK_KEY, 'true'); } catch {} setOpen(false); }, []);
  if (typeof useEscClose === 'function') useEscClose(accept, open);
  if (!open || typeof ReactDOM === 'undefined') return null;
  return ReactDOM.createPortal(
    <div style={{ position: 'fixed', inset: 0, zIndex: 6000, background: 'rgba(15,26,46,0.55)', display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 20, animation: 'fadeIn .2s ease' }}>
      <div role="dialog" aria-modal="true" aria-label="Aviso de salud" style={{ width: 440, maxWidth: '100%', background: '#fff', borderRadius: 18, border: `1px solid ${LG.border}`, boxShadow: '0 24px 70px rgba(15,26,46,0.35)', padding: '24px 24px 20px' }}>
        <div style={{ fontSize: 26, marginBottom: 8 }}>🩺</div>
        <h2 style={{ fontFamily: '"Inter",system-ui', fontSize: 20, fontWeight: 800, color: LG.ink, letterSpacing: -0.4, margin: '0 0 10px' }}>Antes de empezar</h2>
        <p style={{ fontFamily: '"Inter",system-ui', fontSize: 14.5, color: LG.body, lineHeight: 1.6, margin: '0 0 16px' }}>
          Atlas Method es una herramienta de entrenamiento con fines formativos y <strong>no sustituye el consejo médico</strong>. Antes de empezar a entrenar conviene consultar a un profesional de la salud, especialmente si tienes lesiones, patologías o cualquier limitación.
        </p>
        <button onClick={accept} className="wp-press" style={{ width: '100%', padding: '12px 16px', borderRadius: 12, border: 'none', cursor: 'pointer', background: LG.ink, color: '#fff', fontFamily: '"Inter",system-ui', fontSize: 14, fontWeight: 700 }}>
          Entendido
        </button>
        <div style={{ textAlign: 'center', marginTop: 12 }}>
          <button onClick={() => { accept(); navigate('/terminos'); }} style={{ background: 'none', border: 'none', cursor: 'pointer', fontFamily: '"Inter",system-ui', fontSize: 12.5, fontWeight: 600, color: LG.blue }}>Leer los Términos de uso</button>
        </div>
      </div>
    </div>,
    document.body
  );
}

// Page wrappers for the router
function AvisoLegalPageRoute() { return <AvisoLegalPage />; }

Object.assign(window, {
  AvisoLegalPage, PrivacidadPage, CookiesPage, TerminosPage, CreditosPage,
  LegalLinksRow, HealthFirstRunNotice,
});
