// trial_balance.js

document.addEventListener('DOMContentLoaded', () => {
    // تعيين تواريخ افتراضية (مثلاً من بداية العام الحالي إلى اليوم)
    const today = new Date();
    document.getElementById('start-date').value = `${today.getFullYear()}-01-01`;
    document.getElementById('end-date').value = today.toISOString().split('T')[0];

    // استدعاء التقرير مبدئياً عند التحميل
    fetchTrialBalance();

    // ربط زر التحديث بالدالة لسحب البيانات بناءً على التواريخ
    document.getElementById('btn-fetch').addEventListener('click', fetchTrialBalance);
    document.getElementById('chk-comparative').addEventListener('change', fetchTrialBalance);
});

/**
 * دالة سحب البيانات (Fetch) من الباك إند
 */
function fetchTrialBalance() {
    const startDate = document.getElementById('start-date').value;
    const endDate = document.getElementById('end-date').value;
    const isComparative = document.getElementById('chk-comparative').checked;

    fetch(`get_trial_balance.php?start_date=${startDate}&end_date=${endDate}&comparative=${isComparative}`)
        .then(response => response.json())
        .then(data => {
            if (data.status === 'success') {
                renderTable(data.data, isComparative);
            } else {
                alert('حدث خطأ أثناء جلب البيانات: ' + (data.message || ''));
            }
        })
        .catch(error => {
            console.error('Fetch error:', error);
        });
}

/**
 * دالة رسم الجدول ديناميكياً وحساب الصافي النهائي لكل سطر
 */
function renderTable(accounts, isComparative) {
    const tbody = document.getElementById('tb-body');
    const thead = document.getElementById('tb-head');
    tbody.innerHTML = '';

    // جمع السنوات المتاحة إذا كان العرض مقارناً
    let availableYears = [];
    if (isComparative) {
        let yearSet = new Set();
        accounts.forEach(acc => {
            if (acc.period_years) {
                Object.keys(acc.period_years).forEach(y => yearSet.add(y));
            }
        });
        availableYears = Array.from(yearSet).sort();
    }

    // بناء رأس الجدول ديناميكياً
    let topRow = `<tr>
        <th rowspan="2">اسم الحساب</th>
        <th colspan="2">الرصيد الافتتاحي (ديناميكي)</th>`;
    let bottomRow = `<tr>
        <th>مدين</th><th>دائن</th>`;

    if (isComparative && availableYears.length > 0) {
        availableYears.forEach(y => {
            topRow += `<th colspan="2">حركة ${y}</th>`;
            bottomRow += `<th>مدين</th><th>دائن</th>`;
        });
    } else {
        topRow += `<th colspan="2">حركة الفترة المحددة</th>`;
        bottomRow += `<th>مدين</th><th>دائن</th>`;
    }

    topRow += `<th colspan="2">الأرصدة النهائية</th></tr>`;
    bottomRow += `<th>مدين</th><th>دائن</th></tr>`;
    thead.innerHTML = topRow + bottomRow;

    // دالة مساعدة لتنسيق الأرقام
    const formatNum = (num) => num > 0 ? Number(num).toLocaleString('en-US', {minimumFractionDigits: 2, maximumFractionDigits: 2}) : '-';

    accounts.forEach(acc => {
        // اللوجيك المحاسبي لحساب الصافي النهائي في الواجهة
        // يتم جمع الافتتاحي الديناميكي + حركات المدة
        const totalDebit = acc.dyn_open_debit + acc.period_debit;
        const totalCredit = acc.dyn_open_credit + acc.period_credit;
        
        let finalDebit = 0;
        let finalCredit = 0;

        // ترصيد الحساب: وضع الصافي في الخانة الأكبر (الطرف الطبيعي للرصيد) والخانة الأخرى صفر
        if (totalDebit > totalCredit) {
            finalDebit = totalDebit - totalCredit;
        } else if (totalCredit > totalDebit) {
            finalCredit = totalCredit - totalDebit;
        }

        // إنشاء السطر (Tr)
        const tr = document.createElement('tr');
        
        // تطبيق كلاس عريض للحسابات الرئيسية
        if (acc.is_parent) {
            tr.classList.add('parent-row'); 
        }

        // حساب الإزاحة التباعدية (Indentation) لبيان التدرج الشجري
        const indentation = acc.level * 25; // 25 بكسل لكل مستوى متفرع
        
        let trHtml = `
            <td style="padding-right: ${indentation + 10}px;">
                ${acc.is_parent ? '▼' : '▪'} ${acc.name}
            </td>
            <td class="debit">${formatNum(acc.dyn_open_debit)}</td>
            <td class="credit">${formatNum(acc.dyn_open_credit)}</td>
        `;

        // العواميد الديناميكية للسنوات
        if (isComparative && availableYears.length > 0) {
            availableYears.forEach(y => {
                let yData = (acc.period_years && acc.period_years[y]) ? acc.period_years[y] : {debit:0, credit:0};
                trHtml += `<td class="debit">${formatNum(yData.debit)}</td><td class="credit">${formatNum(yData.credit)}</td>`;
            });
        } else {
            trHtml += `<td class="debit">${formatNum(acc.period_debit)}</td><td class="credit">${formatNum(acc.period_credit)}</td>`;
        }

        trHtml += `
            <td class="debit" style="font-weight: bold;">${formatNum(finalDebit)}</td>
            <td class="credit" style="font-weight: bold;">${formatNum(finalCredit)}</td>
        `;
        tr.innerHTML = trHtml;

        tbody.appendChild(tr);
    });
}
