/home/coolpkct/www/websites/alylela.com/wp-content/plugins/wp-db-scout/assets/js/wds-admin.js
/**
 * WP DB Scout Admin JavaScript
 */

// Debug: Script loading
console.log('==========================================');
console.log('WDS Admin: SCRIPT FILE LOADING');
console.log('WDS Admin: Time:', new Date().toISOString());
console.log('WDS Admin: jQuery available:', typeof jQuery !== 'undefined');
console.log('WDS Admin: $ available:', typeof $ !== 'undefined');

(function($) {
    'use strict';
    
    console.log('WDS Admin: Inside IIFE, $ is:', typeof $);
    console.log('WDS Admin: jQuery version:', typeof $ !== 'undefined' && $.fn ? $.fn.jquery : 'N/A');

    // Try multiple ready methods
    console.log('WDS Admin: Setting up document ready...');
    
    // Method 1: Standard jQuery ready
    $(document).ready(function() {
        console.log('==========================================');
        console.log('WDS Admin: DOCUMENT READY (Method 1)');
        console.log('WDS Admin: Time:', new Date().toISOString());
        console.log('WDS Admin: Tabs found:', $('.nav-tab').length);
        console.log('WDS Admin: Tab panels found:', $('.wds-tab-panel').length);
        
        // Initialize
        console.log('WDS Admin: Calling init functions...');
        WDSAdmin.init();
        WDSLogExporter.init();
        WDSLogger.init();
        console.log('WDS Admin: Init functions called');
        console.log('==========================================');
    });
    
    // Method 2: Alternative ready
    jQuery(function($) {
        console.log('WDS Admin: DOCUMENT READY (Method 2 - Alternative)');
    });
    
    // Method 3: Window load as fallback
    $(window).on('load', function() {
        console.log('WDS Admin: WINDOW LOAD (Fallback)');
        if ($('.nav-tab').length > 0 && !$('.nav-tab').data('initialized')) {
            console.log('WDS Admin: Tabs not initialized, doing it now...');
            $('.nav-tab').data('initialized', true);
            WDSAdmin.init();
        }
    });

    var WDSAdmin = {
        init: function() {
            console.log('WDSAdmin.init: Starting initialization');
            console.log('WDSAdmin.init: jQuery version:', $.fn.jquery);
            console.log('WDSAdmin.init: Document ready state:', document.readyState);
            
            this.bindEvents();
            this.initTabs();
            
            // Автоматически загружаем информацию о сервере
            if ($('#server-info-tab').hasClass('active')) {
                console.log('WDSAdmin.init: Server info tab is active');
                WDSServerInfo.loadServerInfo();
            } else {
                console.log('WDSAdmin.init: Server info tab NOT active');
            }
            
            console.log('WDSAdmin.init: Initialization complete');
        },

        bindEvents: function() {
            console.log('WDSAdmin.bindEvents: Starting');
            
            // Tab switching
            var tabsFound = $('.nav-tab').length;
            console.log('WDSAdmin.bindEvents: Found', tabsFound, 'tabs');
            
            $(document).on('click', '.nav-tab', function(e) {
                console.log('WDSAdmin.bindEvents: Tab clicked!');
                WDSAdmin.switchTab.call(this, e);
            });
            
            // Password toggle для полей с паролями
            $(document).on('click', '.wds-toggle-password', this.togglePasswordVisibility);
            
            console.log('WDSAdmin.bindEvents: Events bound');
        },

        initTabs: function() {
            console.log('WDSAdmin.initTabs: Starting');
            console.log('WDSAdmin.initTabs: Tabs found:', $('.nav-tab').length);
            console.log('WDSAdmin.initTabs: Panels found:', $('.wds-tab-panel').length);
            console.log('WDSAdmin.initTabs: Active tabs:', $('.nav-tab-active').length);
            
            // Cache tab content to prevent loss
            $('.wds-tab-panel').each(function() {
                var $panel = $(this);
                var panelId = $panel.attr('id');
                if (!$panel.data('content-cached')) {
                    $panel.data('original-content', $panel.html());
                    $panel.data('content-cached', true);
                    console.log('WDSAdmin.initTabs: Cached content for', panelId);
                }
            });
            
            // Set first tab as active if none selected
            if (!$('.nav-tab-active').length) {
                console.log('WDSAdmin.initTabs: No active tab, setting first as active');
                $('.nav-tab:first').addClass('nav-tab-active');
                $('.wds-tab-panel:first').addClass('active').show();
            } else {
                console.log('WDSAdmin.initTabs: Active tab already exists');
                // Ensure active panel is visible
                var activeTab = $('.nav-tab-active').data('tab');
                $('#' + activeTab + '-tab').addClass('active').show();
            }
            
            console.log('WDSAdmin.initTabs: Complete');
        },

        switchTab: function(e) {
            console.log('WDSAdmin.switchTab: Called');
            console.log('WDSAdmin.switchTab: Event:', e);
            console.log('WDSAdmin.switchTab: This:', this);
            
            e.preventDefault();
            
            var $tab = $(this);
            var target = $tab.data('tab');
            
            console.log('WDSAdmin.switchTab: Target tab:', target);
            console.log('WDSAdmin.switchTab: Looking for panel:', '#' + target + '-tab');
            
            // Update tab states
            $('.nav-tab').removeClass('nav-tab-active');
            $tab.addClass('nav-tab-active');
            
            console.log('WDSAdmin.switchTab: Tab classes updated');
            
            // Hide all panels first
            $('.wds-tab-panel').each(function() {
                $(this).removeClass('active').hide();
            });
            
            // Show the target panel
            var $targetPanel = $('#' + target + '-tab');
            console.log('WDSAdmin.switchTab: Target panel found:', $targetPanel.length);
            
            if ($targetPanel.length > 0) {
                // Check if content is empty and restore if needed
                if ($targetPanel.html().trim() === '' || $targetPanel.html().trim() === '<!-- -->') {
                    console.warn('WDSAdmin.switchTab: Panel content is empty, restoring...');
                    var cachedContent = $targetPanel.data('original-content');
                    if (cachedContent) {
                        $targetPanel.html(cachedContent);
                        console.log('WDSAdmin.switchTab: Content restored from cache');
                    } else {
                        console.error('WDSAdmin.switchTab: No cached content available!');
                        // Force reload the page to restore content
                        $targetPanel.html('<div class="notice notice-warning"><p>Content lost. <a href="#" onclick="location.reload(); return false;">Reload page</a></p></div>');
                    }
                }
                
                $targetPanel.addClass('active').show();
                console.log('WDSAdmin.switchTab: Panel shown');
            } else {
                console.error('WDSAdmin.switchTab: Panel not found!', '#' + target + '-tab');
            }
            
            console.log('WDSAdmin.switchTab: Complete');
        },

        togglePasswordVisibility: function(e) {
            e.preventDefault();
            var $btn = $(this);
            var targetId = $btn.data('target');
            var $input = $('#' + targetId);
            
            if ($input.attr('type') === 'password') {
                $input.attr('type', 'text');
                $btn.find('span').removeClass('dashicons-visibility').addClass('dashicons-hidden');
                $btn.text(' Скрыть');
            } else {
                $input.attr('type', 'password');
                $btn.find('span').removeClass('dashicons-hidden').addClass('dashicons-visibility');
                $btn.text(' Показать');
            }
        }
    };

    // Server Info Handler
    var WDSServerInfo = {
        loadServerInfo: function() {
            // Информация уже загружена через PHP, не нужно дополнительных запросов
            console.log('Server info already loaded');
        }
    };

    // Copy to clipboard functionality
    var WDSClipboard = {
        init: function() {
            $(document).on('click', '.wds-copy-btn', this.copyToClipboard);
            $(document).on('click', '.wds-copy-all-btn', this.copyAllInfo);
        },

        copyToClipboard: function(e) {
            e.preventDefault();
            var $btn = $(this);
            var targetId = $btn.data('target');
            var $input = $('#' + targetId);
            
            // Save original type
            var originalType = $input.attr('type');
            
            // Temporarily make visible if password field
            if (originalType === 'password') {
                $input.attr('type', 'text');
            }
            
            // Select and copy
            $input.select();
            document.execCommand('copy');
            
            // Restore type
            if (originalType === 'password') {
                $input.attr('type', 'password');
            }
            
            // Visual feedback
            var originalText = $btn.html();
            $btn.html('<span class="dashicons dashicons-yes"></span> Скопировано!');
            
            setTimeout(function() {
                $btn.html(originalText);
            }, 2000);
        },
        
        copyAllInfo: function(e) {
            e.preventDefault();
            var $btn = $(this);
            
            // Проверяем, нужно ли включать заголовки
            var includeHeaders = $('#wds-include-headers').is(':checked');
            
            // Собираем данные из полей
            var serverIp = $('#wds-server-ip').val();
            var dbHost = $('#wds-db-host').val();
            var dbName = $('#wds-db-name').val();
            var dbUser = $('#wds-db-user').val();
            var dbPass = $('#wds-db-pass').val();
            var dbPrefix = $('#wds-db-prefix').val();
            var phpVersion = $('#wds-php-version').text();
            var mysqlVersion = $('#wds-mysql-version').text();
            var wpVersion = $('#wds-wp-version').text();
            var serverSoftware = $('#wds-server-software').text();
            var memoryLimit = $('#wds-memory-limit').text();
            
            // Форматируем текст для CSV (через точку с запятой для Excel)
            var formattedInfo = "";
            
            // Первая строка - заголовки (названия параметров), если чекбокс отмечен
            if (includeHeaders) {
                formattedInfo = "IP сервера;Хост БД;Имя БД;Пользователь БД;Пароль БД;Префикс таблиц;Версия PHP;Версия MySQL;Версия WordPress;Сервер;Лимит памяти;Дата и время;Сайт\n";
            }
            
            // Вторая строка - значения параметров (всегда копируется)
            formattedInfo += serverIp + ";" + dbHost + ";" + dbName + ";" + dbUser + ";" + dbPass + ";" + dbPrefix + ";" + 
                            phpVersion + ";" + mysqlVersion + ";" + wpVersion + ";" + serverSoftware + ";" + memoryLimit + ";" + 
                            new Date().toLocaleString('ru-RU') + ";" + window.location.origin;
            
            // Создаем временный элемент для копирования
            var $temp = $('<textarea>');
            $('body').append($temp);
            $temp.val(formattedInfo).select();
            
            // Копируем в буфер обмена
            var copied = false;
            try {
                copied = document.execCommand('copy');
            } catch (ex) {
                console.error('Ошибка копирования:', ex);
            }
            
            // Удаляем временный элемент
            $temp.remove();
            
            // Visual feedback
            var originalHtml = $btn.html();
            if (copied) {
                $btn.removeClass('button-primary').addClass('button-success');
                $btn.html('<span class="dashicons dashicons-yes"></span> Вся информация скопирована в буфер обмена!');
            } else {
                $btn.addClass('button-error');
                $btn.html('<span class="dashicons dashicons-warning"></span> Ошибка копирования!');
            }
            
            setTimeout(function() {
                $btn.removeClass('button-success button-error').addClass('button-primary');
                $btn.html(originalHtml);
            }, 3000);
        }
    };

    // Initialize clipboard
    WDSClipboard.init();
    
    // Log Exporter Handler
    var WDSLogExporter = {
        init: function() {
            this.bindEvents();
        },
        
        bindEvents: function() {
            $(document).on('click', '#wds-export-session-log', this.exportLog);
        },
        
        exportLog: function(e) {
            e.preventDefault();
            
            var $btn = $(this);
            var $status = $('.wds-export-status');
            
            // Show loading state
            $btn.prop('disabled', true);
            $btn.html('<span class="dashicons dashicons-update spin"></span> Подготовка логов...');
            
            // Make AJAX request
            $.ajax({
                url: wds_ajax.ajax_url,
                type: 'POST',
                data: {
                    action: 'wds_export_session_log',
                    nonce: wds_ajax.nonce
                },
                success: function(response) {
                    if (response.success) {
                        // Decode base64 content to binary string
                        var binaryString = atob(response.data.content);
                        var filename = response.data.filename;
                        
                        // Convert binary string to Uint8Array
                        var bytes = new Uint8Array(binaryString.length);
                        for (var i = 0; i < binaryString.length; i++) {
                            bytes[i] = binaryString.charCodeAt(i);
                        }
                        
                        // Create blob with UTF-8 BOM and download
                        var blob = new Blob([bytes], { type: 'text/plain;charset=utf-8' });
                        var url = window.URL.createObjectURL(blob);
                        var a = document.createElement('a');
                        a.style.display = 'none';
                        a.href = url;
                        a.download = filename;
                        document.body.appendChild(a);
                        a.click();
                        window.URL.revokeObjectURL(url);
                        document.body.removeChild(a);
                        
                        // Show success message
                        $status.fadeIn().delay(3000).fadeOut();
                        
                        // Log to console
                        console.log('Log exported successfully:', filename);
                    } else {
                        alert('Ошибка экспорта: ' + (response.data.message || 'Неизвестная ошибка'));
                    }
                },
                error: function(xhr, status, error) {
                    console.error('Export error:', error);
                    alert('Ошибка при экспорте логов: ' + error);
                },
                complete: function() {
                    // Reset button state
                    $btn.prop('disabled', false);
                    $btn.html('<span class="dashicons dashicons-download"></span> Сохранить ошибку');
                }
            });
        }
    };

    // Frontend Logger
    var WDSLogger = {
        init: function() {
            this.logPageLoad();
            this.bindEvents();
        },
        
        bindEvents: function() {
            var self = this;
            
            // Log tab switches
            $(document).on('click', '.nav-tab', function() {
                var tab = $(this).data('tab');
                self.log('tab_switch', {tab: tab}, 'User switched to tab: ' + tab);
            });
            
            // Log button clicks
            $(document).on('click', 'button, .button', function(e) {
                var $btn = $(this);
                var btnText = $btn.text().trim();
                var btnId = $btn.attr('id') || 'unknown';
                
                // Don't log the logger button itself
                if (btnId === 'wds-export-session-log') return;
                
                self.log('button_click', {
                    button_id: btnId,
                    button_text: btnText,
                    button_class: $btn.attr('class')
                }, 'Button clicked: ' + btnText);
            });
            
            // Log form submissions
            $(document).on('submit', 'form', function(e) {
                var formId = $(this).attr('id') || 'unknown';
                self.log('form_submit', {form_id: formId}, 'Form submitted: ' + formId);
            });
            
            // Log search inputs
            $(document).on('change', 'input[type="text"], input[type="search"]', function() {
                var $input = $(this);
                var inputId = $input.attr('id') || 'unknown';
                var inputName = $input.attr('name') || 'unknown';
                
                self.log('input_change', {
                    input_id: inputId,
                    input_name: inputName,
                    value_length: $input.val().length
                }, 'Input changed: ' + inputName);
            });
        },
        
        logPageLoad: function() {
            var tab = $('.nav-tab-active').data('tab') || 'unknown';
            this.log('page_load', {
                tab: tab,
                url: window.location.href,
                referrer: document.referrer
            }, 'WP DB Scout page loaded, tab: ' + tab);
        },
        
        log: function(eventType, eventData, message) {
            // Send log to server
            $.ajax({
                url: wds_ajax.ajax_url,
                type: 'POST',
                data: {
                    action: 'wds_log_frontend_event',
                    nonce: wds_ajax.nonce,
                    event_type: eventType,
                    event_data: eventData,
                    message: message
                },
                success: function(response) {
                    // Silent logging - no user feedback
                    console.log('Event logged:', eventType);
                },
                error: function(xhr, status, error) {
                    console.error('Failed to log event:', error);
                }
            });
        }
    };

    // Make available globally
    window.WDSAdmin = WDSAdmin;
    window.WDSServerInfo = WDSServerInfo;
    window.WDSLogExporter = WDSLogExporter;
    window.WDSLogger = WDSLogger;

})(jQuery);

console.log('WDS Admin: Script file fully loaded');
console.log('==========================================');