/**
 * Foxblock 2FA – Profile Page Script
 * Depends on: qrcode.min.js (qrcode-generator by Kazuhiko Arase)
 */
(function ($) {
    'use strict';

    var cfg = window.foxblock2faConfig || {};
    if (!cfg.ajaxUrl) return;

    // ── Helper: render backup codes ──────────────────────────────────────────
    function renderCodes(codes, container) {
        var html = '';
        codes.forEach(function (c) {
            html += '<code style="background:#fff;border:1px solid #fbbf24;padding:5px 10px;border-radius:5px;font-size:13px;letter-spacing:2px;">' + c + '</code>';
        });
        $(container).html(html);
    }

    // ── Helper: generate QR into #foxblock-qrcode ────────────────────────────
    function renderQR(otpauth) {
        try {
            var $container = $('#foxblock-qrcode');
            $container.empty(); // Clear existing QR if any

            new QRCode($container[0], {
                text: otpauth,
                width: 160,
                height: 160,
                colorDark: "#003c8bff",
                colorLight: "#ffffff",
                correctLevel: QRCode.CorrectLevel.M
            });
        } catch (e) {
            $('#foxblock-qrcode').html('<p style="font-size:11px;color:#dc2626;">Không thể tạo QR.<br>Nhập secret thủ công.</p>');
            console.error("QR Code generation error:", e);
        }
    }

    // ── Setup button ─────────────────────────────────────────────────────────
    $(document).on('click', '#foxblock-2fa-setup-btn', function () {
        var $btn = $(this).prop('disabled', true).text('Đang xử lý...');
        var $panel = $('#foxblock-2fa-setup-panel');

        if (cfg.hasSecret && cfg.otpauth) {
            // Already have a secret, just show panel
            $('#foxblock-secret-display').text(cfg.otpauth.match(/secret=([A-Z2-7]+)/)?.[1] || '');
            $('#foxblock-2fa-secret-val').val(cfg.otpauth.match(/secret=([A-Z2-7]+)/)?.[1] || '');
            renderQR(cfg.otpauth);
            $panel.slideDown(300);
            $btn.prop('disabled', false).text('Hoàn thiện thiết lập');
            return;
        }

        $.post(cfg.ajaxUrl, {
            action: 'foxblock_2fa_get_secret',
            nonce: cfg.nonce
        }, function (res) {
            $btn.prop('disabled', false).text('Hoàn thiện thiết lập');
            if (!res.success) {
                alert('Lỗi: ' + (res.data || 'Không lấy được secret.'));
                return;
            }
            cfg.otpauth = res.data.otpauth;
            cfg.hasSecret = true;
            $('#foxblock-secret-display').text(res.data.secret);
            $('#foxblock-2fa-secret-val').val(res.data.secret);
            renderQR(res.data.otpauth);
            $panel.slideDown(300);
        });
    });

    // ── Confirm (verify + activate) ──────────────────────────────────────────
    $(document).on('click', '#foxblock-2fa-confirm-btn', function () {
        var code = $('#foxblock-2fa-verify-code').val().trim();
        if (!/^\d{6}$/.test(code)) {
            $('#foxblock-2fa-verify-msg').html('<span style="color:#dc2626;">Nhập đúng 6 chữ số.</span>');
            return;
        }
        var $btn = $(this).prop('disabled', true).text('Đang xác nhận...');
        $('#foxblock-2fa-verify-msg').html('<span style="color:#6b7280;">Đang kiểm tra...</span>');

        $.post(cfg.ajaxUrl, {
            action: 'foxblock_2fa_verify_setup',
            nonce: cfg.nonce,
            code: code
        }, function (res) {
            $btn.prop('disabled', false).text('Xác nhận & Kích hoạt');
            if (!res.success) {
                $('#foxblock-2fa-verify-msg').html('<span style="color:#dc2626;">❌ ' + res.data + '</span>');
                return;
            }
            $('#foxblock-2fa-verify-msg').html('<span style="color:#16a34a;">✅ Kích hoạt thành công!</span>');
            renderCodes(res.data.backup_codes, '#foxblock-2fa-backup-codes');
            $('#foxblock-2fa-backup-first').slideDown(300);
            $('#foxblock-2fa-confirm-btn').hide();
            $('#foxblock-2fa-verify-code').prop('disabled', true);
            // Reload after 3s so profile shows active state
            setTimeout(function () { location.reload(); }, 4000);
        });
    });

    // ── Disable 2FA ──────────────────────────────────────────────────────────
    $(document).on('click', '#foxblock-2fa-disable-btn', function () {
        if (!confirm('Tắt 2FA sẽ làm giảm bảo mật tài khoản. Bạn chắc chắn?')) return;

        $.post(cfg.ajaxUrl, {
            action: 'foxblock_2fa_disable',
            nonce: cfg.nonce
        }, function (res) {
            if (res.success) {
                alert('✅ ' + res.data);
                location.reload();
            } else {
                alert('Lỗi: ' + res.data);
            }
        });
    });

    // ── Regenerate backup codes ───────────────────────────────────────────────
    $(document).on('click', '#foxblock-2fa-regen-backup', function () {
        if (!confirm('Tạo bộ backup codes mới sẽ xóa các code cũ. Tiếp tục?')) return;

        $.post(cfg.ajaxUrl, {
            action: 'foxblock_2fa_regen_backup',
            nonce: cfg.nonce
        }, function (res) {
            if (!res.success) { alert('Lỗi: ' + res.data); return; }
            renderCodes(res.data.backup_codes, '#foxblock-2fa-codes-list');
            $('#foxblock-2fa-backup-display').slideDown(300);
        });
    });

})(jQuery);
