const ENT = {
  SAB: { s: "Bolsa", wa: "sab", quien: "Primero, a la SAB y por escrito. Si no responde o no estás de acuerdo con la respuesta, puedes acudir a la Superintendencia del Mercado de Valores (SMV)." },
  SAF: { s: "Fondos", wa: "saf", quien: "Primero, a la SAF y por escrito. Si no responde o no estás de acuerdo con la respuesta, puedes acudir a la Superintendencia del Mercado de Valores (SMV)." },
  Titulizadora: { s: "Patrimonios titulizados", wa: "tit", quien: "A la titulizadora y al representante de los inversionistas, por escrito. Si no hay respuesta, puedes acudir a la Superintendencia del Mercado de Valores (SMV)." }
};
const PLAZO = "Reclama cuanto antes. El plazo exacto depende de tu contrato y de las normas vigentes; lo confirmamos contigo en la primera llamada.";
const AYUDA = "Revisamos tus documentos y te decimos qué opciones tienes. Si decides seguir, preparamos el reclamo y lo acompañamos. No podemos asegurarte un resultado.";

const PROBLEMS = [
  { ent: "SAB", slug: "operacion-no-ordenada", t: "Hicieron una operación que no ordené", que: "En tu estado de cuenta aparece una compra o una venta que tú no pediste.", pruebas: ["Estado de cuenta donde aparece la operación.", "Tus órdenes: correos, mensajes o grabaciones.", "Contrato firmado con la SAB."] },
  { ent: "SAB", slug: "comisiones-desconocidas", t: "Me cobraron comisiones que no conocía", que: "Te descontaron cobros que no estaban en el tarifario que te entregaron.", pruebas: ["Tarifario o contrato firmado.", "Estados de cuenta con los cobros.", "Mensajes o correos con la SAB."] },
  { ent: "SAB", slug: "traslado-de-valores", t: "Pedí trasladar mis valores y no avanzan", que: "Pediste mover tus valores a otra SAB y el trámite está detenido.", pruebas: ["Solicitud de traslado con fecha.", "Respuestas de las dos SAB.", "Último estado de cuenta."] },
  { ent: "SAF", slug: "rescate-no-pagado", t: "Pedí mi rescate de un fondo y no me pagan", que: "Pediste retirar tu dinero del fondo y no te lo pagaron en el plazo.", pruebas: ["Solicitud de rescate con fecha.", "Reglamento del fondo.", "Estado de cuenta."] },
  { ent: "SAF", slug: "cambio-de-reglas", t: "Cambiaron las reglas o las comisiones del fondo", que: "El fondo cambió sus comisiones, sus reglas o sus plazos después de que entraste.", pruebas: ["Aviso del cambio.", "Reglamento anterior y reglamento nuevo.", "Fecha en que te enteraste."] },
  { ent: "SAF", slug: "sin-estado-de-cuenta", t: "No recibo mi estado de cuenta", que: "Dejaste de recibir la información sobre tu inversión.", pruebas: ["Último estado de cuenta recibido.", "Tus pedidos por escrito.", "Contrato o solicitud de suscripción."] },
  { ent: "Titulizadora", slug: "intereses-impagos", t: "Dejaron de pagar los intereses", que: "Llegó la fecha de pago y no recibiste los intereses de tus valores.", pruebas: ["Prospecto y cronograma de pagos.", "Constancia de tus valores.", "Comunicaciones recibidas."] },
  { ent: "Titulizadora", slug: "sin-informacion", t: "No me dan información del patrimonio", que: "Pides información sobre los bienes que respaldan tus valores y no te la dan.", pruebas: ["Tus pedidos por escrito.", "Prospecto.", "Últimos informes recibidos."] },
  { ent: "Titulizadora", slug: "asamblea", t: "Convocaron a una asamblea y no sé qué votar", que: "Te convocaron a una asamblea de inversionistas y no entiendes qué se propone.", plazo: "La asamblea tiene fecha fija. Busca asesoría antes de esa fecha para decidir con tiempo.", pruebas: ["Convocatoria.", "Documentos de la propuesta.", "Prospecto."] }
];

const IGUIDES = [
  { slug: "sab-o-saf", cat: "Inversionistas", tema: "Bolsa", t: "SAB o SAF: ¿qué diferencia hay?", p: "Una te ayuda a comprar y vender en bolsa; la otra administra fondos.", min: 3,
    body: ["Una sociedad agente de bolsa (SAB) compra y vende valores por encargo tuyo. Tú decides qué comprar o vender y la SAB ejecuta tu orden a cambio de una comisión.", "Una sociedad administradora de fondos (SAF) administra fondos mutuos o fondos de inversión. Cuando inviertes en un fondo no eliges cada valor: aportas a un patrimonio común que la SAF invierte según el reglamento del fondo.", "En los dos casos firmas un contrato y recibes información periódica. Con una SAB, revisa tu contrato de intermediación, tus pólizas y tu estado de cuenta. Con una SAF, revisa el reglamento de participación, las comisiones y las condiciones de rescate."] },
  { slug: "entidad-autorizada", cat: "Inversionistas", tema: "Bolsa", t: "Cómo verificar que una entidad está autorizada", p: "Dónde buscar y qué revisar antes de entregar tu dinero.", min: 2,
    body: ["Antes de entregar tu dinero, confirma que la entidad que te ofrece la inversión está autorizada. Las SAB, las SAF y las sociedades titulizadoras necesitan autorización de la Superintendencia del Mercado de Valores (SMV), que publica en su portal la relación de entidades autorizadas.", "Verifica que el nombre y el RUC de quien te ofrece la inversión coincidan con los de la entidad registrada. Desconfía si te piden depositar en la cuenta de una persona o si te ofrecen una rentabilidad alta y segura.", "Si tienes dudas sobre una oferta, no transfieras dinero hasta revisarla."] },
  { slug: "cuenta-en-sab", cat: "Inversionistas", tema: "Bolsa", t: "Qué firmas al abrir una cuenta en una SAB", p: "Los documentos que te piden y los puntos que conviene leer.", min: 3,
    body: ["Al abrir una cuenta en una SAB firmas un contrato de intermediación y llenas una ficha de cliente. La SAB también evalúa tu perfil de inversionista: tu experiencia, tus objetivos y cuánto riesgo puedes asumir.", "Lee con atención las comisiones y gastos, cómo se dan y se confirman las órdenes, qué facultades le das a la SAB y cómo te va a informar. Ninguna operación debería hacerse sin una orden tuya.", "Pide copia de lo que firmes y guarda tus órdenes, pólizas y estados de cuenta. Los valores que compras se registran a tu nombre en CAVALI."] },
  { slug: "fondo-mutuo-o-de-inversion", cat: "Inversionistas", tema: "Fondos", t: "Fondo mutuo o fondo de inversión", p: "En qué se parecen, en qué se diferencian y cómo sales de cada uno.", min: 3,
    body: ["Los fondos mutuos invierten sobre todo en instrumentos que se pueden vender con facilidad, como depósitos, bonos o acciones. En general puedes entrar y salir con suscripciones y rescates, en los plazos que fija el reglamento.", "Los fondos de inversión suelen invertir en activos menos líquidos, como inmuebles, facturas o empresas, y tienen un plazo de vida definido. Por eso salir antes de tiempo puede no ser posible o tener condiciones especiales.", "En los dos casos, el reglamento de participación es el documento clave: fija la política de inversiones, las comisiones, los plazos y cómo puedes salir."] },
  { slug: "como-reclamar", cat: "Inversionistas", tema: "Fondos", t: "Cómo reclamar y ante quién", p: "Los pasos para reclamar por escrito y a quién acudir después.", min: 3,
    body: ["Empieza con un reclamo escrito ante la entidad: la SAB, la SAF o la titulizadora. Explica qué pasó y qué pides, y adjunta tus pruebas. Guarda el cargo o la constancia de recepción.", "Si la entidad no responde a tiempo o no estás de acuerdo con la respuesta, puedes presentar una denuncia ante la SMV o ante el Indecopi, según el caso. Algunos contratos prevén además un arbitraje.", "Los plazos importan. Si dudas sobre la vía o la fecha límite, consulta antes de que venza el plazo."] },
  { slug: "oferta-privada", cat: "Inversionistas", tema: "Financiamiento", t: "Qué es una oferta privada y qué riesgos tiene", p: "Por qué tiene menos controles y qué preguntar antes de entrar.", min: 3,
    body: ["Una oferta privada se dirige a un grupo limitado de inversionistas, por lo general institucionales o que invierten montos altos. A diferencia de la oferta pública, la SMV no revisa ni inscribe los valores que se ofrecen.", "Eso significa menos información obligatoria y menos controles. Antes de invertir, pide los documentos de la emisión, revisa quién la estructura, qué garantías tiene y cómo podrías salir.", "Pregunta siempre por qué la oferta es privada y si cumples los requisitos para participar."] }
];

const scrollToId = (id) => { const el = document.getElementById(id); if (el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 100, behavior: "smooth" }); };
const InfoNote = () => <p className="fine dark info-note">Contenido informativo. No reemplaza una asesoría legal para tu caso ni es una recomendación de inversión.</p>;

function Problems() {
  return <div className="pgroups">{Object.keys(ENT).map((e) => <div className="pgroup" key={e}>
    <h3>{e}<span>{ENT[e].s}</span></h3>
    <div className="pcards">{PROBLEMS.filter((p) => p.ent === e).map((p) => <a className="prob rv" key={p.slug} href={"#/inversionistas/problemas/" + p.slug}><p>{p.t}</p><span className="more">Qué hacer <Icon name="arrow-right" size={14} /></span></a>)}</div>
  </div>)}</div>;
}

function ProblemPage({ slug }) {
  const p = PROBLEMS.find((x) => x.slug === slug);
  if (!p) return <NotFound />;
  const e = ENT[p.ent];
  const secs = [
    ["que-paso", "Qué pasó", <p>{p.que}</p>],
    ["plazo", "Qué plazo corre", <p>{p.plazo || PLAZO}</p>],
    ["pruebas", "Qué pruebas guardar", <ul>{p.pruebas.map((x) => <li key={x}>{x}</li>)}</ul>],
    ["reclamar", "A quién reclamar", <p>{e.quien}</p>],
    ["ayuda", "Cómo te ayudamos", <p>{AYUDA}</p>]
  ];
  return <>
    <PageHero label={"Problemas frecuentes · " + p.ent} title={p.t} />
    <section className="ivory sec">
      <div className="wrap">
        <a className="tlink" href="#/inversionistas/problemas"><Icon name="arrow-left" size={14} />Problemas frecuentes</a>
        <div className="doc">
          <nav className="toc" aria-label="Índice"><p className="k">Índice</p><ol>{secs.map(([id, t]) => <li key={id}><a href={"#" + id} onClick={(ev) => { ev.preventDefault(); scrollToId(id); }}>{t}</a></li>)}</ol></nav>
          <div>{secs.map(([id, t, body], k) => <section className="doc-sec" id={id} key={id}><p className="rt-n">{"0" + (k + 1)}</p><h2>{t}</h2>{body}</section>)}
            <InfoNote />
            <div className="btns"><Button variant="accent" iconStart={<Icon name="message-circle" size={18} />} onClick={() => openWA(e.wa)}>Escríbenos por WhatsApp</Button><Button variant="secondary" onClick={toAgenda}>Agenda una llamada gratuita</Button></div>
          </div>
        </div>
      </div>
    </section>
    <ClosingBand ctx="inversionistas" />
  </>;
}

function InvestorGuides({ items = IGUIDES }) {
  return <div className="guides">{items.map((g) => <a className="guide rv" key={g.slug} href={"#/publicaciones/guias/" + g.slug}>
    <img className="wm" src={A + "/logo/isotype-white.png"} alt="" aria-hidden="true" />
    <p className="k">Guía · {g.min} min de lectura</p>
    <h4>{g.t}</h4>
    <p>{g.p}</p>
    <div className="go"><span className="more">Leer guía <Icon name="arrow-right" size={14} /></span></div>
  </a>)}</div>;
}

function ReadingPage({ label, title, lead, body, back, ctx }) {
  return <>
    <PageHero label={label} title={title} lead={lead} />
    <section className="ivory sec">
      <div className="wrap">
        <a className="tlink" href={back[0]}><Icon name="arrow-left" size={14} />{back[1]}</a>
        <div className="doc-body">{body.map((t) => <p key={t}>{t}</p>)}<InfoNote /></div>
      </div>
    </section>
    <ClosingBand ctx={ctx} />
  </>;
}

function GuidePage({ slug }) {
  const g = IGUIDES.find((x) => x.slug === slug);
  if (!g) return <NotFound />;
  return <ReadingPage label={"Guía para inversionistas · " + g.min + " min de lectura"} title={g.t} lead={g.p} body={g.body} back={["#/publicaciones/guias", "Guías"]} ctx="inversionistas" />;
}

function ArticlePage({ slug }) {
  const a = ARTICLES.find((x) => x.slug === slug);
  if (!a) return <NotFound />;
  return <ReadingPage label={a.cat + " · " + a.tema} title={a.t} lead={a.p} body={a.body} back={["#/publicaciones", "Publicaciones"]} ctx="general" />;
}

Object.assign(window, { scrollToId, PROBLEMS, IGUIDES, InfoNote, Problems, ProblemPage, InvestorGuides, GuidePage, ArticlePage });
