<?php

declare(strict_types=1);

require_once __DIR__ . '/init.php';

$role = (string) ($_SESSION['admin']['rol'] ?? '');
if ($role === 'Superadmin' || !tiene_permiso('ver_manual_admin')) {
    $_SESSION['flash_message'] = [
        'type' => 'error',
        'text' => 'El manual operativo está disponible únicamente para cuentas Admin autorizadas.',
    ];
    header('Location: index.php');
    exit;
}

$titulo_pagina = 'Manual de Uso';
require_once __DIR__ . '/admin_header.php';
?>
<div class="af-page af-manual-page">
    <header class="af-heading af-manual-hero">
        <div class="af-heading-main">
            <span class="af-heading-icon"><i class="fas fa-book-open"></i></span>
            <div>
                <p class="af-eyebrow">Guía completa para Admin</p>
                <h1>Manual operativo de Ave Fénix</h1>
                <p>Aprende el orden correcto para configurar buzones, dominios, clientes, cuentas, renovaciones, WhatsApp, referidos y reportes sin alterar la información de otros administradores.</p>
            </div>
        </div>
        <div class="af-heading-actions">
            <button type="button" id="printManual" class="af-btn af-btn-secondary"><i class="fas fa-print"></i> Imprimir</button>
            <a href="#inicio-rapido" class="af-btn af-btn-primary"><i class="fas fa-play"></i> Empezar</a>
        </div>
    </header>

    <section class="af-panel af-manual-search-panel">
        <div class="af-panel-body">
            <div class="af-manual-search-row">
                <div class="af-field af-manual-search-field">
                    <label class="af-label" for="manualSearch"><i class="fas fa-search"></i> Buscar dentro del manual</label>
                    <input id="manualSearch" type="search" class="af-control af-manual-search-input" placeholder="Ejemplo: Namecheap, renovación, WhatsApp, carga masiva o referido" autocomplete="off">
                    <span class="af-help">La búsqueda filtra las secciones visibles de esta página.</span>
                </div>
                <div class="af-manual-version"><i class="fas fa-circle-check"></i><div><strong>Manual actualizado</strong><span>Incluye las funciones operativas incorporadas al panel Admin.</span></div></div>
            </div>
        </div>
    </section>

    <nav class="af-manual-nav" aria-label="Contenido del manual">
        <a href="#inicio-rapido"><i class="fas fa-route"></i><span>Inicio rápido</span></a>
        <a href="#panel-principal"><i class="fas fa-gauge-high"></i><span>Panel principal</span></a>
        <a href="#buzones"><i class="fas fa-inbox"></i><span>Buzones</span></a>
        <a href="#dominios"><i class="fas fa-at"></i><span>Dominios</span></a>
        <a href="#clientes"><i class="fas fa-users"></i><span>Clientes</span></a>
        <a href="#cuentas"><i class="fas fa-envelope-open-text"></i><span>Cuentas</span></a>
        <a href="#referidos"><i class="fas fa-user-group"></i><span>Referidos</span></a>
        <a href="#reportes"><i class="fas fa-chart-line"></i><span>Reportes</span></a>
        <a href="#reglas-generales"><i class="fas fa-sliders"></i><span>Reglas generales</span></a>
        <a href="#problemas"><i class="fas fa-screwdriver-wrench"></i><span>Solución de problemas</span></a>
    </nav>

    <section class="af-manual-visual-map" aria-label="Mapa visual de la operación">
        <div class="af-manual-map-head">
            <span class="af-manual-map-icon"><i class="fas fa-compass"></i></span>
            <div><h2>Mapa visual de tu operación</h2><p>Cada módulo cumple una función concreta. Sigue el recorrido para mantener accesos, clientes y renovaciones conectados.</p></div>
        </div>
        <div class="af-manual-map-grid">
            <a href="#buzones" class="af-manual-map-card is-mail"><span><i class="fas fa-inbox"></i></span><div><strong>1. Buzón</strong><small>Conecta la bandeja real</small></div><i class="fas fa-arrow-right"></i></a>
            <a href="#dominios" class="af-manual-map-card is-domain"><span><i class="fas fa-at"></i></span><div><strong>2. Dominio</strong><small>Define asuntos y privacidad</small></div><i class="fas fa-arrow-right"></i></a>
            <a href="#clientes" class="af-manual-map-card is-client"><span><i class="fas fa-users"></i></span><div><strong>3. Cliente</strong><small>Entrega ID y contacto</small></div><i class="fas fa-arrow-right"></i></a>
            <a href="#cuentas" class="af-manual-map-card is-account"><span><i class="fas fa-envelope-open-text"></i></span><div><strong>4. Cuenta</strong><small>Asigna y controla vencimiento</small></div><i class="fas fa-arrow-right"></i></a>
            <a href="#reportes" class="af-manual-map-card is-report"><span><i class="fas fa-chart-line"></i></span><div><strong>5. Reporte</strong><small>Detecta pendientes y riesgos</small></div><i class="fas fa-arrow-right"></i></a>
            <a href="#reglas-generales" class="af-manual-map-card is-action"><span><i class="fab fa-whatsapp"></i></span><div><strong>6. Acción</strong><small>Notifica, renueva o corrige</small></div><i class="fas fa-check"></i></a>
        </div>
    </section>

    <section id="inicio-rapido" class="af-panel af-manual-section af-manual-section--coral" data-manual-section data-manual-search="inicio rápido orden configurar operación buzón dominio cliente cuenta">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-route"></i></span><div><h2>Inicio rápido: orden recomendado</h2><p>Respeta este orden para evitar listas vacías, relaciones incorrectas o cuentas sin acceso.</p></div></div>
        </div>
        <div class="af-panel-body">
            <ol class="af-manual-steps af-manual-steps--flow">
                <li><span>1</span><div><strong>Registra el buzón de entrada.</strong><p>Elige Gmail, Namecheap Private Email o cPanel/otro IMAP. El buzón es la bandeja real donde llegan los mensajes.</p></div></li>
                <li><span>2</span><div><strong>Configura el dominio.</strong><p>Relaciona el dominio de las cuentas con el buzón y selecciona los asuntos que se podrán localizar.</p></div></li>
                <li><span>3</span><div><strong>Crea al cliente.</strong><p>Registra nombre, correo y teléfono de WhatsApp. El teléfono permite preparar avisos y listas profesionales.</p></div></li>
                <li><span>4</span><div><strong>Registra o importa las cuentas.</strong><p>Asigna plataforma, dominio, cliente, fecha de renovación e IP/país cuando corresponda.</p></div></li>
                <li><span>5</span><div><strong>Entrega los accesos.</strong><p>Utiliza el ID del cliente o la lista de IDs individuales y revisa el mensaje antes de copiarlo o abrir WhatsApp.</p></div></li>
                <li><span>6</span><div><strong>Controla renovaciones y reportes.</strong><p>Filtra vencimientos, notifica cuentas seleccionadas, renueva y revisa la salud de la operación.</p></div></li>
            </ol>
            <div class="af-manual-callout af-manual-callout--warning"><i class="fas fa-triangle-exclamation"></i><div><strong>No empieces registrando cuentas sin configurar el buzón y el dominio.</strong><p>La cuenta puede guardarse, pero la consulta no tendrá una ruta completa para localizar los mensajes.</p></div></div>
        </div>
    </section>

    <section id="panel-principal" class="af-panel af-manual-section af-manual-section--blue" data-manual-section data-manual-search="panel principal tarjetas plan datos cuentas renovar whatsapp">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-gauge-high"></i></span><div><h2>Panel principal</h2><p>Vista rápida del plan, capacidad utilizada, vencimientos y accesos frecuentes.</p></div></div>
        </div>
        <div class="af-panel-body af-manual-content">
            <h3><i class="fas fa-chart-simple"></i> Qué debes revisar diariamente</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li><strong>Tarjetas principales:</strong> muestran la cantidad de buzones, dominios, clientes, cuentas y recursos utilizados.</li>
                <li><strong>Uso del plan:</strong> compara lo utilizado con el límite contratado. Cuando alcances un límite, el botón de nuevo registro puede quedar deshabilitado.</li>
                <li><strong>Cuentas por renovar:</strong> prioriza cuentas vencidas, que vencen hoy o que están próximas a vencer.</li>
                <li><strong>Cuentas por plataforma:</strong> permite detectar rápidamente qué servicios concentran más accesos.</li>
                <li><strong>Accesos rápidos:</strong> abre Buzones, Dominios, Clientes, Cuentas, Referidos y Mis reportes.</li>
            </ol>

            <h3><i class="fas fa-user-pen"></i> Botón Mis datos</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Actualiza el nombre mostrado en el panel.</li>
                <li>Actualiza el teléfono usado para comunicaciones.</li>
                <li>Permite cambiar la contraseña dejando intacto el correo de acceso.</li>
                <li>Al editar, deja el campo de contraseña vacío para conservar la actual.</li>
            </ul>

            <h3><i class="fas fa-gem"></i> Botón Mi plan</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Muestra el nombre y la vigencia del plan actual.</li>
                <li>Permite consultar planes disponibles.</li>
                <li>El botón de solicitud prepara el contacto con el Superadmin.</li>
                <li>No cambia el plan automáticamente: la activación depende de la confirmación correspondiente.</li>
            </ul>

            <h3><i class="fab fa-whatsapp"></i> Cuentas por renovar</h3>
            <p>El botón verde utiliza el teléfono registrado en el cliente y prepara un recordatorio con nombre, plataforma, correo, fecha y estado. Si el cliente no tiene teléfono, el botón aparece deshabilitado.</p>
            <div class="af-manual-callout af-manual-callout--info"><i class="fas fa-circle-info"></i><div><strong>Recomendación:</strong><p>Antes de contactar al cliente, confirma que la fecha y la plataforma de la cuenta sean correctas en Gestionar Cuentas.</p></div></div>
        </div>
    </section>

    <section id="buzones" class="af-panel af-manual-section af-manual-section--amber" data-manual-section data-manual-search="buzones gmail namecheap private email cpanel imap host puerto flags contraseña aplicación renovar">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-inbox"></i></span><div><h2>Buzones de entrada</h2><p>Configura la bandeja real donde el sistema buscará los mensajes.</p></div></div>
            <a href="gestionar_buzones.php" class="af-btn af-btn-primary"><i class="fas fa-arrow-up-right-from-square"></i> Abrir Buzones</a>
        </div>
        <div class="af-panel-body af-manual-content">
            <div class="af-manual-provider-grid">
                <article class="af-manual-provider-card af-manual-provider-card--gmail">
                    <span><i class="fab fa-google"></i></span><div><h3>Gmail</h3><p>Host, puerto y flags se completan y bloquean automáticamente.</p><code>imap.gmail.com · 993 · /imap/ssl</code></div>
                </article>
                <article class="af-manual-provider-card af-manual-provider-card--namecheap">
                    <span><i class="fas fa-envelope-open-text"></i></span><div><h3>Namecheap Private Email</h3><p>Utiliza el servicio Private Email, no el correo creado dentro de cPanel.</p><code>mail.privateemail.com · 993 · /imap/ssl</code></div>
                </article>
                <article class="af-manual-provider-card af-manual-provider-card--cpanel">
                    <span><i class="fas fa-server"></i></span><div><h3>cPanel u otro IMAP</h3><p>Se sugieren valores seguros, pero puedes editar host, puerto y flags.</p><code>mail.tudominio.com · 993 · /imap/ssl</code></div>
                </article>
            </div>

            <details class="af-manual-details" open>
                <summary><i class="fab fa-google"></i> Registrar un buzón Gmail</summary>
                <ol class="af-manual-numbered af-manual-visual-list">
                    <li>Pulsa <strong>Nuevo buzón</strong>.</li>
                    <li>En <strong>Tipo de buzón</strong>, selecciona <strong>Gmail</strong>.</li>
                    <li>Escribe la dirección completa, por ejemplo <code>codigos@tudominio.com</code> si esa cuenta está administrada por Google Workspace, o una dirección <code>@gmail.com</code>.</li>
                    <li>Activa la verificación en dos pasos de Google.</li>
                    <li>Pulsa <strong>Crear contraseña</strong> y genera una contraseña de aplicación.</li>
                    <li>Pega esa contraseña en el campo Contraseña. No uses la contraseña normal de Google.</li>
                    <li>Comprueba que el host sea <code>imap.gmail.com</code>, el puerto <code>993</code> y los flags <code>/imap/ssl</code>. Estos campos quedan bloqueados.</li>
                    <li>Indica una fecha de renovación o revisión y, de forma opcional, un teléfono.</li>
                    <li>Pulsa <strong>Guardar buzón</strong>. El sistema verificará la conexión antes de completar el registro.</li>
                </ol>
            </details>

            <details class="af-manual-details" open>
                <summary><i class="fas fa-envelope-open-text"></i> Registrar Namecheap Private Email</summary>
                <ol class="af-manual-numbered af-manual-visual-list">
                    <li>Selecciona <strong>Namecheap Private Email</strong> solamente cuando el buzón fue contratado como Private Email.</li>
                    <li>Escribe el correo completo y la contraseña del buzón.</li>
                    <li>El sistema utilizará automáticamente <code>mail.privateemail.com</code>, puerto <code>993</code> y <code>/imap/ssl</code>.</li>
                    <li>No selecciones esta opción solo porque el dominio fue comprado en Namecheap. Lo importante es dónde está alojado el correo.</li>
                    <li>Guarda y espera la verificación de conexión.</li>
                </ol>
            </details>

            <details class="af-manual-details" open>
                <summary><i class="fas fa-server"></i> Registrar cPanel u otro proveedor IMAP</summary>
                <ol class="af-manual-numbered af-manual-visual-list">
                    <li>Selecciona <strong>Correo de dominio / cPanel u otro IMAP</strong>.</li>
                    <li>Escribe el correo completo y la contraseña propia de ese buzón.</li>
                    <li>El host se sugiere como <code>mail.tudominio.com</code>. Reemplázalo con el hostname certificado del servidor cuando tu hosting así lo indique.</li>
                    <li>El puerto se precarga en <code>993</code> y los flags en <code>/imap/ssl</code>.</li>
                    <li><strong>Host, puerto y flags son editables</strong> en esta opción. Modifícalos únicamente con los datos entregados por el proveedor.</li>
                    <li>Si varias direcciones reenvían a una sola bandeja, registra solamente la bandeja receptora y relaciona los dominios con ella.</li>
                    <li>Si cada dirección tiene bandeja y contraseña propias, registra un buzón independiente para cada correo.</li>
                </ol>
            </details>

            <h3><i class="fas fa-pen"></i> Editar un buzón</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Pulsa el icono azul de editar.</li>
                <li>Al editar, la contraseña puede dejarse vacía para conservar la credencial guardada.</li>
                <li>En Gmail y Namecheap, los parámetros automáticos se mantienen bloqueados.</li>
                <li>En cPanel u otro IMAP, puedes corregir host, puerto o flags.</li>
                <li>Si cambias el proveedor, revisa nuevamente la contraseña y prueba la conexión.</li>
            </ul>

            <h3><i class="fas fa-trash"></i> Eliminar un buzón</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>La eliminación requiere confirmación.</li>
                <li>No podrás eliminar un buzón que todavía esté asociado a un dominio.</li>
                <li>Primero edita o elimina la asociación desde Dominios.</li>
                <li>La eliminación se realiza mediante POST y protección CSRF.</li>
            </ul>

            <h3><i class="fas fa-filter"></i> Buscar y filtrar</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Busca por correo, proveedor o teléfono.</li>
                <li>Filtra Gmail, Namecheap, cPanel/otro IMAP o registros heredados.</li>
                <li>El selector Mostrar permite 100, 200, 400 o Todos.</li>
                <li>El resumen debe indicar “Mostrando 1–N de N registros”.</li>
            </ul>

        </div>
    </section>

    <section id="dominios" class="af-panel af-manual-section af-manual-section--violet" data-manual-section data-manual-search="dominios asuntos público privado selector verde rojo solicitar asunto superadmin whatsapp">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-at"></i></span><div><h2>Dominios y privacidad de asuntos</h2><p>Relaciona cada dirección con el buzón correcto y define qué contenido requiere autenticación.</p></div></div>
            <a href="gestionar_dominios.php" class="af-btn af-btn-primary"><i class="fas fa-arrow-up-right-from-square"></i> Abrir Dominios</a>
        </div>
        <div class="af-panel-body af-manual-content">
            <h3><i class="fas fa-plus"></i> Crear un dominio</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Pulsa <strong>Nuevo dominio</strong>.</li>
                <li>Escribe únicamente el dominio, sin <code>https://</code>, rutas ni correos completos.</li>
                <li>Selecciona el buzón donde llegan los mensajes de ese dominio.</li>
                <li>El cliente asignado es opcional y sirve para relacionar el dominio con una operación específica.</li>
                <li>Revisa los asuntos agrupados por plataforma.</li>
                <li>Marca solamente los asuntos que realmente llegarán a ese dominio.</li>
                <li>Para cada asunto seleccionado, define la privacidad con el selector.</li>
                <li>Guarda el dominio.</li>
            </ol>

            <div class="af-manual-privacy-grid">
                <article class="af-manual-privacy af-manual-privacy--private"><i class="fas fa-lock"></i><div><strong>Privado · rojo</strong><p>El resultado puede localizarse, pero el contenido requiere el acceso privado correspondiente.</p></div></article>
                <article class="af-manual-privacy af-manual-privacy--public"><i class="fas fa-globe"></i><div><strong>Público · verde</strong><p>El asunto queda disponible en la ruta pública definida por el sistema.</p></div></article>
            </div>

            <h3><i class="fab fa-whatsapp"></i> Solicitar un nuevo asunto al Superadmin</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Pulsa <strong>Solicitar nuevo asunto</strong>.</li>
                <li>Selecciona la plataforma.</li>
                <li>Escribe el nombre exacto o una frase representativa del asunto.</li>
                <li>Agrega un detalle o ejemplo cuando ayude a identificar el correo.</li>
                <li>Revisa el mensaje profesional generado.</li>
                <li>Elige copiarlo o abrir WhatsApp.</li>
                <li>El selector de dominio no aparece porque el Superadmin solo registra el asunto global.</li>
                <li>Después de que el Superadmin lo agregue, vuelve a Dominios, edita cada dominio donde se utilizará, marca el nuevo asunto y defínelo como Público o Privado.</li>
            </ol>

            <div class="af-manual-callout af-manual-callout--warning"><i class="fas fa-bell"></i><div><strong>El asunto nuevo no queda asociado automáticamente.</strong><p>La asociación y la privacidad siempre deben definirse desde cada dominio del Admin.</p></div></div>

            <h3><i class="fas fa-filter"></i> Filtros y acciones</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Busca por dominio, buzón o cliente.</li>
                <li>Filtra por buzón y por cliente.</li>
                <li>Utiliza el icono azul para editar y el rojo para eliminar.</li>
                <li>No podrás eliminar un dominio utilizado por cuentas registradas.</li>
            </ul>
        </div>
    </section>

    <section id="clientes" class="af-panel af-manual-section af-manual-section--cyan" data-manual-section data-manual-search="clientes usuarios whatsapp con sin teléfono id consulta regenerar lista accesos eliminar masiva">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-users"></i></span><div><h2>Clientes y usuarios</h2><p>Organiza los destinatarios de las cuentas y prepara la entrega de accesos.</p></div></div>
            <a href="gestionar_clientes.php" class="af-btn af-btn-primary"><i class="fas fa-arrow-up-right-from-square"></i> Abrir Clientes</a>
        </div>
        <div class="af-panel-body af-manual-content">
            <h3><i class="fas fa-user-plus"></i> Crear un cliente</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Pulsa <strong>Nuevo cliente</strong>.</li>
                <li>Escribe nombre y correo válidos.</li>
                <li>Registra el teléfono con código de país para habilitar WhatsApp.</li>
                <li>Selecciona el rol permitido para el cliente.</li>
                <li>Guarda y verifica que aparezca en la tabla.</li>
            </ol>

            <h3><i class="fas fa-id-card"></i> ID de consulta del cliente</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>El ID identifica al cliente para consultar las cuentas asociadas.</li>
                <li>El botón Copiar coloca el ID en el portapapeles.</li>
                <li>Regenerar crea un ID nuevo y el anterior deja de ser válido.</li>
                <li>Regenera únicamente cuando exista riesgo de exposición o cuando debas reemplazar el acceso.</li>
            </ul>

            <h3><i class="fab fa-whatsapp"></i> Mensajes de WhatsApp</h3>
            <p>Los botones verdes abren primero una vista previa. Desde allí puedes copiar el mensaje o abrir WhatsApp.</p>
            <div class="af-manual-message-example">
                <strong>Ejemplo de lista profesional</strong>
                <pre>👋 Hola *JUAN Carlos*, aquí tienes la lista actualizada de tus accesos:

1. 📺 *Plataforma:* Disney+
📧 *Correo:* cuenta@dominio.com
🔑 *ID de cuenta:* EF9ED68C

🌐 *Ingresa con estos códigos en:*
https://tudominio.com/login_consulta.php

🔐 Conserva esta información en un lugar seguro.</pre>
            </div>
            <ul class="af-manual-list af-manual-visual-list">
                <li><strong>Enviar ID:</strong> prepara el código general del cliente.</li>
                <li><strong>Generar lista:</strong> obtiene las cuentas asociadas y agrupa plataforma, correo e ID individual.</li>
                <li><strong>Copiar:</strong> permite usar el mensaje en cualquier canal.</li>
                <li><strong>Abrir WhatsApp:</strong> se habilita únicamente cuando existe un teléfono válido.</li>
            </ul>

            <h3><i class="fas fa-users-slash"></i> Eliminación masiva</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Marca uno o varios clientes.</li>
                <li>Utiliza Seleccionar todos para marcar los registros visibles.</li>
                <li>Pulsa <strong>Eliminar seleccionados</strong>.</li>
                <li>Confirma la operación.</li>
                <li>Los clientes con cuentas asociadas se omiten para proteger la integridad de los datos.</li>
                <li>El sistema informa cuántos fueron eliminados y cuántos se omitieron.</li>
            </ol>

            <h3><i class="fas fa-filter"></i> Filtros</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Busca por nombre, correo, teléfono o ID.</li>
                <li>Filtra por rol.</li>
                <li>Filtra <strong>Con WhatsApp</strong> o <strong>Sin WhatsApp</strong>.</li>
                <li>Muestra 100, 200, 400 o Todos los registros.</li>
            </ul>
        </div>
    </section>

    <section id="cuentas" class="af-panel af-manual-section af-manual-section--emerald" data-manual-section data-manual-search="cuentas individual carga masiva ip país fecha renovación calendario 30 31 whatsapp seleccionadas exportar csv filtros vencidas renovar">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-envelope-open-text"></i></span><div><h2>Gestionar Cuentas</h2><p>Registra accesos, asigna clientes, controla vencimientos y ejecuta acciones individuales o masivas.</p></div></div>
            <a href="gestionar_cuentas.php" class="af-btn af-btn-primary"><i class="fas fa-arrow-up-right-from-square"></i> Abrir Cuentas</a>
        </div>
        <div class="af-panel-body af-manual-content">
            <h3><i class="fas fa-plus"></i> Nueva cuenta individual</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Pulsa <strong>Nueva cuenta</strong>.</li>
                <li>Escribe el correo de la cuenta.</li>
                <li>Selecciona la plataforma y el dominio.</li>
                <li>Selecciona un cliente o deja la cuenta sin asignar.</li>
                <li>El campo <strong>IP / país</strong> es opcional. Puede contener una IP, un país o una abreviatura como <code>PE</code>.</li>
                <li>Si la cuenta queda sin cliente, la fecha puede dejarse vacía.</li>
                <li>Si asignas un cliente, completa la fecha de renovación.</li>
                <li>Guarda. El sistema genera automáticamente un ID de cuenta.</li>
            </ol>

            <h3><i class="fas fa-file-import"></i> Carga masiva</h3>
            <p>La carga puede utilizar texto manual o archivo TXT. Cada línea representa una cuenta.</p>
            <div class="af-manual-code-block"><code>correo@dominio.com</code><code>correo@dominio.com | 2026-12-31</code><code>correo@dominio.com | 2026-12-31 | PE</code><code>correo@dominio.com | | Perú</code></div>
            <ul class="af-manual-list af-manual-visual-list">
                <li>La IP/país es opcional.</li>
                <li>La fecha puede omitirse cuando las cuentas se importan sin cliente.</li>
                <li>Revisa plataforma, dominio y cliente común antes de procesar.</li>
                <li>El sistema valida correos y evita registros inválidos.</li>
            </ul>

            <h3><i class="fas fa-filter"></i> Filtros de cuentas</h3>
            <div class="af-manual-status-grid">
                <span><i class="fas fa-magnifying-glass"></i> Todos</span>
                <span class="is-danger"><i class="fas fa-circle-xmark"></i> Vencidas</span>
                <span class="is-today"><i class="fas fa-clock"></i> Vencen hoy</span>
                <span class="is-warning"><i class="fas fa-triangle-exclamation"></i> 1–3 días</span>
                <span class="is-warning"><i class="fas fa-calendar-day"></i> 4–7 días</span>
                <span class="is-info"><i class="fas fa-calendar-week"></i> 8–15 días</span>
                <span class="is-success"><i class="fas fa-calendar-check"></i> 16–30 días</span>
                <span><i class="fas fa-calendar-minus"></i> Sin fecha</span>
            </div>
            <ul class="af-manual-list af-manual-visual-list">
                <li>El buscador revisa correo, ID, IP/país, plataforma, dominio y cliente.</li>
                <li>También puedes filtrar por plataforma y cliente.</li>
                <li>No existe un filtro independiente de “más de 30 días”; esas cuentas permanecen dentro de Todos.</li>
            </ul>

            <h3><i class="fas fa-bolt"></i> Barra Acciones debajo de los filtros</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li><strong>Configurar renovación:</strong> define la regla que utilizarán los botones Renovar.</li>
                <li><strong>Renovación actual:</strong> muestra Mes calendario, 30 días o 31 días.</li>
                <li><strong>Notificar seleccionadas:</strong> se activa al marcar al menos una cuenta.</li>
                <li><strong>Renovar seleccionadas:</strong> aplica la regla guardada únicamente a las cuentas marcadas.</li>
            </ol>

            <h3><i class="fas fa-calendar-plus"></i> Reglas de renovación</h3>
            <div class="af-manual-renewal-grid">
                <article><strong>Mes calendario</strong><p>Suma un mes a la fecha registrada, aunque ya esté vencida.</p><code>20/07/2026 → 20/08/2026</code><code>31/01/2026 → 28/02/2026</code></article>
                <article><strong>30 días</strong><p>Cuando la cuenta está vencida, calcula 30 días desde la fecha actual.</p></article>
                <article><strong>31 días</strong><p>Cuando la cuenta está vencida, calcula 31 días desde la fecha actual.</p></article>
            </div>
            <div class="af-manual-callout af-manual-callout--info"><i class="fas fa-calendar"></i><div><strong>Cuenta sin fecha:</strong><p>La renovación toma la fecha actual como base. La operación queda registrada en el historial de renovaciones.</p></div></div>

            <h3><i class="fab fa-whatsapp"></i> Notificación masiva agrupada por cliente</h3>
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Marca las cuentas que deseas notificar.</li>
                <li>Pulsa <strong>Notificar seleccionadas</strong>.</li>
                <li>El modal agrupa todas las cuentas por cliente.</li>
                <li>Se genera un solo mensaje profesional por usuario, con iconos y negritas.</li>
                <li>Puedes copiar cada mensaje, copiar todos o abrir WhatsApp.</li>
                <li>Los grupos sin teléfono permiten copiar, pero no abrir WhatsApp.</li>
            </ol>

            <h3><i class="fas fa-wand-magic-sparkles"></i> Acciones individuales</h3>
            <div class="af-manual-action-grid">
                <article class="is-blue"><i class="fas fa-pen"></i><div><strong>Editar</strong><p>Actualiza correo, plataforma, dominio, cliente, fecha o IP/país.</p></div></article>
                <article class="is-green"><i class="fab fa-whatsapp"></i><div><strong>WhatsApp</strong><p>Abre una vista previa para copiar o enviar el recordatorio.</p></div></article>
                <article class="is-red"><i class="fas fa-calendar-plus"></i><div><strong>Renovar</strong><p>Aplica la regla configurada y confirma la nueva fecha.</p></div></article>
                <article class="is-amber"><i class="fas fa-rotate"></i><div><strong>Regenerar ID</strong><p>Crea un ID nuevo e invalida el anterior.</p></div></article>
                <article class="is-danger"><i class="fas fa-trash"></i><div><strong>Eliminar</strong><p>Elimina la cuenta después de confirmar.</p></div></article>
            </div>

            <h3><i class="fas fa-list-check"></i> Otras acciones masivas</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Eliminar cuentas seleccionadas.</li>
                <li>Cambiar la fecha de renovación.</li>
                <li>Cambiar el cliente y, opcionalmente, la fecha.</li>
                <li>El contador indica cuántas cuentas están seleccionadas.</li>
                <li>El botón Aplicar acción solo se habilita cuando existe una acción y al menos una cuenta marcada.</li>
            </ul>

            <h3><i class="fas fa-file-csv"></i> Exportar</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>La exportación CSV respeta los filtros disponibles.</li>
                <li>Incluye datos operativos como correo, ID, plataforma, dominio, cliente, renovación e IP/país.</li>
                <li>Revisa el archivo antes de compartirlo porque contiene identificadores de acceso.</li>
            </ul>
        </div>
    </section>

    <section id="referidos" class="af-panel af-manual-section af-manual-section--purple" data-manual-section data-manual-search="referidos enlace código beneficio pago primera mensualidad mes calendario saldo crédito renovar suscripción recarga whatsapp">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-user-group"></i></span><div><h2>Mis referidos</h2><p>Invita nuevos administradores y revisa el estado de los beneficios.</p></div></div>
            <div class="af-heading-actions"><a href="mis_referidos.php" class="af-btn af-btn-secondary"><i class="fas fa-share-nodes"></i> Abrir Referidos</a><a href="mi_suscripcion.php" class="af-btn af-btn-primary"><i class="fas fa-wallet"></i> Suscripción y saldo</a></div>
        </div>
        <div class="af-panel-body af-manual-content">
            <ol class="af-manual-numbered af-manual-visual-list">
                <li>Copia tu enlace de invitación.</li>
                <li>Comparte el enlace con la persona interesada.</li>
                <li>El invitado se registra usando el código incluido en el enlace.</li>
                <li>El registro no entrega el beneficio inmediatamente.</li>
                <li>Cuando el referido confirma su primer pago mensual válido, el referente recibe un mes calendario.</li>
                <li>El beneficio se aplica una sola vez por referido y queda auditado.</li>
            </ol>
            <h3><i class="fas fa-wallet"></i> Renovaciones con saldo</h3>
            <div class="af-manual-card-grid">
                <article><i class="fas fa-coins"></i><div><strong>Saldo asignado</strong><p>El Superadmin recarga tu monedero en la moneda global del sistema.</p></div></article>
                <article><i class="fas fa-user-check"></i><div><strong>Renovar mi cuenta</strong><p>Selecciona un plan mensual o anual, revisa el importe y confirma el descuento.</p></div></article>
                <article><i class="fab fa-whatsapp"></i><div><strong>Solicitar recarga</strong><p>Indica el importe, revisa el mensaje y cópialo o envíalo por WhatsApp al Superadmin.</p></div></article>
            </div>
            <div class="af-alert af-alert-info"><i class="fas fa-lock"></i><div><strong>Cuando la suscripción vence</strong><p>El Admin puede iniciar sesión y renovar, pero los módulos operativos quedan bloqueados. Las búsquedas pueden mostrar resultados; el contenido no se abre hasta recuperar la vigencia.</p></div></div>

            <h3><i class="fas fa-table"></i> Tabla de referidos</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Muestra nombre, correo, plan y suscripción.</li>
                <li>El estado indica si el beneficio está pendiente u otorgado.</li>
                <li>La nueva vigencia aparece cuando el crédito ya fue aplicado.</li>
                <li>Puedes buscar por nombre, correo o plan y filtrar por estado.</li>
            </ul>
        </div>
    </section>

    <section id="reportes" class="af-panel af-manual-section af-manual-section--indigo" data-manual-section data-manual-search="mis reportes cuentas plataforma renovación clientes rol whatsapp buzones dominios filtros">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-chart-line"></i></span><div><h2>Mis reportes</h2><p>Analiza únicamente la operación perteneciente al Admin que inició sesión.</p></div></div>
            <a href="mis_reportes.php" class="af-btn af-btn-primary"><i class="fas fa-arrow-up-right-from-square"></i> Abrir Mis reportes</a>
        </div>
        <div class="af-panel-body af-manual-content">
            <h3><i class="fas fa-chart-pie"></i> Indicadores disponibles</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Total de cuentas, cuentas asignadas y cuentas sin cliente.</li>
                <li>Cuentas vencidas y cuentas que vencen próximamente.</li>
                <li>Clientes con y sin teléfono de WhatsApp.</li>
                <li>Cuentas sin fecha de renovación.</li>
                <li>Total de buzones y dominios configurados.</li>
                <li>Distribución de cuentas por plataforma.</li>
                <li>Estado general de renovaciones.</li>
                <li>Clientes por rol.</li>
            </ul>

            <h3><i class="fas fa-address-book"></i> Cartera de clientes</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Busca por nombre, correo o teléfono.</li>
                <li>Filtra clientes con o sin WhatsApp.</li>
                <li>Identifica cuántas cuentas tiene cada cliente.</li>
                <li>Prioriza clientes con cuentas vencidas o próximas a vencer.</li>
            </ul>

            <h3><i class="fas fa-inbox"></i> Salud de buzones y dominios</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Revisa proveedor, host y cantidad de dominios asociados.</li>
                <li>Detecta buzones que todavía no tienen un dominio asignado.</li>
                <li>Utiliza el acceso directo para corregirlos en Buzones.</li>
            </ul>

            <h3><i class="fas fa-calendar-check"></i> Renovaciones</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Busca por correo, plataforma, cliente o teléfono.</li>
                <li>Filtra por prioridad y plataforma.</li>
                <li>La tabla muestra fecha, estado, días y contacto por WhatsApp.</li>
                <li>Los reportes ya no presentan “Consultas del periodo”, porque ese contador no representaba de forma confiable todas las aperturas del sistema.</li>
            </ul>
        </div>
    </section>

    <section id="reglas-generales" class="af-panel af-manual-section af-manual-section--slate" data-manual-section data-manual-search="reglas generales filtros paginación mostrar 100 200 400 todos modales escape colores acciones">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-sliders"></i></span><div><h2>Reglas compartidas del panel</h2><p>Comportamientos que se repiten en los módulos administrativos.</p></div></div>
        </div>
        <div class="af-panel-body af-manual-content">
            <h3><i class="fas fa-filter"></i> Filtros y paginación</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>El buscador puede combinarse con los filtros del módulo.</li>
                <li>Limpiar devuelve los controles a su estado inicial.</li>
                <li>Mostrar permite 100, 200, 400 o Todos.</li>
                <li>La parte inferior indica el rango y el total de registros.</li>
                <li>La paginación se actualiza después de aplicar filtros.</li>
            </ul>

            <h3><i class="fas fa-palette"></i> Colores de acciones</h3>
            <div class="af-manual-action-legend">
                <span class="is-blue"><i class="fas fa-pen"></i> Editar</span>
                <span class="is-green"><i class="fab fa-whatsapp"></i> WhatsApp</span>
                <span class="is-cyan"><i class="fas fa-list"></i> Generar lista</span>
                <span class="is-amber"><i class="fas fa-rotate"></i> Regenerar</span>
                <span class="is-red"><i class="fas fa-calendar-plus"></i> Renovar</span>
                <span class="is-danger"><i class="fas fa-trash"></i> Eliminar</span>
                <span class="is-violet"><i class="fas fa-copy"></i> Copiar</span>
            </div>

            <h3><i class="fas fa-window-restore"></i> Modales</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>El encabezado y los botones permanecen visibles.</li>
                <li>El cuerpo tiene desplazamiento interno cuando el formulario es largo.</li>
                <li><strong>Escape cierra el modal inmediatamente sin preguntar por cambios sin guardar.</strong></li>
                <li>El botón X, Cancelar o el clic exterior pueden mantener la confirmación definida por el módulo.</li>
                <li>Los botones se deshabilitan mientras una operación está procesándose para evitar doble envío.</li>
            </ul>

            <h3><i class="fas fa-shield-halved"></i> Seguridad</h3>
            <ul class="af-manual-list af-manual-visual-list">
                <li>Las acciones de guardado y eliminación utilizan validación en el servidor.</li>
                <li>Las operaciones sensibles utilizan CSRF.</li>
                <li>El Admin solo puede modificar registros que le pertenecen.</li>
                <li>Las contraseñas de buzones se cifran antes de guardarse.</li>
                <li>Nunca compartas archivos de configuración, `.env` ni credenciales IMAP.</li>
            </ul>
        </div>
    </section>

    <section id="problemas" class="af-panel af-manual-section af-manual-section--orange" data-manual-section data-manual-search="problemas solución conexión imap gmail namecheap cpanel whatsapp filtros botones modal escape">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-screwdriver-wrench"></i></span><div><h2>Solución de problemas frecuentes</h2><p>Comprobaciones básicas antes de solicitar soporte.</p></div></div>
        </div>
        <div class="af-panel-body">
            <div class="af-manual-faq-grid">
                <details class="af-manual-details"><summary><i class="fab fa-google"></i><span>Gmail rechaza la contraseña</span></summary><div><p>Confirma que la verificación en dos pasos esté activada y que estés usando una contraseña de aplicación, no la contraseña normal.</p></div></details>
                <details class="af-manual-details"><summary><i class="fas fa-envelope-circle-check"></i><span>Namecheap no conecta</span></summary><div><p>Comprueba que el servicio sea Private Email y que el host sea <code>mail.privateemail.com</code>. Verifica la contraseña iniciando sesión en el webmail del proveedor.</p></div></details>
                <details class="af-manual-details"><summary><i class="fas fa-server"></i><span>cPanel no conecta con mail.tudominio.com</span></summary><div><p>Consulta en cPanel la sección “Connect Devices” y prueba el hostname certificado del servidor. Corrige también el puerto o los flags cuando el proveedor indique valores distintos.</p></div></details>
                <details class="af-manual-details"><summary><i class="fas fa-inbox"></i><span>No puedo eliminar un buzón</span></summary><div><p>El buzón está asociado a un dominio. Reasigna o elimina primero la relación desde Dominios.</p></div></details>
                <details class="af-manual-details"><summary><i class="fas fa-tags"></i><span>El nuevo asunto no aparece en mi dominio</span></summary><div><p>Actualiza la página, edita el dominio, marca el asunto recién creado y selecciona Público o Privado antes de guardar.</p></div></details>
                <details class="af-manual-details"><summary><i class="fab fa-whatsapp"></i><span>WhatsApp aparece deshabilitado</span></summary><div><p>Revisa que el cliente tenga un teléfono con código de país y sin caracteres incompatibles.</p></div></details>
                <details class="af-manual-details"><summary><i class="fas fa-list-check"></i><span>Las acciones masivas no se habilitan</span></summary><div><p>Marca al menos un registro visible y selecciona una acción cuando el módulo utilice el selector general.</p></div></details>
                <details class="af-manual-details"><summary><i class="fas fa-keyboard"></i><span>Escape todavía muestra una confirmación</span></summary><div><p>Actualiza con Ctrl + F5 y confirma que los archivos compartidos del Admin fueron reemplazados. Escape debe cerrar sin preguntar.</p></div></details>
            </div>
        </div>
    </section>

    <section class="af-panel af-manual-section af-manual-section--green" data-manual-section data-manual-search="lista cierre diario semanal respaldo seguridad">
        <div class="af-panel-head">
            <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-list-check"></i></span><div><h2>Lista de control del Admin</h2><p>Rutina recomendada para mantener la operación ordenada.</p></div></div>
        </div>
        <div class="af-panel-body">
            <div class="af-manual-check-grid">
                <article class="af-manual-check-card af-manual-check-card--daily"><span class="af-manual-check-icon"><i class="fas fa-sun"></i></span><strong>Todos los días</strong><ul><li>Revisar cuentas vencidas y próximas.</li><li>Enviar recordatorios necesarios.</li><li>Confirmar que no existan cuentas sin cliente por error.</li></ul></article>
                <article class="af-manual-check-card af-manual-check-card--weekly"><span class="af-manual-check-icon"><i class="fas fa-calendar-week"></i></span><strong>Cada semana</strong><ul><li>Revisar clientes sin WhatsApp.</li><li>Confirmar buzones sin dominios.</li><li>Validar cuentas sin fecha.</li><li>Comprobar que las listas de acceso estén actualizadas.</li></ul></article>
                <article class="af-manual-check-card af-manual-check-card--renew"><span class="af-manual-check-icon"><i class="fas fa-calendar-plus"></i></span><strong>Antes de renovar</strong><ul><li>Confirmar la cuenta correcta.</li><li>Revisar la modalidad de renovación.</li><li>Verificar la nueva fecha mostrada.</li><li>Notificar al cliente después del cambio.</li></ul></article>
                <article class="af-manual-check-card af-manual-check-card--delete"><span class="af-manual-check-icon"><i class="fas fa-trash-can"></i></span><strong>Antes de eliminar</strong><ul><li>Revisar asociaciones.</li><li>Confirmar que el registro pertenece al cliente correcto.</li><li>Exportar o respaldar cuando sea necesario.</li><li>Leer la confirmación completa.</li></ul></article>
            </div>
        </div>
    </section>

    <div id="manualNoResults" class="af-empty af-manual-no-results" hidden><i class="fas fa-search"></i><strong>No se encontraron secciones</strong><div>Prueba otra palabra, por ejemplo: cuenta, Gmail, renovación o WhatsApp.</div></div>
</div>

<script>
document.addEventListener('DOMContentLoaded', () => {
    const search = document.getElementById('manualSearch');
    const sections = Array.from(document.querySelectorAll('[data-manual-section]'));
    const empty = document.getElementById('manualNoResults');

    const normalize = (value) => String(value || '')
        .normalize('NFD')
        .replace(/[\u0300-\u036f]/g, '')
        .toLowerCase();

    search?.addEventListener('input', () => {
        const query = normalize(search.value.trim());
        let visible = 0;
        sections.forEach((section) => {
            const haystack = normalize(`${section.dataset.manualSearch || ''} ${section.textContent || ''}`);
            const match = query === '' || haystack.includes(query);
            section.hidden = !match;
            if (match) visible++;
        });
        empty.hidden = visible !== 0;
    });

    document.getElementById('printManual')?.addEventListener('click', () => window.print());
});
</script>
<?php require_once __DIR__ . '/admin_footer.php'; ?>
