jQuery(document).ready(function ($) {
    // Tab switching
    $('.foxblock-tab-link').on('click', function (e) {
        e.preventDefault();
        $('.foxblock-tab-link').removeClass('active');
        $(this).addClass('active');

        var target = $(this).data('tab');
        $('.foxblock-tab').removeClass('active');
        $('#foxblock-tab-' + target).addClass('active');

        if (history.pushState) {
            history.pushState(null, null, '#' + target);
        } else {
            location.hash = '#' + target;
        }
    });

    // Load tab from hash
    if (window.location.hash) {
        var hash = window.location.hash.substring(1);
        if ($('.foxblock-tab-link[data-tab="' + hash + '"]').length) {
            $('.foxblock-tab-link[data-tab="' + hash + '"]').trigger('click');
        }
    }

    // Flag emoji cache (localStorage) + batch AJAX lookup
    var FLAG_CACHE_KEY = 'foxblock_flags_v1';
    var flagCache = {};
    try { flagCache = JSON.parse(localStorage.getItem(FLAG_CACHE_KEY) || '{}'); } catch (e) { }

    function ccToFlag(cc) {
        if (!cc || cc.length !== 2) {
            return '<span title="Unknown" style="display:inline-flex;align-items:center;justify-content:center;width:24px;height:16px;color:#ff6c00;">'
                + '<svg viewBox="0 0 24 24" aria-hidden="true" style="width:18px;height:18px;" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round">'
                + '<circle cx="12" cy="12" r="9"></circle>'
                + '<path d="M3 12h18"></path>'
                + '<path d="M12 3a14 14 0 0 1 0 18"></path>'
                + '<path d="M12 3a14 14 0 0 0 0 18"></path>'
                + '</svg>'
                + '</span>';
        }
        var code = cc.toLowerCase();
        return '<img src="https://flagcdn.com/w40/' + code + '.png" width="24" height="16" alt="' + cc + '" title="' + cc + '" style="vertical-align:middle;border-radius:2px;">';
    }

    function foxblockRenderBlockButtons(container) {
        var myIp = (foxblock_ajax.my_ip || '').trim();
        container.find('td.foxblock-action').each(function () {
            var ip = $(this).closest('tr').find('td.foxblock-ip').text().trim();
            if (!ip || ip === myIp) return; // skip admin IP
            if ($(this).find('.foxblock-block-btn').length) return; // already rendered
            $(this).html('<button class="foxblock-block-btn button button-small" data-ip="' + ip + '" style="color:#d63638;border-color:#d63638;">Chặn</button>');
        });
    }
    function foxblockHighlightAdminIp(container) {
        var myIp = (foxblock_ajax.my_ip || '').trim();
        if (!myIp) return;
        container.find('td.foxblock-ip').each(function () {
            if ($(this).text().trim() === myIp) {
                $(this).addClass('is-admin-ip');
            } else {
                $(this).removeClass('is-admin-ip');
            }
        });
    }
    function foxblockRenderFlags(container) {
        var missing = [];
        container.find('td.foxblock-flag[data-ip]').each(function () {
            var ip = $(this).data('ip');
            if (flagCache[ip] !== undefined) {
                $(this).html(ccToFlag(flagCache[ip]));
            } else {
                missing.push(ip);
            }
        });

        if (missing.length === 0) return;

        // Deduplicate
        missing = missing.filter(function (v, i, a) { return a.indexOf(v) === i; });

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_lookup_flags',
            nonce: foxblock_ajax.nonce,
            ips: missing
        }, function (response) {
            if (!response.success) return;
            $.extend(flagCache, response.data);
            try { localStorage.setItem(FLAG_CACHE_KEY, JSON.stringify(flagCache)); } catch (e) { }
            container.find('td.foxblock-flag[data-ip]').each(function () {
                var ip = $(this).data('ip');
                if (flagCache[ip] !== undefined) {
                    $(this).html(ccToFlag(flagCache[ip]));
                }
            });
        });
    }

    // Refresh Logs Function
    function foxblockRefreshLogs(isManual) {
        var btn = $('#foxblock-refresh-logs');
        var indicator = $('#foxblock-refresh-indicator');

        if (isManual) {
            btn.text('Đang tải...').prop('disabled', true);
        } else {
            indicator.css('display', 'flex');
        }

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_get_logs',
            nonce: foxblock_ajax.nonce
        }, function (response) {
            if (isManual) {
                btn.text('Làm mới ngay').prop('disabled', false);
            } else {
                indicator.hide();
            }
            if (response.success) {
                var tbody = $('#foxblock-tab-logs .foxblock-table tbody');
                tbody.html(response.data.html);
                foxblockRenderFlags(tbody);
                foxblockHighlightAdminIp(tbody);
                foxblockRenderBlockButtons(tbody);
            }
        }).fail(function () {
            if (isManual) btn.text('Làm mới ngay').prop('disabled', false);
            indicator.hide();
        });
    }

    // Auto Refresh every 5 seconds
    setInterval(function () {
        if ($('#foxblock-tab-logs').hasClass('active')) {
            foxblockRefreshLogs(false);
        }
    }, 5000);

    // Refresh Button Click
    $('#foxblock-refresh-logs').on('click', function (e) {
        e.preventDefault();
        foxblockRefreshLogs(true);
    });

    // Clear Logs
    $('#foxblock-clear-logs').on('click', function (e) {
        e.preventDefault();
        if (!confirm('Bạn có chắc muốn xóa toàn bộ nhật ký? Hành động này không thể hoàn tác.')) return;

        var btn = $(this);
        var originalText = btn.text();
        btn.text('Đang xóa...').prop('disabled', true);

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_clear_logs',
            nonce: foxblock_ajax.nonce
        }, function (response) {
            btn.text(originalText).prop('disabled', false);
            if (response.success) {
                $('#foxblock-tab-logs .foxblock-table tbody').html('<tr><td colspan="5" style="text-align:center; padding:30px;">Đã xóa nhật ký. Đang tải lại trang...</td></tr>');
                setTimeout(function () { location.reload(); }, 1500);
            } else {
                alert('Lỗi khi xóa nhật ký.');
            }
        });
    });

    // Block IP quick from log table
    $(document).on('click', '.foxblock-block-btn', function (e) {
        e.preventDefault();
        var btn = $(this);
        var ip = btn.data('ip');
        if (!confirm('Block IP: ' + ip + '?')) return;

        btn.prop('disabled', true).text('...');

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_block_ip_quick',
            nonce: foxblock_ajax.nonce,
            ip: ip
        }, function (response) {
            if (response.success) {
                btn.replaceWith('<span style="color:#d63638;font-weight:600;font-size:12px;">Blocked</span>');
            } else {
                btn.prop('disabled', false).text('Block');
                alert('Error: ' + (response.data || 'Failed'));
            }
        }).fail(function () {
            btn.prop('disabled', false).text('Block');
        });
    });

    // Save Settings
    function foxblockNormalizeBotName(value) {
        return $.trim(value || '');
    }

    function foxblockSetCustomBotStatus(message, isError) {
        var status = $('#foxblock-custom-bot-status');
        if (!status.length) return;
        status.text(message).toggleClass('is-error', !!isError).toggleClass('is-success', !isError && !!message);
    }

    function foxblockHasBot(botName) {
        var normalized = foxblockNormalizeBotName(botName).toLowerCase();
        var found = false;
        $('#foxblock-settings-form input[name="bots[]"]').each(function () {
            if ($(this).val().toLowerCase() === normalized) {
                found = true;
                return false;
            }
        });
        return found;
    }

    function foxblockCreateCustomBot(botName) {
        var safeName = $('<div>').text(botName).html();
        return '' +
            '<div class="foxblock-custom-bot-chip">' +
            '<input type="hidden" name="bots[]" value="' + safeName + '">' +
            '<span class="foxblock-custom-bot-name">' + safeName + '</span>' +
            '<button type="button" class="foxblock-custom-bot-remove" aria-label="Xóa bot ' + safeName + '">' +
            '<span class="dashicons dashicons-no-alt"></span>' +
            '</button>' +
            '</div>';
    }

    function foxblockAddCustomBot() {
        var input = $('#foxblock-custom-bot-input');
        if (!input.length) return;

        var botName = foxblockNormalizeBotName(input.val());
        if (!botName) {
            foxblockSetCustomBotStatus('Nhập tên bot trước khi thêm.', true);
            input.trigger('focus');
            return;
        }

        if (foxblockHasBot(botName)) {
            foxblockSetCustomBotStatus('Bot này đã có trong danh sách.', true);
            input.trigger('focus').select();
            return;
        }

        $('#foxblock-custom-bot-list').append(foxblockCreateCustomBot(botName));
        input.val('').trigger('focus');
        foxblockSetCustomBotStatus('Đã thêm bot tùy chỉnh: ' + botName, false);
    }

    $('#foxblock-add-custom-bot').on('click', function (e) {
        e.preventDefault();
        foxblockAddCustomBot();
    });

    $('#foxblock-custom-bot-input').on('keydown', function (e) {
        if (e.key === 'Enter') {
            e.preventDefault();
            foxblockAddCustomBot();
        }
    });

    $(document).on('click', '.foxblock-custom-bot-remove', function (e) {
        e.preventDefault();
        $(this).closest('.foxblock-custom-bot-chip').remove();
        foxblockSetCustomBotStatus('Đã xóa bot tùy chỉnh khỏi danh sách chờ lưu.', false);
    });

    $('#foxblock-settings-form').on('submit', function (e) {
        e.preventDefault();

        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-save-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_settings&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu cài đặt.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save IP Blocklist
    $('#foxblock-ipblock-form').on('submit', function (e) {
        e.preventDefault();

        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-ip-save-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_ips&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu danh sách IP.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save IP Whitelist
    $('#foxblock-whitelist-form').on('submit', function (e) {
        e.preventDefault();

        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-whitelist-save-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_whitelist&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu danh sách IP an toàn.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // ─── File Integrity Monitor ───────────────────────────────────────────────
    var fimLoaded = false;

    function foxblockRunFimScan(force) {
        var loading = $('#foxblock-fim-loading');
        var result = $('#foxblock-fim-result');
        var btns = $('.foxblock-fim-rescan-btn');

        loading.show();
        result.html('');
        btns.prop('disabled', true).find('.dashicons').addClass('foxblock-spin');

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_scan_core_files',
            nonce: foxblock_ajax.nonce,
            force: force ? 1 : 0
        }, function (response) {
            loading.hide();
            btns.prop('disabled', false).find('.dashicons').removeClass('foxblock-spin');

            if (response.success) {
                result.html(response.data.html || response.data.message || '');
                var t = response.data.base_time;
                if (t) {
                    $('#foxblock-fim-scantime').html('Baseline tạo lúc: <strong>' + t + '</strong>');
                }
                fimLoaded = true;
            } else {
                result.html('<div class="foxblock-fim-error"><span class="dashicons dashicons-warning"></span> ' + (response.data || 'Quét thất bại.') + '</div>');
            }
        }).fail(function () {
            loading.hide();
            btns.prop('disabled', false).find('.dashicons').removeClass('foxblock-spin');
            result.html('<div class="foxblock-fim-error"><span class="dashicons dashicons-warning"></span> Lỗi AJAX. Vui lòng thử lại.</div>');
        });
    }

    // Update Baseline
    $(document).on('click', '#foxblock-fim-update-btn', function (e) {
        e.preventDefault();
        if (!confirm('Chấp nhận các thay đổi này thành trạng thái gốc an toàn? (Baseline)')) return;

        var btn = $(this);
        var originalHtml = btn.html();
        btn.prop('disabled', true).html('<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang cập nhật Baseline...');

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_update_baseline',
            nonce: foxblock_ajax.nonce
        }, function (response) {
            if (response.success) {
                alert(response.data.message);
                foxblockRunFimScan(true);
            } else {
                btn.prop('disabled', false).html(originalHtml);
                alert('Lỗi: ' + (response.data || 'Không thể cập nhật baseline.'));
            }
        }).fail(function () {
            btn.prop('disabled', false).html(originalHtml);
            alert('Lỗi AJAX, vui lòng thử lại.');
        });
    });

    // Auto-scan khi vào tab
    $('.foxblock-tab-link[data-tab="filemonitor"]').on('click', function () {
        if (!fimLoaded) {
            foxblockRunFimScan(false);
        }
    });

    // Nút Kiểm tra lại
    $(document).on('click', '.foxblock-fim-rescan-btn', function (e) {
        e.preventDefault();
        foxblockRunFimScan(true);
    });

    // Hash check
    if (window.location.hash === '#filemonitor' && !fimLoaded) {
        foxblockRunFimScan(false);
    }

    // ─── Malware Scanner ──────────────────────────────────────────────────────
    var malwareLoaded = false;
    var currentScanId = null; // Store current scan ID for save functionality

    function foxblockRunMalwareScan() {
        var loading = $('#foxblock-malware-loading');
        var result = $('#foxblock-malware-result');
        var btn = $('#foxblock-malware-scan-btn');

        // Lấy danh sách extensions được chọn
        var extensions = [];
        $('input[name="scan_extensions[]"]:checked').each(function () {
            extensions.push($(this).val());
        });

        // Nếu không có extension nào được chọn, cảnh báo
        if (extensions.length === 0) {
            alert('Vui lòng chọn ít nhất một loại file để quét.');
            return;
        }

        loading.show();
        result.html('');
        $('#foxblock-ai-results-container').hide();
        $('#foxblock-ai-results-list').html('');
        btn.prop('disabled', true).html('<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang quét...');

        // Bước 1: Init — lấy danh sách file
        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_malware_init',
            nonce: foxblock_ajax.nonce,
            extensions: extensions
        }, function (res) {
            if (!res.success) {
                showMalwareError(res.data || 'Không thể khởi tạo quét.');
                return;
            }
            var scan_id = res.data.scan_id;
            var total = res.data.total;

            // Hiển thị progress UI
            loading.html(
                '<span class="dashicons dashicons-update-alt foxblock-spin" style="font-size:32px;width:32px;height:32px;color:#ff6c00"></span>' +
                '<p style="margin-top:12px;">Đang quét file...<br><small>Tìm thấy <strong>' + total + '</strong> file cần quét</small></p>' +
                '<div class="foxblock-progress-wrap">' +
                '<div class="foxblock-progress-bar" id="foxblock-malware-bar" style="width:0%"></div>' +
                '</div>' +
                '<div id="foxblock-malware-progress-text" style="font-size:12px;color:#646970;margin-top:8px;">0 / ' + total + ' file</div>' +
                '<div id="foxblock-malware-current-file" style="font-size:11px;color:#999;margin:auto;margin-top:10px;word-break:break-all;max-width:600px;"></div>'
            );

            foxblockMalwareChunk(scan_id, 0, total, btn);
        }).fail(function () { showMalwareError('Lỗi AJAX.'); });
    }

    function foxblockMalwareChunk(scan_id, offset, total, btn) {
        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_malware_chunk',
            nonce: foxblock_ajax.nonce,
            scan_id: scan_id,
            offset: offset
        }, function (res) {
            if (!res.success) {
                showMalwareError(res.data || 'Lỗi khi quét.');
                return;
            }
            var d = res.data;
            var pct = total > 0 ? Math.round((d.scanned / total) * 100) : 100;

            $('#foxblock-malware-bar').css('width', pct + '%');
            $('#foxblock-malware-progress-text').html(
                d.scanned + ' / ' + total + ' file &nbsp;|&nbsp; Phát hiện: <strong style="color:' + (d.findings > 0 ? '#d63638' : '#008a20') + '">' + d.findings + '</strong>'
            );
            $('#foxblock-malware-current-file').text(d.current_file);

            if (d.done) {
                foxblockMalwareGetResult(scan_id, btn);
            } else {
                foxblockMalwareChunk(scan_id, d.next_offset, total, btn);
            }
        }).fail(function () { showMalwareError('Lỗi AJAX khi quét chunk.'); });
    }

    function foxblockMalwareGetResult(scan_id, btn) {
        currentScanId = scan_id; // Store for save functionality

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_malware_result',
            nonce: foxblock_ajax.nonce,
            scan_id: scan_id
        }, function (res) {
            $('#foxblock-malware-loading').hide().html(
                '<span class="dashicons dashicons-update-alt foxblock-spin" style="font-size:32px;width:32px;height:32px;color:#ff6c00"></span>' +
                '<p style="margin-top:12px;">Đang quét toàn bộ file...<br><small>Có thể mất một vài giây nếu website có nhiều file</small></p>'
            );
            btn.prop('disabled', false).html('<span class="dashicons dashicons-search" style="margin-top:3px;"></span> Quét lại');
            if (res.success) {
                $('#foxblock-malware-result').html(res.data.html);
                malwareLoaded = true;

                console.log('Scan completed. Scan ID:', currentScanId); // Debug log

                // Trình kích hoạt phân tích AI
                if ($('#foxblock-ai-scan').is(':checked') && res.data.findings && res.data.findings.length > 0) {
                    $('#foxblock-ai-results-container').show();
                    var aiList = $('#foxblock-ai-results-list');
                    aiList.html('<div style="font-size:13px; color:#646970;"><span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang kết nối Zinbox AI để phân tích (' + res.data.findings.length + ' file)...</div>');
                    foxblockRunAiAnalysis(res.data.findings, 0);
                }
            } else {
                showMalwareError(res.data || 'Không thể lấy kết quả.');
            }
        }).fail(function () { showMalwareError('Lỗi AJAX khi lấy kết quả.'); });
    }

    function showMalwareError(msg) {
        $('#foxblock-malware-loading').hide();
        $('#foxblock-malware-scan-btn').prop('disabled', false).html('<span class="dashicons dashicons-search" style="margin-top:3px;"></span> Bắt đầu quét');
        $('#foxblock-malware-result').html('<div class="foxblock-fim-error"><span class="dashicons dashicons-warning"></span> ' + msg + '</div>');
    }
    function foxblockEscapeHtml(value) {
        return $('<div>').text(value || '').html();
    }

    function foxblockEnsureAiPanelForFile(file) {
        var block = $('.foxblock-malware-file-block').filter(function () {
            return $(this).attr('data-file-path') === file;
        }).first();

        if (!block.length) {
            return $();
        }

        var panel = block.find('.foxblock-ai-file-analysis').first();
        panel.show();
        return panel;
    }

    function foxblockSetAiFileStatus(file, html, isDone) {
        var panel = foxblockEnsureAiPanelForFile(file);
        var status;

        if (!panel.length) {
            return;
        }

        status = panel.find('.foxblock-ai-file-analysis__status');
        if (!status.length) {
            panel.find('.foxblock-ai-file-analysis__list').append('<div class="foxblock-ai-file-analysis__status"></div>');
            status = panel.find('.foxblock-ai-file-analysis__status');
        }

        status.html(html).toggleClass('is-done', !!isDone);
    }
    function foxblockAppendAiFileResult(finding, msg, isSafe) {
        var panel = foxblockEnsureAiPanelForFile(finding.file);
        var safeBody = isSafe ? foxblockEscapeHtml(msg) : foxblockEscapeHtml(msg).replace(/\n/g, '<br>');
        var itemHtml;

        if (!panel.length) {
            return;
        }

        itemHtml = '' +
            '<div class="foxblock-ai-file-analysis__item' + (isSafe ? ' is-safe' : '') + '">' +
                '<div class="foxblock-ai-file-analysis__title">' +
                    '<span class="dashicons ' + (isSafe ? 'dashicons-yes-alt' : 'dashicons-warning') + '"></span>' +
                    foxblockEscapeHtml(finding.file) + ' (Dòng ' + foxblockEscapeHtml(String(finding.line)) + ')' +
                '</div>' +
                '<div class="foxblock-ai-file-analysis__body">' + safeBody + '</div>' +
            '</div>';

        panel.find('.foxblock-ai-file-analysis__status').remove();
        panel.find('.foxblock-ai-file-analysis__list').append(itemHtml);
    }

    function foxblockRunAiAnalysis(findings, index) {
        if (index === 0) {
            $('#foxblock-ai-results-container').hide();
            $('#foxblock-ai-results-list').html('');
            $('.foxblock-ai-file-analysis').hide();
            $('.foxblock-ai-file-analysis__list').html('');
        }

        if (index >= findings.length) {
            $('.foxblock-ai-file-analysis__status').each(function () {
                $(this)
                    .addClass('is-done')
                    .html('<span class="dashicons dashicons-yes-alt" style="margin-top:2px;"></span> Đã phân tích xong file này.');
            });
            return;
        }

        var finding = findings[index];
        foxblockSetAiFileStatus(
            finding.file,
            '<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang phân tích (' + (index + 1) + '/' + findings.length + ') cho dòng ' + foxblockEscapeHtml(String(finding.line)) + '.',
            false
        );

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_ai_analyze_finding',
            nonce: foxblock_ajax.nonce,
            file: finding.file,
            line: finding.line,
            code: finding.code
        }, function(response) {
            var msg = '';
            var isSafe = false;

            if (response.success) {
                var aiData = response.data.trim();
                if (aiData.toLowerCase() === 'no') {
                    isSafe = true;
                    msg = 'Hoàn toàn không nguy hiểm.';
                } else {
                    msg = aiData;
                }
            } else {
                msg = 'Lỗi kết nối AI: ' + (response.data || 'Không xác định');
            }

            foxblockAppendAiFileResult(finding, msg, isSafe);
            foxblockRunAiAnalysis(findings, index + 1);
        }).fail(function() {
            foxblockAppendAiFileResult(finding, 'Lỗi AJAX khi kết nối tới AI.', false);
            foxblockRunAiAnalysis(findings, index + 1);
        });
    }

    $('#foxblock-malware-scan-btn').on('click', function (e) {
        e.preventDefault();
        foxblockRunMalwareScan();
    });

    // Removed auto-scan on page load - user must click scan button manually
    // if (window.location.hash === '#malware' && !malwareLoaded) {
    //     foxblockRunMalwareScan();
    // }

    // Save Malware Scan Results Handler
    function foxblockSaveScanResults(scan_id) {
        console.log('Save button clicked. Scan ID:', scan_id); // Debug log

        if (!scan_id) {
            alert('Không tìm thấy kết quả quét để lưu. Vui lòng chạy quét trước.');
            return;
        }

        if (!confirm('Lưu kết quả quét này làm baseline để so sánh cho các lần quét sau?')) {
            return;
        }

        var btn = $('#foxblock-save-scan-btn');
        var originalHtml = btn.html();
        btn.prop('disabled', true).html('<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang lưu...');

        console.log('Sending AJAX request to save scan...'); // Debug log

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_save_scan',
            nonce: foxblock_ajax.nonce,
            scan_id: scan_id
        }, function (response) {
            console.log('AJAX response:', response); // Debug log

            btn.prop('disabled', false).html(originalHtml);

            if (response.success) {
                alert('✅ ' + response.data.message + '\n\nLần quét tiếp theo sẽ so sánh với baseline này.');
                // Optionally refresh the scan to show updated baseline info
                foxblockRunMalwareScan();
            } else {
                alert('❌ Lỗi: ' + (response.data || 'Không thể lưu kết quả quét.'));
            }
        }).fail(function (xhr, status, error) {
            console.error('AJAX failed:', status, error); // Debug log
            btn.prop('disabled', false).html(originalHtml);
            alert('❌ Lỗi AJAX khi lưu kết quả: ' + error);
        });
    }

    // Handle save button click
    $(document).on('click', '#foxblock-save-scan-btn', function (e) {
        e.preventDefault();
        console.log('Save button clicked. Current scan ID:', currentScanId); // Debug log
        foxblockSaveScanResults(currentScanId);
    });

    // Handle clear scan data button click
    $(document).on('click', '#foxblock-clear-scan-data-btn', function (e) {
        e.preventDefault();

        if (!confirm('⚠️ CẢNH BÁO: Bạn có chắc muốn xóa TOÀN BỘ dữ liệu quét đã lưu?\n\nHành động này sẽ:\n- Xóa tất cả lịch sử quét\n- Xóa tất cả baseline\n- Không thể hoàn tác\n\nBạn có chắc chắn muốn tiếp tục?')) {
            return;
        }

        var btn = $(this);
        var originalHtml = btn.html();
        btn.prop('disabled', true).html('<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang xóa...');

        console.log('Clearing all scan data...'); // Debug log

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_clear_scan_data',
            nonce: foxblock_ajax.nonce
        }, function (response) {
            console.log('Clear data response:', response); // Debug log

            btn.prop('disabled', false).html(originalHtml);

            if (response.success) {
                alert('✅ ' + response.data.message + '\n\n' +
                    'Đã xóa: ' + response.data.scans_deleted + ' lần quét và ' +
                    response.data.findings_deleted + ' vấn đề.\n\n' +
                    'Lần quét tiếp theo sẽ không có dữ liệu so sánh.');

                // Optionally refresh the scan to show no baseline
                if (typeof foxblockRunMalwareScan === 'function') {
                    foxblockRunMalwareScan();
                }
            } else {
                alert('❌ Lỗi: ' + (response.data || 'Không thể xóa dữ liệu.'));
            }
        }).fail(function (xhr, status, error) {
            console.error('Clear data AJAX failed:', status, error); // Debug log
            btn.prop('disabled', false).html(originalHtml);
            alert('❌ Lỗi AJAX khi xóa dữ liệu: ' + error);
        });
    });

    // Handle export to TXT button click
    $(document).on('click', '#foxblock-export-txt-btn', function (e) {
        e.preventDefault();

        if (!currentScanId) {
            alert('Không tìm thấy kết quả quét. Vui lòng chạy quét trước.');
            return;
        }

        var btn = $(this);
        var originalHtml = btn.html();
        btn.prop('disabled', true).html('<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang tạo file...');

        console.log('Exporting scan results to TXT. Scan ID:', currentScanId);

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_export_txt',
            nonce: foxblock_ajax.nonce,
            scan_id: currentScanId
        }, function (response) {
            console.log('Export response:', response);

            btn.prop('disabled', false).html(originalHtml);

            if (response.success) {
                // Create blob and download
                var blob = new Blob([response.data.content], { type: 'text/plain;charset=utf-8' });
                var url = window.URL.createObjectURL(blob);
                var a = document.createElement('a');
                a.href = url;
                a.download = response.data.filename;
                document.body.appendChild(a);
                a.click();
                window.URL.revokeObjectURL(url);
                document.body.removeChild(a);

                // Show success message
                var successMsg = $('<div style="margin-top:10px;padding:10px;background:#d1fae5;border:1px solid #10b981;border-radius:6px;color:#065f46;font-size:13px;">' +
                    '<span class="dashicons dashicons-yes-alt" style="color:#10b981;"></span> ' +
                    'Đã tải xuống: <strong>' + response.data.filename + '</strong>' +
                    '</div>');
                btn.parent().append(successMsg);
                setTimeout(function () { successMsg.fadeOut(function () { $(this).remove(); }); }, 5000);
            } else {
                alert('❌ Lỗi: ' + (response.data || 'Không thể tạo file báo cáo.'));
            }
        }).fail(function (xhr, status, error) {
            console.error('Export AJAX failed:', status, error);
            btn.prop('disabled', false).html(originalHtml);
            alert('❌ Lỗi AJAX khi tạo file: ' + error);
        });
    });

    // ─── Malware File Toggle (Collapse/Expand) ────────────────────────────────
    $(document).on('click', '.foxblock-malware-toggle', function (e) {
        // Don't toggle if clicking on a link or button inside
        if ($(e.target).is('a, button, .foxblock-toggle-btn, .dashicons')) {
            if (!$(e.target).closest('.foxblock-toggle-btn').length && !$(e.target).is('.dashicons')) {
                return;
            }
        }

        var header = $(this);
        var targetId = header.data('target');
        var details = $('#' + targetId);
        var icon = header.find('.dashicons');

        if (details.is(':visible')) {
            // Collapse
            details.slideUp(300);
            icon.removeClass('dashicons-minus').addClass('dashicons-plus-alt2');
            header.removeClass('active');
        } else {
            // Expand
            details.slideDown(300);
            icon.removeClass('dashicons-plus-alt2').addClass('dashicons-minus');
            header.addClass('active');
        }
    });

    // Comparison toggle
    $(document).on('click', '.foxblock-comparison-toggle', function (e) {
        var header = $(this);
        var targetId = header.data('target');
        var details = $('#' + targetId);
        var icon = header.find('.dashicons');

        if (details.is(':visible')) {
            // Collapse
            details.slideUp(300);
            icon.removeClass('dashicons-minus').addClass('dashicons-plus-alt2');
            header.removeClass('active');
        } else {
            // Expand
            details.slideDown(300);
            icon.removeClass('dashicons-plus-alt2').addClass('dashicons-minus');
            header.addClass('active');
        }
    });

    // Expand all / Collapse all buttons (optional - can be added to UI)
    window.foxblockExpandAll = function () {
        $('.foxblock-malware-details').slideDown(300);
        $('.foxblock-malware-toggle .dashicons').removeClass('dashicons-plus-alt2').addClass('dashicons-minus');
        $('.foxblock-malware-toggle').addClass('active');
    };

    window.foxblockCollapseAll = function () {
        $('.foxblock-malware-details').slideUp(300);
        $('.foxblock-malware-toggle .dashicons').removeClass('dashicons-minus').addClass('dashicons-plus-alt2');
        $('.foxblock-malware-toggle').removeClass('active');
    };

    // Save Country Blocking
    $('#foxblock-country-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-country-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_countries&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save Behavior Blocking
    $('#foxblock-behavior-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-behavior-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_behaviors&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save AI Settings
    $('#foxblock-ai-settings-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-ai-settings-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_ai_settings&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save Endpoint Blocking
    $('#foxblock-endpoint-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-endpoint-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_endpoints&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save 2FA Master Settings
    $('#foxblock-2fa-master-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-2fa-master-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_2fa_settings&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { 
                    status.removeClass('show'); 
                    location.reload(); // Reload to apply UI changes
                }, 1500);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Save Telegram Settings
    $('#foxblock-telegram-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-telegram-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_telegram&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX.');
        });
    });

    // Test Telegram Connection
    $('#foxblock-telegram-test').on('click', function (e) {
        e.preventDefault();
        var btn = $(this);
        var status = $('#foxblock-telegram-test-status');
        var originalHtml = btn.html();

        btn.prop('disabled', true).html('<span class="dashicons dashicons-update-alt foxblock-spin"></span> Đang gửi...');
        status.html('');

        var token = $('#foxblock-telegram-token').val();
        var chatid = $('#foxblock-telegram-chatid').val();

        if (!token || !chatid) {
            btn.prop('disabled', false).html(originalHtml);
            status.html('<span style="color:#d63638;">⚠️ Vui lòng nhập Bot Token và Chat ID</span>');
            return;
        }

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_test_telegram',
            nonce: foxblock_ajax.nonce,
            token: token,
            chatid: chatid
        }, function (response) {
            btn.prop('disabled', false).html(originalHtml);
            if (response.success) {
                status.html('<span style="color:#00a32a;">✅ ' + response.data + '</span>');
            } else {
                status.html('<span style="color:#d63638;">❌ ' + (response.data || 'Gửi thất bại') + '</span>');
            }
        }).fail(function () {
            btn.prop('disabled', false).html(originalHtml);
            status.html('<span style="color:#d63638;">❌ Lỗi AJAX</span>');
        });
    });

    // Save Advanced Settings
    $('#foxblock-advanced-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-advanced-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_advanced&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 3000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu cài đặt.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX. Vui lòng thử lại.');
        });
    });

    // Save Disable Security Features Settings
    $('#foxblock-disable-features-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-disable-features-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_disabled_features&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 4000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu cài đặt bảo mật.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX. Vui lòng thử lại.');
        });
    });

    // ─── Media Filter ──────────────────────────────────────────────────────────

    // Master toggle interactivity: enable/disable sub-options
    $(document).on('change', '#foxblock-mf-master', function () {
        var subopts = $('#foxblock-mf-suboptions');
        if ($(this).is(':checked')) {
            subopts.css({ opacity: '1', 'pointer-events': 'auto' });
        } else {
            subopts.css({ opacity: '.5', 'pointer-events': 'none' });
        }
    });

    // Save Media Filter Settings
    $('#foxblock-media-filter-form').on('submit', function (e) {
        e.preventDefault();
        var form = $(this);
        var btn = form.find('button[type="submit"]');
        var status = $('#foxblock-media-filter-status');

        btn.prop('disabled', true);
        status.removeClass('success error show').text('Đang lưu...').addClass('show');

        $.post(foxblock_ajax.ajax_url, form.serialize() + '&action=foxblock_save_media_filter&nonce=' + foxblock_ajax.nonce, function (response) {
            btn.prop('disabled', false);
            if (response.success) {
                status.removeClass('error').addClass('success show').html('<span class="dashicons dashicons-yes-alt"></span> ' + response.data);
                setTimeout(function () { status.removeClass('show'); }, 4000);
            } else {
                status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> ' + (response.data || 'Lỗi khi lưu cài đặt Bộ lọc Media.'));
            }
        }).fail(function () {
            btn.prop('disabled', false);
            status.removeClass('success').addClass('error show').html('<span class="dashicons dashicons-warning"></span> Lỗi AJAX. Vui lòng thử lại.');
        });
    });

    // Render flags cho lần load đầu (PHP render)
    foxblockRenderFlags($('#foxblock-tab-logs .foxblock-table tbody'));
    foxblockHighlightAdminIp($('#foxblock-tab-logs .foxblock-table tbody'));
    foxblockRenderBlockButtons($('#foxblock-tab-logs .foxblock-table tbody'));

    // ─── Security Audit Tab ────────────────────────────────────────────────────
    var auditDone = false;

    function foxblockRunAudit() {
        auditDone = false;
        // Show loading, hide score/results
        $('#foxblock-audit-loading').show();
        $('#foxblock-audit-score-area').hide();
        $('#foxblock-audit-results').hide().empty();
        $('#foxblock-audit-progress').css('width', '0');
        $('#foxblock-audit-loading-text').text('Đang khởi động quét hệ thống...');

        // Fake progress animation while waiting for AJAX
        var progress = 0;
        var messages = [
            'Kiểm tra cấu hình WordPress...',
            'Kiểm tra tính năng Foxblock...',
            'Phân tích kiểm soát truy cập...',
            'Kiểm tra bảo mật đăng nhập...',
            'Kiểm tra phiên bản PHP & Server...',
            'Tổng hợp kết quả...'
        ];
        var msgIdx = 0;
        var progressInterval = setInterval(function () {
            progress = Math.min(progress + Math.random() * 12, 88);
            $('#foxblock-audit-progress').css('width', progress + '%');
            if (progress > msgIdx * 15 && msgIdx < messages.length) {
                $('#foxblock-audit-loading-text').text(messages[msgIdx++]);
            }
        }, 300);

        $.post(foxblock_ajax.ajax_url, {
            action: 'foxblock_security_audit',
            nonce: foxblock_ajax.nonce
        }, function (response) {
            clearInterval(progressInterval);
            $('#foxblock-audit-progress').css('width', '100%');

            if (!response.success) {
                $('#foxblock-audit-loading-text').text('Lỗi khi quét. Vui lòng thử lại.');
                return;
            }

            setTimeout(function () {
                $('#foxblock-audit-loading').hide();
                foxblockRenderAudit(response.data);
                auditDone = true;
            }, 300);

        }).fail(function () {
            clearInterval(progressInterval);
            $('#foxblock-audit-loading-text').text('Lỗi AJAX. Vui lòng tải lại trang.');
        });
    }

    function foxblockRenderAudit(data) {
        var score = data.score;
        var grade = score >= 90 ? 'A+' : score >= 80 ? 'A' : score >= 70 ? 'B' : score >= 60 ? 'C' : score >= 50 ? 'D' : 'F';
        var color = score >= 80 ? '#10b981' : score >= 60 ? '#f59e0b' : '#ef4444';
        var verdict = score >= 90 ? 'Xuất sắc 🎉' : score >= 80 ? 'Tốt — Gần như an toàn' : score >= 60 ? 'Trung bình — Cần cải thiện' : score >= 40 ? 'Yếu — Nhiều rủi ro nghiêm trọng' : 'Nguy hiểm — Cần khắc phục ngay!';
        var verdictSub = score >= 80
            ? 'Hệ thống của bạn được bảo vệ khá tốt. Xem các mục chưa hoàn thành bên dưới để tối ưu hơn nữa.'
            : score >= 60
                ? 'Có một số khoảng trống bảo mật đáng lo ngại. Hãy xem và khắc phục các mục màu đỏ/vàng dưới đây.'
                : 'Hệ thống đang có nhiều rủi ro nghiêm trọng. Khẩn cấp khắc phục ngay các lỗi màu đỏ!';

        // Score circle animation
        var circumference = 408; // 2 * π * 65
        var offset = circumference - (score / 100) * circumference;
        $('#foxblock-audit-bar').css({ stroke: color, 'stroke-dashoffset': circumference });
        $('#foxblock-audit-score-num').text('0').css('color', color);
        $('#foxblock-audit-grade').text(grade);
        $('#foxblock-audit-verdict').text(verdict);
        $('#foxblock-audit-verdict-sub').text(verdictSub);

        // Animate counter
        var current = 0;
        var countInterval = setInterval(function () {
            current = Math.min(current + Math.ceil(score / 30), score);
            $('#foxblock-audit-score-num').text(current);
            if (current >= score) clearInterval(countInterval);
        }, 40);

        // Animate circle
        setTimeout(function () {
            $('#foxblock-audit-bar').css('stroke-dashoffset', offset);
        }, 100);

        // Summary pills
        var catsHtml = '<div class="foxblock-audit-cat"><div class="dot" style="background:#10b981;"></div>Đạt: ' + data.pass + '</div>' +
            '<div class="foxblock-audit-cat"><div class="dot" style="background:#ef4444;"></div>Lỗi: ' + data.fail + '</div>' +
            '<div class="foxblock-audit-cat"><div class="dot" style="background:#f59e0b;"></div>Cảnh báo: ' + data.warn + '</div>' +
            '<div class="foxblock-audit-cat"><div class="dot" style="background:#3b82f6;"></div>Thông tin: ' + data.info + '</div>';
        $('#foxblock-audit-cats').html(catsHtml);

        // Category bars
        var catColors = { 'WordPress Core': '#8b5cf6', 'Foxblock Protection': '#ff6c00', 'Kiểm soát Truy cập': '#0ea5e9', 'Bảo mật Đăng nhập': '#10b981', 'Server & PHP': '#f59e0b', 'HTTP Security Headers': '#14b8a6' };

        var catBarsHtml = '';
        $.each(data.groups, function (catName, checks) {
            var catPass = checks.filter(function (c) { return c.status === 'pass'; }).length;
            var catTotal = checks.filter(function (c) { return c.status !== 'info'; }).length;
            var catPct = catTotal > 0 ? Math.round((catPass / catTotal) * 100) : 100;
            var catColor = catColors[catName] || '#6b7280';
            catBarsHtml += '<div style="display:flex;align-items:center;gap:10px;">' +
                '<div style="width:130px;font-size:12px;font-weight:600;color:#374151;text-align:right;flex-shrink:0;">' + catName + '</div>' +
                '<div style="flex:1;background:#f3f4f6;border-radius:6px;height:10px;overflow:hidden;">' +
                '<div style="width:' + catPct + '%;height:100%;background:' + catColor + ';border-radius:6px;transition:width 1s ease;"></div>' +
                '</div>' +
                '<div style="width:40px;font-size:12px;font-weight:700;color:' + catColor + ';">' + catPct + '%</div>' +
                '</div>';
        });
        $('#foxblock-audit-cat-bars').html(catBarsHtml);
        $('#foxblock-audit-score-area').fadeIn(300);

        // Build check groups
        var icons = { pass: '✓', fail: '✕', warn: '!', info: 'i' };
        var badges = { pass: 'Đạt', fail: 'Lỗi', warn: 'Cảnh báo', info: 'Thông tin' };
        var resultsHtml = '';
        $.each(data.groups, function (catName, checks) {
            var checksHtml = '';
            checks.forEach(function (c) {
                checksHtml += '<div class="foxblock-audit-check ' + c.status + '">' +
                    '<div class="foxblock-audit-check__icon">' + icons[c.status] + '</div>' +
                    '<div class="foxblock-audit-check__body">' +
                    '<div class="foxblock-audit-check__title">' + c.title + '</div>' +
                    '<div class="foxblock-audit-check__desc">' + c.desc + '</div>' +
                    '</div>' +
                    '<span class="foxblock-audit-check__badge">' + badges[c.status] + '</span>' +
                    '</div>';
            });

            var catColor2 = catColors[catName] || '#6b7280';
            resultsHtml += '<div class="foxblock-card foxblock-audit-group">' +
                '<h3 class="foxblock-audit-group-title" style="color:' + catColor2 + ';">' + catName + '</h3>' +
                '<div class="foxblock-audit-checks">' + checksHtml + '</div>' +
                '</div>';
        });
        $('#foxblock-audit-results').html(resultsHtml).fadeIn(400);
    }

    // Auto-run audit when tab is entered
    $(document).on('click', '.foxblock-tab-link[data-tab="audit"]', function () {
        if (!auditDone) {
            foxblockRunAudit();
        }
    });

    // Rescan button
    $(document).on('click', '#foxblock-audit-rescan', function () {
        foxblockRunAudit();
    });

});
