(function () {
    'use strict';

    const page = document.body?.dataset?.page || '';
    const customManagedPages = new Set([
        'gestionar_plataformas.php',
        'gestionar_asuntos.php',
        'gestionar_suscripciones.php',
        'gestionar_creditos.php',
        'gestionar_pagos.php',
        'gestionar_planes.php',
        'mi_suscripcion.php',
        'gestionar_plantillas.php',
        'gestionar_mensajes.php'
    ]);
    const excludedPages = new Set([
        'index.php',
        'gestionar_planes.php',
        'gestionar_pagos.php',
        'gestionar_suscripciones.php',
        'mis_referidos.php'
    ]);

    const pageMeta = {
        'gestionar_buzones.php': {
            kicker: 'Operación IMAP',
            description: 'Configura tus buzones Gmail o corporativos, revisa renovaciones y valida la conexión antes de guardar.',
            modal: 'Completa los datos del buzón. Para Gmail utiliza una contraseña de aplicación; para correo corporativo confirma host, puerto y seguridad IMAP.'
        },
        'gestionar_dominios.php': {
            kicker: 'Dominios y privacidad',
            description: 'Relaciona cada dominio con su buzón y define qué asuntos serán públicos o requerirán acceso privado.',
            modal: 'Selecciona el buzón que recibe los mensajes y configura los asuntos permitidos. Los cambios afectan las consultas asociadas a este dominio.'
        },
        'gestionar_clientes.php': {
            kicker: 'Clientes y accesos',
            description: 'Administra clientes y revendedores, sus datos de contacto y los códigos utilizados para consultar sus cuentas.',
            modal: 'Registra datos reales de contacto y selecciona el rol correcto. El correo debe ser único dentro del sistema.'
        },
        'gestionar_cuentas.php': {
            kicker: 'Cuentas de servicio',
            description: 'Organiza cuentas por plataforma, dominio, cliente y fecha de renovación. Usa filtros y acciones masivas para trabajar más rápido.',
            modal: 'Completa plataforma, correo, dominio y renovación. Asigna un cliente cuando la cuenta ya tenga propietario.'
        },
        'gestionar_creditos.php': {
            kicker: 'Control de créditos',
            description: 'Consulta saldos, registra movimientos y conserva una trazabilidad clara de cada ajuste realizado.',
            modal: 'Indica el importe y el motivo del movimiento. La descripción debe permitir reconocer posteriormente por qué se aplicó el ajuste.'
        },
        'gestionar_plantillas.php': {
            kicker: 'Comunicación por WhatsApp',
            description: 'Crea mensajes reutilizables para renovaciones, clientes y comunicaciones operativas.',
            modal: 'Escribe un nombre descriptivo y un mensaje listo para enviar. Selecciona el módulo donde estará disponible la plantilla.'
        },
        'gestionar_mensajes.php': {
            kicker: 'Mensajes del sistema',
            description: 'Publica avisos claros para administradores y usuarios, definiendo estado, prioridad y periodo de visualización.',
            modal: 'Redacta un título corto y un mensaje directo. Evita incluir contraseñas, credenciales o información sensible.'
        },
        'gestionar_roles.php': {
            kicker: 'Permisos y seguridad',
            description: 'Asigna permisos por rol con precisión. Los cambios impactan inmediatamente en los módulos disponibles para cada usuario.',
            modal: 'Marca únicamente los permisos necesarios para el rol seleccionado. Mantén el principio de acceso mínimo.'
        },
        'gestionar_ayudantes.php': {
            kicker: 'Ayudantes de Superadmin',
            description: 'Promueve o revoca ayudantes sin compartir la cuenta principal del Superadministrador.',
            modal: 'Selecciona un usuario confiable. El ayudante tendrá acceso únicamente a los permisos definidos para su rol.'
        },
        'gestionar_pruebas.php': {
            kicker: 'Pruebas gratuitas',
            description: 'Revisa identificadores ya utilizados y libera únicamente los registros que realmente deban volver a habilitarse.',
            modal: 'Liberar un registro permite que ese identificador vuelva a utilizar una prueba gratuita.'
        },
        'gestionar_reportes.php': {
            kicker: 'Reportes globales',
            description: 'Analiza uso, suscripciones, recursos e inactividad mediante filtros compactos y tablas separadas por objetivo.',
            modal: ''
        },
        'mis_reportes.php': {
            kicker: 'Reportes de mi operación',
            description: 'Consulta actividad de clientes, cuentas por plataforma y renovaciones próximas dentro de tu propia administración.',
            modal: ''
        },
        'configurar_marca.php': {
            kicker: 'Marca blanca',
            description: 'Personaliza nombre, identidad visual, colores, datos comerciales y textos públicos sin modificar el código fuente.',
            modal: ''
        }
    };

    const helpByField = {
        cuenta: 'Correo completo del buzón que recibirá los códigos.',
        password: 'Usa una contraseña de aplicación o la clave IMAP asignada por tu proveedor.',
        password_field: 'Usa una contraseña de aplicación o la clave IMAP asignada por tu proveedor.',
        proveedor_plataforma: 'Selecciona Gmail o configura manualmente un correo corporativo compatible.',
        imap_host: 'Servidor IMAP proporcionado por tu servicio de correo.',
        imap_puerto: 'Normalmente 993 para conexiones seguras SSL.',
        imap_flags: 'Usa las opciones de seguridad recomendadas por el proveedor.',
        fecha_renovacion: 'Fecha en la que debes renovar o revisar este recurso.',
        telefono: 'Número con código de país para comunicaciones por WhatsApp.',
        nombre_usuario: 'Nombre identificable para el cliente o usuario.',
        correo: 'Debe ser un correo válido y no estar registrado previamente.',
        id_rol: 'Define las acciones y módulos disponibles para este usuario.',
        nombre: 'Nombre que se mostrará dentro del catálogo.',
        concepto: 'Descripción breve para reconocer la función de este registro.',
        orden: 'Un número menor hace que aparezca primero.',
        imagen_plataforma: 'Sube un archivo ligero en PNG, JPG o WebP.',
        nombre_plan: 'Nombre público y fácil de comparar con otros planes.',
        descripcion: 'Explica el beneficio principal en una frase corta.',
        mensaje: 'Escribe el texto exactamente como deseas que lo reciba el usuario.',
        nombre_plantilla: 'Usa un nombre que permita encontrar la plantilla rápidamente.',
        modulo_uso: 'Define en qué pantalla estará disponible este mensaje.',
        fecha_desde: 'Incluye registros desde esta fecha.',
        fecha_hasta: 'Incluye registros hasta esta fecha.'
    };

    function addClass(element, ...classes) {
        if (element) element.classList.add(...classes.filter(Boolean));
    }

    function makeCompactContext(main) {
        if (!main || excludedPages.has(page) || main.querySelector('.module-context-strip')) return;
        const meta = pageMeta[page];
        if (!meta) return;

        const strip = document.createElement('section');
        strip.className = 'module-context-strip';
        strip.innerHTML = `
            <div class="module-context-icon"><i class="fas fa-circle-info" aria-hidden="true"></i></div>
            <div class="module-context-copy">
                <span>${meta.kicker}</span>
                <p>${meta.description}</p>
            </div>
        `;
        main.insertBefore(strip, main.firstElementChild);
    }

    function polishRoot(main) {
        if (!main || excludedPages.has(page)) return;
        const directChildren = Array.from(main.children).filter((el) => el.tagName !== 'SCRIPT' && el.tagName !== 'STYLE');
        directChildren.forEach((el) => {
            if (el.classList.contains('module-context-strip')) return;
            if (el.matches('.w-full, .max-w-4xl, .max-w-6xl, .max-w-7xl')) {
                addClass(el, 'legacy-module-root');
            }
        });
    }

    function polishToolbars(main) {
        if (!main || excludedPages.has(page)) return;
        const candidates = main.querySelectorAll('.bg-gray-50.rounded-lg.border, .bg-gray-50.rounded-md.border, .p-4.bg-gray-50');
        candidates.forEach((box) => {
            if (box.closest('.module-modal-panel, .module-form-section')) return;
            const hasSearch = box.querySelector('input[type="search"]');
            const hasButton = box.querySelector('button, a');
            const isToolbarLike = box.classList.contains('mb-6') || (hasSearch && hasButton);
            if (!isToolbarLike) return;
            addClass(box, 'legacy-module-toolbar');
        });

        main.querySelectorAll('input[type="search"]').forEach((input) => {
            addClass(input, 'module-control');
            const wrapper = input.parentElement;
            if (wrapper) addClass(wrapper, 'legacy-search-wrap');
        });
    }

    function polishTables(main) {
        if (!main || excludedPages.has(page)) return;
        main.querySelectorAll('table').forEach((table) => {
            addClass(table, 'legacy-professional-table');
            const wrapper = table.closest('.overflow-x-auto');
            if (wrapper) addClass(wrapper, 'legacy-table-wrap');
        });
    }

    function polishCards(main) {
        if (!main || excludedPages.has(page)) return;
        const selectors = [
            '.bg-white.p-6.rounded-lg.shadow-md',
            '.bg-white.p-4.rounded-lg.shadow-md',
            '.bg-gray-50.rounded-lg.shadow-lg',
            '.bg-gray-50.rounded-lg.shadow-inner',
            '.mb-8.p-6.bg-gray-50',
            '.p-6.bg-gray-50'
        ];
        main.querySelectorAll(selectors.join(',')).forEach((card) => addClass(card, 'legacy-professional-card'));
    }

    function polishForms(main) {
        if (!main || excludedPages.has(page)) return;
        main.querySelectorAll('form').forEach((form) => {
            if (form.closest('.module-modal-panel')) return;
            const method = (form.getAttribute('method') || '').toLowerCase();
            if (method === 'get' || form.querySelector('input[type="date"], select')) {
                addClass(form, 'legacy-filter-form');
            }
        });

        main.querySelectorAll('input:not([type="hidden"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]), select, textarea').forEach((control) => {
            addClass(control, 'legacy-control');
        });

        main.querySelectorAll('label').forEach((label) => addClass(label, 'legacy-label'));
        main.querySelectorAll('button, a').forEach((button) => {
            const text = (button.textContent || '').trim().toLowerCase();
            if (/filtrar|buscar|guardar|nuevo|crear|asignar|promover|exportar/.test(text)) addClass(button, 'legacy-action-primary');
            if (/limpiar|cancelar|cerrar/.test(text)) addClass(button, 'legacy-action-secondary');
        });
    }

    function addFieldHelp(scope) {
        if (!scope) return;
        scope.querySelectorAll('input[id], select[id], textarea[id]').forEach((field) => {
            const key = field.id || field.name;
            if (!key || !helpByField[key]) return;
            const container = field.closest('div');
            if (!container || container.querySelector(':scope > .auto-field-help, :scope > .module-help, :scope > p.text-xs')) return;
            const help = document.createElement('p');
            help.className = 'auto-field-help';
            help.textContent = helpByField[key];
            field.insertAdjacentElement('afterend', help);
        });
    }

    function polishModals(main) {
        if (!main) return;
        const meta = pageMeta[page];
        main.querySelectorAll('.fixed.inset-0').forEach((overlay) => {
            if (!overlay.querySelector('form') && !overlay.querySelector('[id*="Modal"]')) return;
            addClass(overlay, 'legacy-modal-overlay');
            const panel = Array.from(overlay.children).find((child) => child.matches('div')) || overlay.querySelector(':scope > div');
            if (!panel) return;
            addClass(panel, 'legacy-modal-panel');

            const header = panel.querySelector(':scope > .flex:first-child, :scope > div > .flex:first-child');
            if (header) {
                addClass(header, 'legacy-modal-header');
                if (meta?.modal && !header.querySelector('.legacy-modal-guide')) {
                    const title = header.querySelector('h2, h3, h4');
                    if (title) {
                        const copy = document.createElement('div');
                        copy.className = 'legacy-modal-title-copy';
                        title.parentNode?.insertBefore(copy, title);
                        copy.appendChild(title);
                        const guide = document.createElement('p');
                        guide.className = 'legacy-modal-guide';
                        guide.textContent = meta.modal;
                        copy.appendChild(guide);
                    }
                }
            }

            const form = panel.querySelector('form');
            if (form) {
                addClass(form, 'legacy-modal-form');
                addFieldHelp(form);
            }
        });
    }

    function polishReportSections(main) {
        if (!main || !['gestionar_reportes.php', 'mis_reportes.php'].includes(page)) return;
        main.querySelectorAll('.mb-8.p-6, .p-6.bg-gray-50').forEach((section) => {
            addClass(section, 'report-section-card');
            const title = section.querySelector('h2, h3');
            if (title) addClass(title, 'report-section-title');
            const form = section.querySelector('form');
            if (form) addClass(form, 'report-filter-bar');
        });
    }

    function polishRolePage(main) {
        if (!main || page !== 'gestionar_roles.php') return;
        const grids = main.querySelectorAll('.grid');
        grids.forEach((grid) => addClass(grid, 'roles-professional-grid'));
    }

    function init() {
        const main = document.querySelector('.admin-main');
        if (!main) return;
        // Estos módulos ya incluyen su propia estructura compacta, filtros y modales.
        // Evita insertar la franja descriptiva duplicada o sobrescribir sus anchos.
        if (customManagedPages.has(page)) {
            document.querySelectorAll('.module-context-strip').forEach((strip) => strip.remove());
            document.body.classList.add('admin-modules-polished');
            return;
        }
        makeCompactContext(main);
        polishRoot(main);
        polishToolbars(main);
        polishCards(main);
        polishForms(main);
        polishTables(main);
        polishModals(main);
        polishReportSections(main);
        polishRolePage(main);
        addFieldHelp(main);
        document.body.classList.add('admin-modules-polished');
    }

    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();
