<?php
if ( ! defined( 'ABSPATH' ) ) { exit; }

class GW_Analytics_Settings {

    public function __construct() {
        add_action( 'admin_init', [ $this, 'save_settings' ] );
        add_action( 'wp_ajax_gw_send_test_email', [ $this, 'ajax_send_test_email' ] );
    }

    public function save_settings() {
        if ( ! isset( $_POST['gw_save_settings'] ) ) return;
        if ( ! check_admin_referer( 'gw_settings_nonce' ) ) return;

        // Permitimos guardar a quien tenga el rol configurado
        $role = get_option( 'efa_access_role', 'manage_options' );
        if ( ! current_user_can( $role ) ) return;

        $section = isset($_POST['gw_settings_section']) ? sanitize_text_field($_POST['gw_settings_section']) : 'spam';

        if ($section === 'spam') {
            update_option( 'efa_spam_keywords', isset($_POST['efa_spam_keywords']) ? sanitize_textarea_field($_POST['efa_spam_keywords']) : '' );
            update_option( 'efa_spam_tlds', isset($_POST['efa_spam_tlds']) ? sanitize_text_field($_POST['efa_spam_tlds']) : '' );
            update_option( 'efa_spam_emails', isset($_POST['efa_spam_emails']) ? sanitize_textarea_field($_POST['efa_spam_emails']) : '' );
            update_option( 'efa_autodelete_spam_days', isset($_POST['efa_autodelete_spam_days']) ? intval($_POST['efa_autodelete_spam_days']) : 0 );
            update_option( 'efa_whitelist_emails', isset($_POST['efa_whitelist_emails']) ? sanitize_textarea_field($_POST['efa_whitelist_emails']) : '' );
        }

        if ($section === 'otros') {
            update_option( 'efa_access_role', isset($_POST['efa_access_role']) ? sanitize_text_field($_POST['efa_access_role']) : 'manage_options' );
            $new_theme = isset($_POST['efa_default_theme']) ? sanitize_text_field($_POST['efa_default_theme']) : 'light';
            update_option( 'efa_default_theme', $new_theme );
            
            // Si se cambió el tema por defecto, agregar flag en la URL para que JavaScript lo aplique
            $redirect_params = [
                'page' => 'gw-elementor', 
                'tab' => 'settings', 
                'updated' => 'true', 
                'section' => $section
            ];
            if (isset($_POST['efa_default_theme'])) {
                $redirect_params['theme_updated'] = '1';
            }
            wp_redirect( add_query_arg( $redirect_params, admin_url( 'admin.php' ) ) );
            exit;
        }

        if ($section === 'marketing') {
            update_option( 'efa_csv_separator', isset($_POST['efa_csv_separator']) ? sanitize_text_field($_POST['efa_csv_separator']) : ',' );
            update_option( 'efa_highlight_keywords', isset($_POST['efa_highlight_keywords']) ? sanitize_textarea_field($_POST['efa_highlight_keywords']) : '' );
            update_option( 'efa_batch_size', isset($_POST['efa_batch_size']) ? max(10, min(500, intval($_POST['efa_batch_size']))) : 100 );
        }

        if ($section === 'notas') {
            if ( isset($_POST['efa_crm_labels']) ) {
                $labels_json = stripslashes($_POST['efa_crm_labels']);
                $labels = json_decode($labels_json, true);
                if (is_array($labels)) {
                    update_option( 'efa_crm_labels', $labels );
                }
            }
        }

        if ($section === 'correo') {
            update_option( 'efa_email_signature', isset($_POST['efa_email_signature']) ? wp_kses_post($_POST['efa_email_signature']) : '' );
            // Guardar el correo de prueba si se proporciona
            if (isset($_POST['efa_test_email']) && !empty($_POST['efa_test_email'])) {
                $test_email = sanitize_email($_POST['efa_test_email']);
                if (is_email($test_email)) {
                    update_option( 'efa_test_email', $test_email );
                }
            }
            // Guardar el logo personalizado si se proporciona
            if (isset($_POST['efa_email_logo']) && !empty($_POST['efa_email_logo'])) {
                $logo_url = esc_url_raw($_POST['efa_email_logo']);
                update_option( 'efa_email_logo', $logo_url );
            } else {
                // Si se envía vacío, eliminar el logo personalizado
                delete_option( 'efa_email_logo' );
            }
            // Guardar el color del header del correo
            if (isset($_POST['efa_email_header_color']) && !empty($_POST['efa_email_header_color'])) {
                $header_color = sanitize_hex_color($_POST['efa_email_header_color']);
                if ($header_color) {
                    update_option( 'efa_email_header_color', $header_color );
                }
            } else {
                // Si se envía vacío, usar color por defecto
                delete_option( 'efa_email_header_color' );
            }
        }

        $redirect_url = add_query_arg( ['page' => 'gw-elementor', 'tab' => 'settings', 'updated' => 'true', 'section' => $section], admin_url( 'admin.php' ) );
        error_log('GW Settings: Redirect URL = ' . $redirect_url);
        wp_redirect($redirect_url);
        exit;
    }

    public function render_settings_view() {
        // Defaults
        $keywords = get_option( 'efa_spam_keywords', 'crypto, investment, wallet, forex, casino, bitcoin' );
        $tlds = get_option( 'efa_spam_tlds', '.ru, .cn, .pl' );
        $emails = get_option( 'efa_spam_emails', '' );
        $autodelete = get_option( 'efa_autodelete_spam_days', 0 );
        $whitelist = get_option( 'efa_whitelist_emails', '' );
        $role = get_option( 'efa_access_role', 'manage_options' );
        $default_theme = get_option( 'efa_default_theme', 'light' );
        $separator = get_option( 'efa_csv_separator', ';' ); // Ahora es punto y coma
        
        // Report configuration options
        $report_show_kpis = get_option( 'efa_report_show_kpis', '1' );
        $report_show_timeline = get_option( 'efa_report_show_timeline', '1' );
        $report_show_forms = get_option( 'efa_report_show_forms', '1' );
        $report_show_origins = get_option( 'efa_report_show_origins', '1' );
        $report_show_crm = get_option( 'efa_report_show_crm', '1' );
        $report_show_read = get_option( 'efa_report_show_read', '1' );
        $report_show_spam = get_option( 'efa_report_show_spam', '1' );
        $report_show_logo = get_option( 'efa_report_show_logo', '1' );
        $report_show_table = get_option( 'efa_report_show_table', '1' );
        
        // CRM Labels
        $crm_labels = get_option( 'efa_crm_labels', $this->get_default_crm_labels() );
        $crm_labels_json = json_encode($crm_labels);

        $section = isset($_GET['section']) ? sanitize_text_field($_GET['section']) : 'spam';

        // Títulos y descripciones por sección
        $section_info = [
            'spam' => [
                'title' => 'Configuración de Spam',
                'description' => 'Gestiona la detección y filtrado de correos spam. Configura palabras clave, dominios y listas negras.',
                'icon' => 'dashicons-shield'
            ],
            'notas' => [
                'title' => 'Estados CRM',
                'description' => 'Personaliza los estados del CRM para organizar y gestionar tus leads.',
                'icon' => 'dashicons-tag'
            ],
            'marketing' => [
                'title' => 'Configuración de Marketing',
                'description' => 'Ajusta las opciones de exportación, palabras clave destacadas y tamaño de lotes para tus informes.',
                'icon' => 'dashicons-chart-bar'
            ],
            'correo' => [
                'title' => 'Configuración de Correo',
                'description' => 'Personaliza el envío de correos: logo, color del header y firma personalizada.',
                'icon' => 'dashicons-email-alt'
            ],
            'otros' => [
                'title' => 'Otros Ajustes',
                'description' => 'Configura el acceso al plugin, el tema por defecto y otras opciones generales.',
                'icon' => 'dashicons-admin-settings'
            ]
        ];

        $current_info = isset($section_info[$section]) ? $section_info[$section] : $section_info['spam'];

        // Asegurar que SweetAlert2 esté cargado para el modal de éxito
        wp_enqueue_style('sweetalert2-css', 'https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.min.css', [], '11.0.0');
        wp_enqueue_script('sweetalert2-js', 'https://cdn.jsdelivr.net/npm/sweetalert2@11/dist/sweetalert2.all.min.js', [], '11.0.0', true);

        if ( isset( $_GET['updated'] ) ) {
            // No mostrar el notice si vamos a mostrar el modal
            // echo '<div class="notice notice-success is-dismissible inline" style="margin-top:20px;"><p><strong>¡Ajustes guardados!</strong> La configuración se ha actualizado correctamente.</p></div>';
        }
        ?>
        <div class="gw-settings-container">
            <!-- Header mejorado -->
            <div class="gw-settings-header">
                <div class="gw-header-content">
                    <div class="gw-header-text">
                        <h1 class="gw-main-title">
                            <span class="gw-icon-wrapper">
                                <span class="dashicons <?php echo esc_attr($current_info['icon']); ?>"></span>
                            </span>
                            <?php echo esc_html($current_info['title']); ?>
                        </h1>
                        <p class="gw-header-description"><?php echo esc_html($current_info['description']); ?></p>
                    </div>
                </div>
            </div>

            <!-- Sidebar de navegación -->
            <div class="gw-settings-layout">
                <div class="gw-settings-sidebar">
                    <nav class="gw-settings-nav">
                        <a href="<?php echo admin_url('admin.php?page=gw-elementor&tab=settings&section=spam'); ?>" 
                           class="gw-settings-nav-item <?php echo $section === 'spam' ? 'active' : ''; ?>">
                            <span class="dashicons dashicons-shield"></span>
                            <span class="gw-settings-nav-text">Spam</span>
                        </a>
                        <a href="<?php echo admin_url('admin.php?page=gw-elementor&tab=settings&section=notas'); ?>" 
                           class="gw-settings-nav-item <?php echo $section === 'notas' ? 'active' : ''; ?>">
                            <span class="dashicons dashicons-tag"></span>
                            <span class="gw-settings-nav-text">Estados</span>
                        </a>
                        <a href="<?php echo admin_url('admin.php?page=gw-elementor&tab=settings&section=marketing'); ?>" 
                           class="gw-settings-nav-item <?php echo $section === 'marketing' ? 'active' : ''; ?>">
                            <span class="dashicons dashicons-chart-bar"></span>
                            <span class="gw-settings-nav-text">Marketing</span>
                        </a>
                        <a href="<?php echo admin_url('admin.php?page=gw-elementor&tab=settings&section=correo'); ?>" 
                           class="gw-settings-nav-item <?php echo $section === 'correo' ? 'active' : ''; ?>">
                            <span class="dashicons dashicons-email-alt"></span>
                            <span class="gw-settings-nav-text">Correo</span>
                        </a>
                        <a href="<?php echo admin_url('admin.php?page=gw-elementor&tab=settings&section=otros'); ?>" 
                           class="gw-settings-nav-item <?php echo $section === 'otros' ? 'active' : ''; ?>">
                            <span class="dashicons dashicons-admin-settings"></span>
                            <span class="gw-settings-nav-text">Otros</span>
                        </a>
                    </nav>
                </div>

                <div class="gw-settings-content">

            <form method="post" action="">
                <?php wp_nonce_field( 'gw_settings_nonce' ); ?>
                <input type="hidden" name="gw_settings_section" value="<?php echo esc_attr($section); ?>">

                <?php if ($section === 'spam'): ?>
                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-shield"></span> Motor Anti-Spam</h3>
                    <p class="gw-card-desc">Configura las reglas automáticas para bloquear correos no deseados. Estas reglas funcionan 24/7.</p>

                    <div class="gw-input-group">
                        <label class="gw-label">🚫 Palabras Prohibidas (Keywords)</label>
                        <textarea name="efa_spam_keywords" class="gw-textarea" rows="3" placeholder="Ej: casino, forex, bitcoin..."><?php echo esc_textarea( $keywords ); ?></textarea>
                        <span class="gw-helper">Si el nombre o mensaje contiene alguna de estas palabras, será marcado como SPAM. Separa con comas.</span>
                    </div>

                    <div class="gw-input-group">
                        <label class="gw-label">⚫ Lista Negra de Emails</label>
                        <textarea name="efa_spam_emails" class="gw-textarea" rows="3" placeholder="spam@bot.com, spammer@bad.com"><?php echo esc_textarea( $emails ); ?></textarea>
                        <span class="gw-helper">Correos exactos bloqueados permanentemente. Separa con comas.</span>
                    </div>

                    <div class="gw-input-group">
                        <label class="gw-label">🌍 Extensiones Bloqueadas (TLDs)</label>
                        <input type="text" name="efa_spam_tlds" class="gw-input" value="<?php echo esc_attr( $tlds ); ?>" placeholder=".ru, .cn">
                        <span class="gw-helper">Bloquea dominios de países específicos.</span>
                    </div>
                </div>

                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-star-filled"></span> Lista Blanca (Inmunidad)</h3>
                    <p class="gw-card-desc">Los correos o dominios listados aquí <strong>nunca</strong> serán marcados como spam, incluso si incumplen las reglas anteriores.</p>

                    <div class="gw-input-group">
                        <label class="gw-label">Correos o Dominios Seguros</label>
                        <textarea name="efa_whitelist_emails" class="gw-textarea" rows="2" placeholder="cliente@vip.com, @empresa-partner.com"><?php echo esc_textarea( $whitelist ); ?></textarea>
                        <span class="gw-helper">Usa '@dominio.com' para permitir una empresa entera.</span>
                    </div>
                </div>

                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-database"></span> Mantenimiento y Sistema</h3>
                    <div class="gw-input-group">
                        <label class="gw-label">🧹 Auto-limpieza de Spam</label>
                        <div style="display:flex; align-items:center; gap:10px;">
                            <input type="number" name="efa_autodelete_spam_days" class="gw-input" style="width:100px;" value="<?php echo esc_attr( $autodelete ); ?>" min="0">
                            <span style="font-size:14px; color:#555;">Días</span>
                        </div>
                        <span class="gw-helper">Borrar spam antiguo automáticamente (0 = Desactivado).</span>
                    </div>
                </div>
                <?php endif; ?>

                <?php if ($section === 'notas'): ?>
                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-tag"></span> Gestión de Estados CRM</h3>
                    <p class="gw-card-desc">Personaliza los estados para la gestión de leads. Puedes añadir, editar o eliminar estados según tus necesidades.</p>

                    <div id="efa-crm-labels-manager">
                        <div id="efa-labels-list"></div>
                        <button type="button" id="efa-add-label-btn" class="button button-secondary" style="margin-top: 15px;">
                            <span class="dashicons dashicons-plus-alt2" style="margin-top: 3px;"></span> Añadir Estado
                        </button>
                    </div>
                    <input type="hidden" name="efa_crm_labels" id="efa-crm-labels-input" value=''>
                </div>
                <?php endif; ?>

                <?php if ($section === 'marketing'): ?>
                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-chart-bar"></span> Marketing</h3>
                    <p class="gw-card-desc">Configura las herramientas de marketing para gestionar mejor tus leads y exportar datos de forma eficiente.</p>
                    
                    <div class="gw-input-group">
                        <label class="gw-label">✨ Palabras Destacadas</label>
                        <p class="gw-card-desc" style="margin-bottom:10px;">Destaca los correos que contengan estas palabras destacadas. Si alguna de estas palabras aparece en cualquier campo del formulario, la fila se resaltará en la tabla.</p>
                        <textarea name="efa_highlight_keywords" class="gw-textarea" rows="3" placeholder="presupuesto, cita, agendar, llamar"><?php echo esc_textarea( get_option('efa_highlight_keywords', 'presupuesto, cita, agendar, llamar') ); ?></textarea>
                        <span class="gw-helper">Separa las palabras con comas.</span>
                    </div>

                    <div class="gw-input-group" style="margin-top: 20px;">
                        <label class="gw-label">📊 Separador Excel (CSV)</label>
                        <select name="efa_csv_separator" class="gw-select">
                            <option value="," <?php selected($separator, ','); ?>>Coma (,)</option>
                            <option value=";" <?php selected($separator, ';'); ?>>Punto y coma (;)</option>
                        </select>
                        <span class="gw-helper">Usa punto y coma (;) para Excel en español.</span>
                    </div>
                    
                    <div class="gw-input-group" style="margin-top: 20px;">
                        <label class="gw-label">📦 Correos por lote</label>
                        <div style="display:flex; align-items:center; gap:10px;">
                            <input type="number" name="efa_batch_size" class="gw-input" style="width:100px;" value="<?php echo esc_attr( get_option('efa_batch_size', '100') ); ?>" min="10" max="500" step="10">
                            <span style="font-size:14px; color:#555;">correos</span>
                        </div>
                        <span class="gw-helper">Número de correos que se cargan inicialmente en la tabla. Recomendado: 50-150.</span>
                    </div>
                </div>
                <?php endif; ?>

                <?php if ($section === 'correo'): ?>
                <?php
                $signature = get_option( 'efa_email_signature', '' );
                $test_email = get_option( 'efa_test_email', '' );
                $email_logo = get_option( 'efa_email_logo', '' );
                $email_header_color = get_option( 'efa_email_header_color', '#667eea' );
                $smtp_status = $this->detect_smtp_plugin();
                ?>
                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-admin-settings"></span> Configuración SMTP</h3>
                    <p class="gw-card-desc">Verifica el estado de tu configuración SMTP para el envío de correos.</p>

                    <?php if ( $smtp_status['installed'] ): ?>
                        <div class="notice notice-success inline" style="margin: 15px 0; padding: 15px; border-left: 4px solid #46b450;">
                            <p style="margin: 0; display: flex; align-items: center; gap: 10px;">
                                <span class="dashicons dashicons-yes-alt" style="color: #46b450; font-size: 20px;"></span>
                                <strong>Ok, tienes SMTP instalado</strong>
                                <?php if ( $smtp_status['name'] ): ?>
                                    <span style="color: #666; font-weight: normal;">(<?php echo esc_html( $smtp_status['name'] ); ?>)</span>
                                <?php endif; ?>
                            </p>
                        </div>
                    <?php else: ?>
                        <div class="notice notice-error inline" style="margin: 15px 0; padding: 15px; border-left: 4px solid #dc3232;">
                            <p style="margin: 0; display: flex; align-items: center; gap: 10px;">
                                <span class="dashicons dashicons-warning" style="color: #dc3232; font-size: 20px;"></span>
                                <strong>No tienes ningún plugin SMTP instalado, recomendamos utilizar uno.</strong>
                            </p>
                            <p style="margin: 10px 0 0 0; color: #666;">
                                Para enviar correos de forma confiable, te recomendamos instalar un plugin SMTP como 
                                <a href="https://wordpress.org/plugins/wp-mail-smtp/" target="_blank" style="color: #2271b1;">WP Mail SMTP</a> o 
                                <a href="https://wordpress.org/plugins/post-smtp/" target="_blank" style="color: #2271b1;">Post SMTP</a>.
                            </p>
                        </div>
                    <?php endif; ?>
                </div>

                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-format-image"></span> Logo para Correos</h3>
                    <p class="gw-card-desc">Sube un logo personalizado para usar en los correos enviados. Si no subes un logo, se usará el logo de la web.</p>

                    <div class="gw-input-group">
                        <label class="gw-label">Logo Personalizado</label>
                        <input type="hidden" id="efa_email_logo" name="efa_email_logo" value="<?php echo esc_attr($email_logo); ?>">
                        
                        <!-- Vista previa del logo -->
                        <div id="efa_logo_preview" style="width: 100%; max-width: 300px; min-height: 120px; border: 2px dashed #d1d5db; border-radius: 8px; padding: 20px; margin-bottom: 15px; display: <?php echo $email_logo ? 'flex' : 'none'; ?>; align-items: center; justify-content: center; background: #f9fafb; flex-direction: column; gap: 15px;">
                            <?php if ($email_logo): ?>
                                <img src="<?php echo esc_url($email_logo); ?>" alt="Logo" style="max-width: 100%; max-height: 100px; object-fit: contain;">
                                <button type="button" id="efa_remove_logo_btn" class="button" style="margin-top: 10px;">
                                    <span class="dashicons dashicons-dismiss"></span>
                                    Eliminar Logo
                                </button>
                            <?php endif; ?>
                        </div>
                        
                        <!-- Botón para subir/cambiar logo -->
                        <div style="margin-bottom: 15px;">
                            <button type="button" id="efa_upload_logo_btn" class="gw-btn-primary">
                                <span class="dashicons dashicons-upload"></span>
                                <?php echo $email_logo ? 'Cambiar Logo' : 'Subir Logo'; ?>
                            </button>
                        </div>
                        
                        <span class="gw-helper">Recomendado: formato PNG con fondo transparente, tamaño máximo 200px de ancho. Si no subes un logo, se usará el logo de la web.</span>
                    </div>
                </div>

                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-art"></span> Color del Header</h3>
                    <p class="gw-card-desc">Elige el color principal para el header de los correos. Se creará automáticamente un degradado con una tonalidad más oscura.</p>

                    <div class="gw-input-group">
                        <label class="gw-label">Color Principal</label>
                        
                        <!-- Selector de color y campo de texto -->
                        <div style="display: flex; align-items: center; gap: 15px; margin-bottom: 20px;">
                            <input type="color" id="efa_email_header_color" name="efa_email_header_color" value="<?php echo esc_attr($email_header_color); ?>" style="width: 70px; height: 50px; border: 2px solid #d1d5db; border-radius: 8px; cursor: pointer; flex-shrink: 0;">
                            <input type="text" id="efa_email_header_color_text" value="<?php echo esc_attr($email_header_color); ?>" class="gw-input" placeholder="#667eea" style="font-family: monospace; width: 120px; flex-shrink: 0;">
                        </div>
                        
                        <!-- Vista previa del degradado -->
                        <div style="margin-bottom: 15px;">
                            <label style="display: block; font-size: 13px; font-weight: 600; color: #374151; margin-bottom: 8px;">Vista previa del degradado:</label>
                            <div id="efa_color_preview" style="width: 100%; max-width: 500px; height: 70px; border-radius: 8px; background: linear-gradient(135deg, <?php echo esc_attr($email_header_color); ?> 0%, <?php echo esc_attr($this->darken_color($email_header_color, 15)); ?> 100%); border: 2px solid #d1d5db; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);"></div>
                        </div>
                        
                        <span class="gw-helper">El color seleccionado se usará para crear un degradado automático en el header de los correos.</span>
                    </div>
                </div>

                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-edit"></span> Firma de Correos</h3>
                    <p class="gw-card-desc">Personaliza la firma que se añadirá automáticamente a todos los correos enviados desde el plugin.</p>

                    <div class="gw-input-group">
                        <label class="gw-label">Firma Personalizada</label>
                        <?php
                        wp_editor( 
                            $signature, 
                            'efa_email_signature', 
                            [
                                'textarea_name' => 'efa_email_signature',
                                'textarea_rows' => 10,
                                'media_buttons' => false,
                                'teeny' => true,
                                'tinymce' => [
                                    'toolbar1' => 'bold,italic,underline,link,unlink,bullist,numlist',
                                    'toolbar2' => '',
                                ],
                            ] 
                        );
                        ?>
                        <span class="gw-helper">Esta firma se añadirá automáticamente al final de todos los correos enviados desde el plugin. Puedes usar HTML básico.</span>
                    </div>
                </div>

                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-email"></span> Envío de Correo de Prueba</h3>
                    <p class="gw-card-desc">Envía un correo de prueba para verificar que tu configuración SMTP está funcionando correctamente.</p>

                    <div class="gw-input-group">
                        <label class="gw-label">Correo Destinatario</label>
                        <input type="email" id="gw-test-email-input" name="efa_test_email" class="gw-input" placeholder="ejemplo@correo.com" value="<?php echo esc_attr($test_email); ?>">
                        <span class="gw-helper">Introduce el correo electrónico al que quieres enviar el mensaje de prueba. Este correo se guardará para futuros envíos.</span>
                    </div>

                    <div style="margin-top: 20px;">
                        <button type="button" id="gw-send-test-email-btn" class="gw-btn-primary">
                            <span class="dashicons dashicons-email-alt"></span>
                            Enviar Prueba
                        </button>
                    </div>

                    <div id="gw-test-email-message" style="margin-top: 20px; display: none;"></div>
                </div>
                <?php endif; ?>

                <?php if ($section === 'otros'): ?>
                <div class="gw-card">
                    <h3 class="gw-card-title"><span class="dashicons dashicons-admin-settings"></span> Otros Ajustes</h3>
                    
                    <div class="gw-input-group">
                        <label class="gw-label">👥 Acceso al Plugin</label>
                        <select name="efa_access_role" class="gw-select">
                            <option value="manage_options" <?php selected($role, 'manage_options'); ?>>Solo Administradores</option>
                            <option value="publish_pages" <?php selected($role, 'publish_pages'); ?>>Editores y Admin</option>
                            <option value="edit_posts" <?php selected($role, 'edit_posts'); ?>>Autores y superior</option>
                        </select>
                    </div>

                    <div class="gw-input-group">
                        <label class="gw-label">🌓 Tema por Defecto</label>
                        <select name="efa_default_theme" class="gw-select">
                            <option value="light" <?php selected($default_theme, 'light'); ?>>Modo Claro</option>
                            <option value="dark" <?php selected($default_theme, 'dark'); ?>>Modo Oscuro</option>
                            <option value="auto" <?php selected($default_theme, 'auto'); ?>>Automático (usar preferencia del navegador)</option>
                        </select>
                        <span class="gw-helper">Selecciona el tema que se cargará por defecto al abrir el plugin.</span>
                    </div>
                </div>
                <?php endif; ?>

                <div class="gw-save-bar">
                    <button type="submit" name="gw_save_settings" class="gw-btn-primary">
                        <span class="dashicons dashicons-yes-alt"></span>
                        Guardar Configuración
                    </button>
                </div>
            </form>
                </div>
            </div>
        </div>

        <style>
            /* Estilos mejorados para la página de ajustes - Coherencia con Informes */
            .gw-settings-container {
                max-width: 1600px;
                margin: 0 auto;
                padding: 15px 20px 30px 20px;
            }

            /* Layout con sidebar */
            .gw-settings-layout {
                display: flex;
                gap: 30px;
                margin-top: 30px;
            }

            /* Sidebar de navegación */
            .gw-settings-sidebar {
                width: 240px;
                flex-shrink: 0;
                position: sticky;
                top: 100px;
                align-self: flex-start;
                max-height: calc(100vh - 120px);
                overflow-y: auto;
            }

            .gw-settings-nav {
                background: #ffffff;
                border: 1px solid #e5e7eb;
                border-radius: 12px;
                padding: 12px;
                box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
            }

            .gw-settings-nav-item {
                display: flex;
                align-items: center;
                gap: 12px;
                padding: 12px 16px;
                text-decoration: none;
                color: #6b7280;
                font-size: 14px;
                font-weight: 500;
                border-radius: 8px;
                transition: all 0.2s ease;
                margin-bottom: 4px;
                border-left: 3px solid transparent;
            }

            .gw-settings-nav-item:last-child {
                margin-bottom: 0;
            }

            .gw-settings-nav-item:hover {
                background: #f9fafb;
                color: #1f2937;
                border-left-color: #e01d75;
                padding-left: 20px;
            }

            .gw-settings-nav-item.active {
                background: linear-gradient(90deg, rgba(224, 29, 117, 0.1) 0%, rgba(224, 29, 117, 0.05) 100%);
                color: #e01d75;
                border-left-color: #e01d75;
                font-weight: 600;
            }

            .gw-settings-nav-item .dashicons {
                font-size: 20px;
                width: 20px;
                height: 20px;
                color: inherit;
                transition: all 0.2s ease;
            }

            .gw-settings-nav-item:hover .dashicons,
            .gw-settings-nav-item.active .dashicons {
                color: #e01d75;
            }

            .gw-settings-nav-text {
                flex: 1;
            }

            /* Contenido principal */
            .gw-settings-content {
                flex: 1;
                min-width: 0;
            }

            /* Header mejorado */
            .gw-settings-header {
                margin-bottom: 30px;
                padding-bottom: 20px;
                border-bottom: 2px solid #e5e7eb;
            }

            .gw-header-content {
                display: flex;
                justify-content: space-between;
                align-items: flex-start;
                gap: 20px;
            }

            .gw-header-text {
                flex: 1;
            }

            .gw-main-title {
                font-size: 32px;
                font-weight: 700;
                margin: 0 0 8px 0;
                color: #1f2937;
                display: flex;
                align-items: center;
                gap: 15px;
            }

            .gw-icon-wrapper {
                display: inline-flex;
                align-items: center;
                justify-content: center;
                width: 48px;
                height: 48px;
                background: #e01d75;
                border-radius: 12px;
                color: white;
            }

            .gw-icon-wrapper .dashicons {
                font-size: 24px;
                width: 24px;
                height: 24px;
            }

            .gw-header-description {
                font-size: 16px;
                color: #6b7280;
                margin: 0;
                line-height: 1.6;
                padding-top: 0;
            }

            /* Tabs mejoradas */
            .gw-settings-tabs-wrapper {
                margin-bottom: 30px;
            }

            .efa-settings-tabs {
                display: flex;
                gap: 12px;
                border: none;
                padding: 0;
                margin: 0;
            }

            .efa-settings-tabs .nav-tab {
                background: #ffffff;
                border: 2px solid #e5e7eb;
                border-radius: 8px;
                color: #6b7280;
                font-weight: 600;
                font-size: 14px;
                padding: 12px 20px;
                margin: 0;
                transition: all 0.3s ease;
                display: flex;
                align-items: center;
                gap: 8px;
                flex: 1;
                justify-content: center;
                box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
            }

            .efa-settings-tabs .nav-tab .dashicons {
                font-size: 18px;
                width: 18px;
                height: 18px;
            }

            .efa-settings-tabs .nav-tab:hover {
                background: #ffffff;
                color: #374151;
                border-color: #cbd5e1;
                box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
                transform: translateY(-1px);
            }

            .efa-settings-tabs .nav-tab-active,
            .efa-settings-tabs .nav-tab-active:hover {
                background: #e01d75;
                color: #ffffff;
                border-color: #e01d75;
                font-weight: 700;
                box-shadow: 0 4px 12px rgba(224, 29, 117, 0.3);
                transform: translateY(-2px);
            }

            .efa-settings-tabs .nav-tab-active .dashicons,
            .efa-settings-tabs .nav-tab-active:hover .dashicons {
                color: #ffffff;
            }

            /* Cards mejoradas */
            .gw-card {
                background: #ffffff;
                border: 1px solid #e5e7eb;
                border-radius: 12px;
                padding: 24px;
                box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
                transition: all 0.3s ease;
                margin-bottom: 24px;
            }

            .gw-card:hover {
                box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
                transform: translateY(-2px);
            }

            .gw-card-title {
                font-size: 18px;
                font-weight: 600;
                margin: 0 0 16px 0;
                color: #1f2937;
                display: flex;
                align-items: center;
                gap: 10px;
                padding-bottom: 16px;
                border-bottom: 2px solid #f3f4f6;
            }

            .gw-card-title .dashicons {
                font-size: 20px;
                width: 20px;
                height: 20px;
                color: #e01d75;
            }

            .gw-card-desc {
                font-size: 14px;
                color: #6b7280;
                margin: 0 0 16px 0;
                line-height: 1.5;
            }

            /* Inputs mejorados */
            .gw-input-group {
                margin-bottom: 20px;
            }

            .gw-label {
                display: block;
                font-size: 14px;
                font-weight: 600;
                color: #374151;
                margin-bottom: 8px;
            }

            .gw-select,
            .gw-input,
            .gw-textarea {
                width: 100%;
                padding: 12px 16px;
                font-size: 14px;
                border: 2px solid #e5e7eb;
                border-radius: 8px;
                background: #ffffff;
                color: #1f2937;
                transition: all 0.2s ease;
                box-sizing: border-box;
            }

            .gw-textarea {
                resize: vertical;
                min-height: 100px;
            }

            .gw-select:focus,
            .gw-input:focus,
            .gw-textarea:focus {
                outline: none;
                border-color: #e01d75;
                box-shadow: 0 0 0 3px rgba(224, 29, 117, 0.1);
            }

            .gw-helper {
                display: block;
                font-size: 13px;
                color: #6b7280;
                margin-top: 6px;
                line-height: 1.5;
            }

            /* Toggle mejorado */
            .gw-toggle-row {
                display: flex;
                align-items: center;
                justify-content: space-between;
                padding: 16px;
                background: #f9fafb;
                border: 2px solid #e5e7eb;
                border-radius: 8px;
                transition: all 0.2s ease;
            }

            .gw-toggle-row:hover {
                border-color: #cbd5e1;
                background: #f3f4f6;
            }

            .gw-toggle-row span {
                font-size: 14px;
                font-weight: 500;
                color: #374151;
            }

            .gw-toggle {
                position: relative;
                display: inline-block;
                width: 50px;
                height: 28px;
            }

            .gw-toggle input {
                opacity: 0;
                width: 0;
                height: 0;
            }

            .gw-slider {
                position: absolute;
                cursor: pointer;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                background-color: #cbd5e1;
                transition: 0.3s ease;
                border-radius: 34px;
            }

            .gw-slider:before {
                position: absolute;
                content: "";
                height: 22px;
                width: 22px;
                left: 3px;
                bottom: 3px;
                background-color: white;
                transition: 0.3s ease;
                border-radius: 50%;
                box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
            }

            input:checked + .gw-slider {
                background-color: #e01d75;
            }

            input:checked + .gw-slider:before {
                transform: translateX(22px);
            }

            /* Grid mejorado */
            .gw-grid-2 {
                display: grid;
                grid-template-columns: repeat(2, 1fr);
                gap: 20px;
            }

            /* Botón guardar mejorado */
            .gw-save-bar {
                background: #ffffff;
                padding: 24px;
                border-top: 2px solid #e5e7eb;
                margin-top: 40px;
                border-radius: 12px;
                box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.05);
                display: flex;
                justify-content: flex-end;
            }

            .gw-btn-primary {
                display: inline-flex;
                align-items: center;
                gap: 10px;
                background: #e01d75;
                color: white;
                border: none;
                padding: 14px 32px;
                border-radius: 8px;
                font-size: 15px;
                font-weight: 600;
                cursor: pointer;
                transition: all 0.3s ease;
                box-shadow: 0 4px 15px rgba(224, 29, 117, 0.3);
                min-width: auto;
                width: auto;
            }

            .gw-btn-primary:hover {
                transform: translateY(-2px);
                box-shadow: 0 8px 25px rgba(224, 29, 117, 0.4);
                background: #c91a6a;
            }

            .gw-btn-primary:active {
                transform: translateY(0);
            }

            .gw-btn-primary .dashicons {
                font-size: 18px;
                width: 18px;
                height: 18px;
            }

            /* Notice mejorado */
            .notice.notice-success {
                background: #d1fae5;
                border-left-color: #10b981;
                border-radius: 8px;
                padding: 12px 16px;
                margin: 20px 0;
            }

            /* Dark mode */
            body.efa-dark-mode .gw-settings-container {
                background: transparent;
            }

            body.efa-dark-mode .gw-settings-nav {
                background: #1f2940 !important;
                border-color: #3a3a4e !important;
            }

            body.efa-dark-mode .gw-settings-nav-item {
                color: #9ca3af !important;
            }

            body.efa-dark-mode .gw-settings-nav-item:hover {
                background: #2a2a3e !important;
                color: #e4e7eb !important;
                border-left-color: #e01d75 !important;
            }

            body.efa-dark-mode .gw-settings-nav-item.active {
                background: linear-gradient(90deg, rgba(224, 29, 117, 0.2) 0%, rgba(224, 29, 117, 0.1) 100%) !important;
                color: #ff6ba8 !important;
                border-left-color: #e01d75 !important;
            }

            body.efa-dark-mode .gw-main-title {
                color: #e4e7eb !important;
            }

            body.efa-dark-mode .gw-header-description {
                color: #9ca3af !important;
            }

            body.efa-dark-mode .gw-settings-header {
                border-bottom-color: #3a3a4e !important;
            }

            body.efa-dark-mode .efa-settings-tabs .nav-tab {
                background: #2a2a3e !important;
                color: #9ca3af !important;
                border-color: #3a3a4e !important;
            }

            body.efa-dark-mode .efa-settings-tabs .nav-tab:hover {
                background: #2a2a3e !important;
                color: #e4e7eb !important;
                border-color: #4a4a6a !important;
            }

            body.efa-dark-mode .efa-settings-tabs .nav-tab-active,
            body.efa-dark-mode .efa-settings-tabs .nav-tab-active:hover {
                background: #e01d75 !important;
                color: #ffffff !important;
                border-color: #e01d75 !important;
            }

            body.efa-dark-mode .efa-settings-tabs .nav-tab-active .dashicons,
            body.efa-dark-mode .efa-settings-tabs .nav-tab-active:hover .dashicons {
                color: #ffffff !important;
            }

            body.efa-dark-mode .gw-card {
                background: #1f2940 !important;
                border-color: #3a3a4e !important;
            }

            body.efa-dark-mode .gw-card-title {
                color: #e4e7eb !important;
                border-bottom-color: #3a3a4e !important;
            }

            body.efa-dark-mode .gw-card-desc {
                color: #9ca3af !important;
            }

            body.efa-dark-mode .gw-label {
                color: #9ca3af !important;
            }

            body.efa-dark-mode .gw-select,
            body.efa-dark-mode .gw-input,
            body.efa-dark-mode .gw-textarea {
                background: #2a2a3e !important;
                border-color: #3a3a4e !important;
                color: #e4e7eb !important;
            }

            body.efa-dark-mode .gw-select:focus,
            body.efa-dark-mode .gw-input:focus,
            body.efa-dark-mode .gw-textarea:focus {
                border-color: #667eea !important;
            }

            body.efa-dark-mode .gw-helper {
                color: #9ca3af !important;
            }

            body.efa-dark-mode .gw-toggle-row {
                background: #2a2a3e !important;
                border-color: #3a3a4e !important;
            }

            body.efa-dark-mode .gw-toggle-row span {
                color: #e4e7eb !important;
            }

            body.efa-dark-mode .gw-save-bar {
                background: #1f2940 !important;
                border-top-color: #3a3a4e !important;
            }

            /* Responsive */
            @media (max-width: 1024px) {
                .gw-settings-layout {
                    flex-direction: column;
                }

                .gw-settings-sidebar {
                    width: 100%;
                }

                .gw-settings-nav {
                    display: flex;
                    gap: 8px;
                    overflow-x: auto;
                    padding: 12px;
                }

                .gw-settings-nav-item {
                    white-space: nowrap;
                    margin-bottom: 0;
                    border-left: none;
                    border-bottom: 3px solid transparent;
                    padding: 10px 16px;
                }

                .gw-settings-nav-item:hover,
                .gw-settings-nav-item.active {
                    border-left: none;
                    border-bottom-color: #e01d75;
                    padding-left: 16px;
                }
            }

            @media (max-width: 768px) {
                .gw-settings-container {
                    padding: 20px 15px;
                }

                .gw-main-title {
                    font-size: 24px;
                }

                .gw-grid-2 {
                    grid-template-columns: 1fr;
                }

                .efa-settings-tabs {
                    flex-wrap: wrap;
                }

                .efa-settings-tabs .nav-tab {
                    font-size: 12px;
                    padding: 10px 12px;
                }
            }
        </style>
        <script>
        jQuery(document).ready(function($) {
            const labelsData = <?php echo $crm_labels_json; ?>;
            const labelsInput = $('#efa-crm-labels-input');
            const labelsList = $('#efa-labels-list');
            
            function renderLabels() {
                labelsList.empty();
                labelsData.forEach((label, index) => {
                    const html = `
                        <div class="efa-crm-label-row">
                            <div class="efa-crm-input-group">
                                <label>Color</label>
                                <div class="color-picker-wrapper">
                                    <input type="color" class="label-color" value="${label.color}">
                                </div>
                            </div>
                            <div class="efa-crm-input-group">
                                <label>Nombre</label>
                                <input type="text" class="label-text" value="${label.label}" placeholder="Nombre">
                            </div>
                            <div class="efa-crm-preview-group">
                                <label>Vista Previa</label>
                                <span class="efa-crm-badge-preview" style="background-color: ${label.color}20; color: ${label.color}; border: 1px solid ${label.color};">
                                    ${label.label || 'Etiqueta'}
                                </span>
                            </div>
                            <div class="efa-crm-actions">
                                ${label.id === 'new' ? 
                                    '<span class="dashicons dashicons-lock" title="Estado por defecto" style="color:#ccc;"></span>' : 
                                    `<button type="button" class="button-link delete-label" data-index="${index}" title="Eliminar">
                                        <span class="dashicons dashicons-trash"></span>
                                    </button>`
                                }
                            </div>
                        </div>
                    `;
                    labelsList.append(html);
                });
                updateHiddenInput();
            }
            
            function updateHiddenInput() {
                labelsInput.val(JSON.stringify(labelsData));
            }
            
            $('#efa-add-label-btn').on('click', function() {
                const newId = 'custom_' + Date.now();
                labelsData.push({ id: newId, label: 'Nueva Etiqueta', color: '#2271b1' });
                renderLabels();
            });
            
            labelsList.on('input', '.label-text, .label-color', function() {
                const item = $(this).closest('.efa-crm-label-row');
                // Find index based on the row index in the list, as data-index might be on a button that doesn't exist for 'new'
                const index = item.index(); 
                
                const isText = $(this).hasClass('label-text');
                const val = $(this).val();
                
                if (isText) {
                    labelsData[index].label = val;
                    item.find('.efa-crm-badge-preview').text(val || 'Etiqueta');
                } else {
                    labelsData[index].color = val;
                    const badge = item.find('.efa-crm-badge-preview');
                    badge.css({
                        'background-color': val + '20',
                        'color': val,
                        'border-color': val
                    });
                }
                updateHiddenInput();
            });
            
            labelsList.on('click', '.delete-label', function() {
                if (!confirm('¿Eliminar esta etiqueta? Los leads con este estado mantendrán su valor.')) return;
                const index = $(this).data('index');
                labelsData.splice(index, 1);
                renderLabels();
            });
            
            renderLabels();
        });
        </script>
        
        <script>
        jQuery(document).ready(function($) {
            // Detectar si se acaba de actualizar el tema por defecto
            const urlParams = new URLSearchParams(window.location.search);
            if (urlParams.get('theme_updated') === '1') {
                // Limpiar localStorage para que se use la nueva configuración por defecto
                localStorage.removeItem('efa_theme');
                
                // Obtener el nuevo tema por defecto del servidor
                const defaultTheme = <?php echo json_encode(get_option('efa_default_theme', 'light')); ?>;
                let themeToApply = defaultTheme;
                
                // Si es 'auto', detectar preferencia del sistema
                if (themeToApply === 'auto') {
                    if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
                        themeToApply = 'dark';
                    } else {
                        themeToApply = 'light';
                    }
                }
                
                // Aplicar el tema inmediatamente
                if (themeToApply === 'dark') {
                    $('html').addClass('efa-dark-mode');
                    $('body').addClass('efa-dark-mode');
                } else {
                    $('html').removeClass('efa-dark-mode');
                    $('body').removeClass('efa-dark-mode');
                }
                
                // Actualizar el icono del toggle si existe
                const toggleBtn = $('#efa-theme-toggle');
                if (toggleBtn.length) {
                    toggleBtn.html(themeToApply === 'dark' 
                        ? '<span class="dashicons dashicons-lightbulb"></span> Light Mode' 
                        : '<span class="dashicons dashicons-moon"></span> Dark Mode');
                }
                
                // Limpiar el parámetro de la URL sin recargar
                const newUrl = window.location.pathname + '?page=gw-elementor&tab=settings&updated=true&section=otros';
                window.history.replaceState({}, '', newUrl);
            }

            // Envío de correo de prueba
            $('#gw-send-test-email-btn').on('click', function() {
                var $btn = $(this);
                var $message = $('#gw-test-email-message');
                var email = $('#gw-test-email-input').val();

                if (!email || !email.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) {
                    $message.removeClass('notice-success').addClass('notice notice-error inline').html('<p><strong>Error:</strong> Por favor, introduce un correo electrónico válido.</p>').show();
                    return;
                }

                $btn.prop('disabled', true).html('<span class="dashicons dashicons-update spin"></span> Enviando...');
                $message.hide();

                $.ajax({
                    url: ajaxurl,
                    type: 'POST',
                    data: {
                        action: 'gw_send_test_email',
                        nonce: '<?php echo wp_create_nonce( 'gw_settings_nonce' ); ?>',
                        test_email: email
                    },
                    success: function(response) {
                        if (response.success) {
                            $message.removeClass('notice-error').addClass('notice notice-success inline').html('<p><strong>¡Éxito!</strong> ' + response.data.message + '</p>').show();
                            $('#gw-test-email-input').val('');
                        } else {
                            $message.removeClass('notice-success').addClass('notice notice-error inline').html('<p><strong>Error:</strong> ' + (response.data.message || 'Error al enviar el correo.') + '</p>').show();
                        }
                    },
                    error: function() {
                        $message.removeClass('notice-success').addClass('notice notice-error inline').html('<p><strong>Error:</strong> Error de conexión. Por favor, intenta de nuevo.</p>').show();
                    },
                    complete: function() {
                        $btn.prop('disabled', false).html('<span class="dashicons dashicons-email-alt"></span> Enviar Prueba');
                    }
                });
            });

            // Permitir enviar con Enter
            $('#gw-test-email-input').on('keypress', function(e) {
                if (e.which === 13) {
                    e.preventDefault();
                    $('#gw-send-test-email-btn').click();
                }
            });

            // Interceptar el submit del formulario para guardar flag en sessionStorage
            $('form').on('submit', function(e) {
                const submitButton = $(this).find('button[name="gw_save_settings"]');
                if (submitButton.length > 0) {
                    console.log('Formulario de guardar detectado, guardando flag en sessionStorage...');
                    sessionStorage.setItem('gw_settings_saved', 'true');
                }
            });

            // Mostrar modal de éxito al guardar configuración
            function showSaveSuccessModal() {
                console.log('=== INICIANDO showSaveSuccessModal ===');
                
                // Verificar sessionStorage primero (más confiable que parámetros de URL)
                const savedFlag = sessionStorage.getItem('gw_settings_saved');
                console.log('Flag en sessionStorage:', savedFlag);
                
                // También verificar parámetros de URL por si acaso
                const urlParams = new URLSearchParams(window.location.search);
                const urlString = window.location.href;
                const urlMatch = urlString.match(/[?&]updated=([^&]*)/);
                const updatedParam1 = urlParams.get('updated');
                const updatedParam2 = urlMatch ? urlMatch[1] : null;
                
                console.log('URL completa:', urlString);
                console.log('Parámetro updated (URLSearchParams):', updatedParam1);
                console.log('Parámetro updated (regex):', updatedParam2);
                console.log('Swal disponible:', typeof Swal !== 'undefined');
                console.log('Swal.fire disponible:', typeof Swal !== 'undefined' && typeof Swal.fire === 'function');
                
                // Verificar si el flag está presente en sessionStorage o en la URL
                const hasUpdated = savedFlag === 'true' || updatedParam1 === 'true' || updatedParam2 === 'true';
                
                if (hasUpdated) {
                    // Limpiar el flag de sessionStorage inmediatamente
                    if (savedFlag === 'true') {
                        sessionStorage.removeItem('gw_settings_saved');
                        console.log('Flag de sessionStorage eliminado');
                    }
                    console.log('Parámetro updated=true encontrado, intentando mostrar modal...');
                    // Esperar a que SweetAlert2 esté disponible con múltiples intentos
                    let attempts = 0;
                    const maxAttempts = 50; // 5 segundos máximo (50 * 100ms)
                    
                    function tryShowModal() {
                        attempts++;
                        console.log('Intento', attempts, 'de', maxAttempts, '- Swal disponible:', typeof Swal !== 'undefined', '- Swal.fire:', typeof Swal !== 'undefined' && typeof Swal.fire === 'function');
                        
                        if (typeof Swal !== 'undefined' && typeof Swal.fire === 'function') {
                            console.log('SweetAlert2 está disponible, mostrando modal...');
                            Swal.fire({
                                title: '<div style="display: flex; align-items: center; justify-content: center; gap: 10px;"><span class="dashicons dashicons-yes-alt" style="font-size: 32px; color: #10b981;"></span><span>¡Configuración Guardada!</span></div>',
                                html: `
                                    <div style="text-align: center; padding: 10px 0;">
                                        <p style="margin-bottom: 15px; color: #6b7280; font-size: 14px;">Los ajustes se han guardado correctamente.</p>
                                        <div style="background: #f0fdf4; border: 1px solid #86efac; border-radius: 6px; padding: 12px; font-size: 13px; color: #166534;">
                                            <span class="dashicons dashicons-info" style="font-size: 14px; vertical-align: middle; margin-right: 6px;"></span>
                                            Los cambios se han aplicado correctamente.
                                        </div>
                                    </div>
                                `,
                                icon: false,
                                confirmButtonText: '<span class="dashicons dashicons-yes-alt" style="font-size: 14px; vertical-align: middle; margin-right: 4px;"></span> Aceptar',
                                confirmButtonColor: '#10b981',
                                timer: 3000,
                                timerProgressBar: true,
                                allowOutsideClick: false
                            }).then(() => {
                                console.log('Modal cerrado, limpiando URL...');
                                // Limpiar el parámetro de la URL sin recargar
                                const newUrl = window.location.pathname + window.location.search.replace(/[?&]updated=true/, '').replace(/^&/, '?');
                                window.history.replaceState({}, '', newUrl);
                            });
                        } else if (attempts < maxAttempts) {
                            // Si SweetAlert2 no está disponible, intentar de nuevo después de un breve delay
                            setTimeout(tryShowModal, 100);
                        } else {
                            // Si después de varios intentos no está disponible, mostrar un alert simple
                            console.error('SweetAlert2 no está disponible después de', maxAttempts, 'intentos');
                            alert('¡Configuración guardada correctamente!');
                            const newUrl = window.location.pathname + window.location.search.replace(/[?&]updated=true/, '').replace(/^&/, '?');
                            window.history.replaceState({}, '', newUrl);
                        }
                    }
                    
                    // Iniciar intentos
                    console.log('Iniciando intentos para mostrar modal...');
                    tryShowModal();
                } else {
                    console.log('Parámetro updated no es true, no se mostrará el modal');
                }
            }
            
            // Intentar mostrar el modal después de que todo esté cargado
            // IMPORTANTE: Después de un redirect, la página se recarga completamente
            // Necesitamos esperar a que todos los scripts estén cargados
            console.log('Estado del documento:', document.readyState);
            console.log('jQuery disponible:', typeof jQuery !== 'undefined');
            console.log('Swal disponible al inicio:', typeof Swal !== 'undefined');
            
            // Función para verificar y mostrar el modal cuando todo esté listo
            function initSaveModal() {
                console.log('initSaveModal ejecutado');
                // Esperar a que jQuery y SweetAlert2 estén disponibles
                if (typeof jQuery !== 'undefined' && typeof Swal !== 'undefined') {
                    console.log('jQuery y Swal disponibles, ejecutando showSaveSuccessModal...');
                    showSaveSuccessModal();
                } else {
                    console.log('Esperando a que jQuery o Swal estén disponibles...');
                    setTimeout(initSaveModal, 100);
                }
            }
            
            // Ejecutar cuando el DOM esté listo
            if (document.readyState === 'loading') {
                console.log('Documento aún cargando, esperando DOMContentLoaded...');
                document.addEventListener('DOMContentLoaded', function() {
                    console.log('DOMContentLoaded disparado');
                    setTimeout(initSaveModal, 500);
                });
            } else {
                console.log('Documento ya cargado, ejecutando con delay...');
                setTimeout(initSaveModal, 500);
            }
            
            // También ejecutar cuando la ventana termine de cargar
            $(window).on('load', function() {
                console.log('Window load disparado');
                setTimeout(initSaveModal, 800);
            });

            // Subida de logo para correos
            var logoFrame;
            $('#efa_upload_logo_btn').on('click', function(e) {
                e.preventDefault();
                
                // Si el frame ya existe, abrirlo
                if (logoFrame) {
                    logoFrame.open();
                    return;
                }
                
                // Crear el frame de WordPress Media Uploader
                logoFrame = wp.media({
                    title: 'Seleccionar Logo para Correos',
                    button: {
                        text: 'Usar este logo'
                    },
                    multiple: false,
                    library: {
                        type: 'image'
                    }
                });
                
                // Cuando se selecciona una imagen
                logoFrame.on('select', function() {
                    var attachment = logoFrame.state().get('selection').first().toJSON();
                    $('#efa_email_logo').val(attachment.url);
                    $('#efa_logo_preview').html(
                        '<img src="' + attachment.url + '" alt="Logo" style="max-width: 100%; max-height: 100px; object-fit: contain;">' +
                        '<button type="button" id="efa_remove_logo_btn" class="button" style="margin-top: 10px;">' +
                        '<span class="dashicons dashicons-dismiss"></span> Eliminar Logo' +
                        '</button>'
                    ).show();
                    // Re-asignar el evento click al nuevo botón de eliminar
                    $('#efa_remove_logo_btn').on('click', function(e) {
                        e.preventDefault();
                        $('#efa_email_logo').val('');
                        $('#efa_logo_preview').hide().html('');
                        $('#efa_upload_logo_btn').html('<span class="dashicons dashicons-upload"></span> Subir Logo');
                    });
                    $('#efa_upload_logo_btn').html('<span class="dashicons dashicons-upload"></span> Cambiar Logo');
                });
                
                // Abrir el frame
                logoFrame.open();
            });
            
            // Eliminar logo
            $('#efa_remove_logo_btn').on('click', function(e) {
                e.preventDefault();
                $('#efa_email_logo').val('');
                $('#efa_logo_preview').hide().html('');
                $('#efa_remove_logo_btn').hide();
                $('#efa_upload_logo_btn').html('<span class="dashicons dashicons-upload"></span> Subir Logo');
            });

            // Selector de color del header
            function updateColorPreview(color) {
                // Función para oscurecer un color
                function darkenColor(hex, percent) {
                    hex = hex.replace('#', '');
                    var r = parseInt(hex.substr(0, 2), 16);
                    var g = parseInt(hex.substr(2, 2), 16);
                    var b = parseInt(hex.substr(4, 2), 16);
                    r = Math.floor(r * (100 - percent) / 100);
                    g = Math.floor(g * (100 - percent) / 100);
                    b = Math.floor(b * (100 - percent) / 100);
                    r = r.toString(16).length === 1 ? '0' + r.toString(16) : r.toString(16);
                    g = g.toString(16).length === 1 ? '0' + g.toString(16) : g.toString(16);
                    b = b.toString(16).length === 1 ? '0' + b.toString(16) : b.toString(16);
                    return '#' + r + g + b;
                }
                
                var darkerColor = darkenColor(color, 15);
                $('#efa_color_preview').css('background', 'linear-gradient(135deg, ' + color + ' 0%, ' + darkerColor + ' 100%)');
            }

            $('#efa_email_header_color').on('change', function() {
                var color = $(this).val();
                $('#efa_email_header_color_text').val(color);
                updateColorPreview(color);
            });

            $('#efa_email_header_color_text').on('input', function() {
                var color = $(this).val();
                if (/^#[0-9A-F]{6}$/i.test(color)) {
                    $('#efa_email_header_color').val(color);
                    updateColorPreview(color);
                }
            });
        });
        </script>
        <style>
            .dashicons-update.spin {
                animation: spin 1s linear infinite;
            }
            @keyframes spin {
                from { transform: rotate(0deg); }
                to { transform: rotate(360deg); }
            }
        </style>
        <?php
    }
    
    /**
     * Detecta si hay algún plugin SMTP instalado
     */
    private function detect_smtp_plugin() {
        // Lista de plugins SMTP comunes
        $smtp_plugins = [
            'wp-mail-smtp/wp_mail_smtp.php' => 'WP Mail SMTP',
            'easy-wp-smtp/easy-wp-smtp.php' => 'Easy WP SMTP',
            'post-smtp/postman-smtp.php' => 'Post SMTP',
            'wp-smtp/wp-smtp.php' => 'WP SMTP',
            'smtp-mailer/main.php' => 'SMTP Mailer',
            'gmail-smtp/main.php' => 'Gmail SMTP',
            'wp-mail-bank/wp-mail-bank.php' => 'WP Mail Bank',
            'fluent-smtp/fluent-smtp.php' => 'FluentSMTP',
            'mailgun/mailgun.php' => 'Mailgun',
            'sendgrid-email-delivery-simplified/wpsendgrid.php' => 'SendGrid',
        ];

        // Verificar si alguno está activo
        if ( ! function_exists( 'is_plugin_active' ) ) {
            require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
        }

        foreach ( $smtp_plugins as $plugin_path => $plugin_name ) {
            if ( is_plugin_active( $plugin_path ) ) {
                return [
                    'installed' => true,
                    'name' => $plugin_name,
                ];
            }
        }

        // También verificar si hay funciones SMTP personalizadas
        if ( has_filter( 'wp_mail_smtp' ) || has_filter( 'phpmailer_init' ) ) {
            return [
                'installed' => true,
                'name' => 'SMTP Personalizado',
            ];
        }

        return [
            'installed' => false,
            'name' => null,
        ];
    }

    /**
     * Envía un correo de prueba vía AJAX
     */
    public function ajax_send_test_email() {
        check_ajax_referer( 'gw_settings_nonce', 'nonce' );

        $role = get_option( 'efa_access_role', 'manage_options' );
        if ( ! current_user_can( $role ) ) {
            wp_send_json_error( [ 'message' => 'No tienes permisos para realizar esta acción.' ] );
        }

        $test_email = isset( $_POST['test_email'] ) ? sanitize_email( $_POST['test_email'] ) : '';

        if ( empty( $test_email ) || ! is_email( $test_email ) ) {
            wp_send_json_error( [ 'message' => 'Por favor, introduce un correo electrónico válido.' ] );
        }

        $signature = get_option( 'efa_email_signature', '' );
        
        $subject = 'Correo de Prueba - GW Analytics';
        $message = 'Este es un correo de prueba enviado desde GW Analytics.' . "\n\n";
        $message .= 'Si recibes este correo, significa que tu configuración SMTP está funcionando correctamente.' . "\n\n";
        
        if ( ! empty( $signature ) ) {
            $message .= "\n\n---\n" . wp_kses_post( $signature );
        }

        $headers = [ 'Content-Type: text/html; charset=UTF-8' ];
        
        $sent = wp_mail( $test_email, $subject, nl2br( esc_html( $message ) ), $headers );

        if ( $sent ) {
            wp_send_json_success( [ 'message' => '¡Correo de prueba enviado correctamente! Revisa tu bandeja de entrada.' ] );
        } else {
            wp_send_json_error( [ 'message' => 'Error al enviar el correo. Verifica tu configuración SMTP.' ] );
        }
    }

    private function get_default_crm_labels() {
        return [
            ['id' => 'new', 'label' => 'Nuevo', 'color' => '#2271b1'],
            ['id' => 'contacted', 'label' => 'Contactado', 'color' => '#f59e0b'],
            ['id' => 'budget', 'label' => 'Presupuesto', 'color' => '#9333ea'],
            ['id' => 'won', 'label' => 'Ganado', 'color' => '#16a34a'],
            ['id' => 'lost', 'label' => 'Perdido', 'color' => '#dc2626']
        ];
    }

    /**
     * Oscurece un color hexadecimal en un porcentaje
     */
    private function darken_color($hex, $percent = 15)
    {
        $hex = str_replace('#', '', $hex);
        $r = hexdec(substr($hex, 0, 2));
        $g = hexdec(substr($hex, 2, 2));
        $b = hexdec(substr($hex, 4, 2));
        
        $r = floor($r * (100 - $percent) / 100);
        $g = floor($g * (100 - $percent) / 100);
        $b = floor($b * (100 - $percent) / 100);
        
        $r = str_pad(dechex($r), 2, '0', STR_PAD_LEFT);
        $g = str_pad(dechex($g), 2, '0', STR_PAD_LEFT);
        $b = str_pad(dechex($b), 2, '0', STR_PAD_LEFT);
        
        return '#' . $r . $g . $b;
    }
}
