/* User Management & Permissions Logic */

function initUsers() {
    const $form = $('#userForm');
    const $submitBtn = $form.find('button[type="submit"]');
    const $tableBody = $('#userListBody');
    const $formTitle = $form.closest('.card').find('.card-title');
    let editingId = null;

    // 1. Populate Selects
    const $uDept = $('#uDepartment');
    $uDept.empty().append('<option value=""></option>');
    ['ڈیپارٹمنٹ 1', 'ڈیپارٹمنٹ 2', 'ایڈمنسٹریشن', 'اکاؤنٹس', 'سیلز'].forEach(dept => {
        $uDept.append(new Option(dept, dept));
    });
    $uDept.select2({ placeholder: "شعبہ منتخب کریں...", allowClear: true, dir: "rtl", width: '100%' });

    const $uRole = $('#uRole');
    $uRole.empty().append('<option value=""></option>')
        .append(new Option('ایڈمن (Admin)', 'admin'))
        .append(new Option('مینیجر (Manager)', 'manager'))
        .append(new Option('آپریٹر (Operator)', 'operator'));

    // 2. Fetch and Render
    async function fetchAndRenderUsers() {
        try {
            $tableBody.html('<tr><td colspan="6" class="text-center">لوڈنگ ہو رہی ہے...</td></tr>');
            const res = await API.get('/users');
            MandiData.users = res.data;
            renderUsers();
        } catch (err) {
            $tableBody.html('<tr><td colspan="6" class="text-center text-danger">صارفین لوڈ کرنے میں غلطی آئی۔</td></tr>');
        }
    }

    function renderUsers() {
        let html = '';
        MandiData.users.forEach(u => {
            const statusBadge = u.status === 'active' ? 'badge-success' : 'badge-danger';
            const statusText = u.status === 'active' ? 'ایکٹیو' : 'غیر فعال';
            
            html += `
                <tr class="${editingId == u.id ? 'table-active' : ''}">
                    <td><strong>${u.username}</strong></td>
                    <td>${u.full_name}</td>
                    <td>${u.department || '-'}</td>
                    <td><span class="badge badge-accent">${u.role}</span></td>
                    <td><span class="badge ${statusBadge}">${statusText}</span></td>
                    <td>
                        <div class="d-flex gap-2">
                            <button class="btn btn-outline btn-sm" onclick="editUser(${u.id})" title="اختیارات تبدیل کریں">
                                <i class="fas fa-user-edit"></i> ترمیم
                            </button>
                            ${u.role !== 'admin' ? `
                                <button class="btn btn-danger btn-sm" onclick="deleteUser(${u.id}, '${u.username}')">
                                    <i class="fas fa-trash-alt"></i>
                                </button>
                            ` : ''}
                        </div>
                    </td>
                </tr>
            `;
        });
        $tableBody.html(html);
    }

    // 3. Edit Logic
    window.editUser = function(id) {
        console.log(`[UI] Edit User Clicked: ID=${id}`);
        const u = MandiData.users.find(user => user.id == id);
        if (!u) {
            console.error(`[UI] User not found in MandiData for ID=${id}`, MandiData.users);
            return;
        }
        console.log(`[UI] Found User:`, u);

        editingId = id;
        
        // Populate inputs
        $('#uUsername').val(u.username).prop('disabled', true); // Username typically locked
        $('#uFullName').val(u.full_name);
        $('#uPassword').val('').prop('required', false).attr('placeholder', '(تبدیلی نہ کرنے کی صورت میں خالی چھوڑیں)');
        $('#uDepartment').val(u.department).trigger('change');
        $('#uRole').val(u.role);
        $('#uHideReversals').prop('checked', u.hide_reversals == 1);

        // Populate Permissions Matrix
        $('#permissionsMatrixBody tr').each(function() {
            const module = $(this).data('module-key');
            const perms = u.permissions[module] || {};
            
            $(this).find('input[name$="_view"]').prop('checked', !!perms.view);
            $(this).find('input[name$="_create"]').prop('checked', !!perms.create);
            $(this).find('input[name$="_edit"]').prop('checked', !!perms.edit);
            $(this).find('input[name$="_delete"]').prop('checked', !!perms.delete);
            $(this).find('input[name$="_print"]').prop('checked', !!perms.print);
        });

        $formTitle.html('<i class="fas fa-user-shield text-accent"></i> صارف کے اختیارات کی تبدیلی (Edit)');
        $submitBtn.html('<i class="fas fa-save"></i> تبدیلی محفوظ کریں').removeClass('btn-primary').addClass('btn-accent');

        if ($('#cancelUserEditBtn').length === 0) {
            $submitBtn.after('<button type="button" id="cancelUserEditBtn" class="btn btn-outline btn-lg ms-2" onclick="cancelUserEdit()">کینسل (Cancel)</button>');
        }
        
        renderUsers();
        $('html, body').animate({ scrollTop: $form.offset().top - 100 }, 500);
    };

    window.cancelUserEdit = function() {
        editingId = null;
        $form[0].reset();
        $('#uUsername').prop('disabled', false);
        $('#uPassword').prop('required', true).attr('placeholder', '');
        $('#uDepartment').val(null).trigger('change');
        $('#uHideReversals').prop('checked', true); // Default to true
        
        $formTitle.text('نیا صارف شامل کریں (Add New User)');
        $submitBtn.html('<i class="fas fa-save"></i> صارف محفوظ کریں').removeClass('btn-accent').addClass('btn-primary');
        $('#cancelUserEditBtn').remove();
        renderUsers();
    };

    window.deleteUser = async function(id, username) {
        if (!confirm(`کیا آپ واقعی صارف "${username}" کو غیر فعال کرنا چاہتے ہیں؟`)) return;
        try {
            const res = await API.delete('/users', id);
            if (res.success) {
                Toast.success("✅ " + res.message);
                if (editingId == id) cancelUserEdit();
                fetchAndRenderUsers();
            }
        } catch (err) {}
    };

    // 4. Form Submit
    $form.on('submit', async function(e) {
        e.preventDefault();
        
        const payload = {
            username: $('#uUsername').val(),
            full_name: $('#uFullName').val(),
            password: $('#uPassword').val(),
            department: $('#uDepartment').val(),
            role: $('#uRole').val(),
            hide_reversals: $('#uHideReversals').is(':checked') ? 1 : 0,
            permissions: {}
        };

        // Extract permissions from Matrix
        $('#permissionsMatrixBody tr').each(function() {
            const module = $(this).data('module-key');
            payload.permissions[module] = {
                view: $(this).find('input[name$="_view"]').is(':checked'),
                create: $(this).find('input[name$="_create"]').is(':checked'),
                edit: $(this).find('input[name$="_edit"]').is(':checked'),
                delete: $(this).find('input[name$="_delete"]').is(':checked'),
                print: $(this).find('input[name$="_print"]').is(':checked')
            };
        });

        $submitBtn.prop('disabled', true).html('<i class="fas fa-spinner fa-spin"></i> پروسیسنگ...');

        try {
            let res;
            if (editingId) {
                res = await API.put('/users/' + editingId, payload);
            } else {
                res = await API.post('/users', payload);
            }

            if (res.success) {
                Toast.success("✅ " + res.message);
                cancelUserEdit();
                fetchAndRenderUsers();
            }
        } catch (err) {
            // Managed by API.js
        } finally {
            $submitBtn.prop('disabled', false);
            if (editingId) $submitBtn.html('<i class="fas fa-save"></i> تبدیلی محفوظ کریں');
            else $submitBtn.html('<i class="fas fa-save"></i> صارف محفوظ کریں');
        }
    });

    // Initial Load
    fetchAndRenderUsers();
}
