<?php
// 🔹 تفعيل الأخطاء أثناء التطوير
ini_set('display_errors', 1);
error_reporting(E_ALL);

$pageTitle = 'سجل الحركات الكلي'; 
include '../../includes/header.php';
checkLogin();

$db = getDB();

// =====================
// 🔹 إعداد الترقيم (Pagination)
// =====================
$limit = 20; // ✅ عدد الصفوف المعروضة في الصفحة
$page = $_GET['p'] ?? 1;
$offset = ($page - 1) * $limit;


// =====================
// 🔹 إعداد الفلاتر والتواريخ
// =====================
// استخدام date('Y-m') لضمان أن يكون الشهر الحالي هو الافتراضي
$filterStartDate = $_GET['start_date'] ?? date('Y-m-01');
$filterEndDate = $_GET['end_date'] ?? date('Y-m-d');

// فلاتر إضافية
$filterSource = $_GET['source'] ?? '';
$filterType = $_GET['type'] ?? '';
$filterOperationType = $_GET['operation_type'] ?? '';

// ===========================================
// 🟢 جلب ودمج الحركات
// ===========================================

// دالة لتطبيق الفلترة على مصفوفة في PHP
function filterRows(&$rows, $key, $value) {
    if ($value !== '') {
        $rows = array_filter($rows, function($row) use ($key, $value) {
            // معالجة البحث الجزئي للتصنيف
            if ($key === 'operation_type') {
                return stripos($row[$key], $value) !== false; 
            }
            return $row[$key] === $value;
        });
    }
}

// 1. جلب حركات الصندوق الرئيسي (main_cashbox)
$cashbox_sql = "
SELECT 
    c.id,
    c.transaction_date AS date,
    c.transaction_type AS type,
    c.operation_type,
    c.amount,
    e.full_name AS employee_name,
    u.full_name AS created_by_name,
    c.description,
    'Cashbox' AS source
FROM main_cashbox c
LEFT JOIN employees e ON c.employee_id = e.id
LEFT JOIN users u ON c.created_by = u.id
WHERE c.transaction_date BETWEEN ? AND ?
";
$cashbox_rows = $db->select($cashbox_sql, [$filterStartDate, $filterEndDate]) ?: [];


// 2. جلب المبيعات (Sales)
$sales_sql = "
SELECT
    s.id,
    s.invoice_date AS date,
    'دخل' AS type,
    'فاتورة مبيعات' AS operation_type,
    s.total_amount AS amount,
    NULL AS employee_name,
    u.full_name AS created_by_name,
    CONCAT('فاتورة مبيعات رقم ', s.id) AS description,
    'Sales' AS source
FROM sales_invoices s
LEFT JOIN users u ON s.created_by = u.id
WHERE s.invoice_date BETWEEN ? AND ?
";
$sales_rows = $db->select($sales_sql, [$filterStartDate, $filterEndDate]) ?: [];


// 3. جلب المصروفات (Expenses) - تم التعديل هنا لفلترة المصروفات المعتمدة فقط
$expenses_sql = "
SELECT
    ex.id,
    ex.expense_date AS date,
    'خرج' AS type,
    ex.expense_type AS operation_type,
    ex.amount,
    e.full_name AS employee_name,
    u.full_name AS created_by_name,
    ex.notes AS description, 
    'Expenses' AS source
FROM expenses ex
LEFT JOIN employees e ON ex.employee_id = e.id
LEFT JOIN users u ON ex.created_by = u.id
WHERE ex.expense_date BETWEEN ? AND ?
  AND ex.status = 'Approved' -- 💡 الشرط الجديد لفلترة المصروفات المعتمدة فقط
";
$expenses_rows = $db->select($expenses_sql, [$filterStartDate, $filterEndDate]) ?: [];


// 4. جلب الرواتب (Salaries)
$salaries_sql = "
SELECT
    ms.id,
    ms.payment_date AS date, 
    'خرج' AS type,
    'راتب شهري' AS operation_type,
    ms.net_salary AS amount,
    e.full_name AS employee_name,
    -- 🛑 تم التعديل هنا لربط created_by_user_id بجدول المستخدمين
    u.full_name AS created_by_name, 
    CONCAT('راتب شهر ', ms.payment_month) AS description,
    'Salaries' AS source
FROM monthly_salaries ms
LEFT JOIN employees e ON ms.employee_id = e.id
-- 🛑 إضافة الربط بجدول المستخدمين (users) باستخدام created_by_user_id
LEFT JOIN users u ON ms.created_by_user_id = u.id 
WHERE ms.payment_date BETWEEN ? AND ?
";
$salaries_rows = $db->select($salaries_sql, [$filterStartDate, $filterEndDate]) ?: [];


// 5. دمج جميع النتائج
$all_rows = array_merge($cashbox_rows, $sales_rows, $expenses_rows, $salaries_rows); 

// 6. تطبيق فلاتر المصدر ونوع الحركة والتصنيف بعد الدمج
filterRows($all_rows, 'source', $filterSource);
filterRows($all_rows, 'type', $filterType);
filterRows($all_rows, 'operation_type', $filterOperationType); 

// 7. فرز جميع الحركات حسب التاريخ (الأحدث أولاً)
usort($all_rows, function($a, $b) {
    return strtotime($b['date']) - strtotime($a['date']);
});

// ===========================================
// 🟢 تطبيق الترقيم (Pagination Application)
// ===========================================

$total_rows_filtered = count($all_rows);
$total_pages = ceil($total_rows_filtered / $limit);

// استخراج الصفوف التي سيتم عرضها في الصفحة الحالية
$rows = array_slice($all_rows, $offset, $limit); 

// ===========================================
// 🔹 حساب الإجماليات (لـ Summary Cards)
// ===========================================

// يتم حساب الإجماليات من مصفوفة $all_rows غير المقسمة لضمان شمول الإجمالي للفترة المفلترة

// المتغيرات التي تجمع كل المصادر (بما في ذلك الصندوق)
$total_in_all_sources = 0; 
$total_out_all_sources = 0; 

// إجمالي دخل وخرج الصندوق الرئيسي (main_cashbox) ضمن الفترة المفلترة
$total_cashbox_in_filtered = 0;
$total_cashbox_out_filtered = 0;

foreach ($all_rows as $row) {
    if ($row['type'] === 'دخل') {
        $total_in_all_sources += $row['amount'];
        // تجميع إجمالي دخل الصندوق فقط
        if ($row['source'] === 'Cashbox') {
            $total_cashbox_in_filtered += $row['amount'];
        }
    } elseif ($row['type'] === 'خرج') {
        $total_out_all_sources += $row['amount'];
        // تجميع إجمالي خرج الصندوق فقط
        if ($row['source'] === 'Cashbox') {
            $total_cashbox_out_filtered += $row['amount'];
        }
    }
}

// 🟢 إجمالي الدخل الخالص: (مبيعات + مصادر أخرى) - لا يشمل إيداعات الصندوق المباشرة
$total_in_net = $total_in_all_sources - $total_cashbox_in_filtered; 

// 🟢 إجمالي الخرج الخالص: (مصروفات + رواتب) - لا يشمل سحوبات الصندوق المباشرة
$total_out_net = $total_out_all_sources - $total_cashbox_out_filtered;


// صافي الربح الكلي (من كل المصادر)
$net_profit_filtered = $total_in_all_sources - $total_out_all_sources;

// صافي الصندوق الرئيسي (من حركة الصندوق فقط)
$net_cashbox_filtered = $total_cashbox_in_filtered - $total_cashbox_out_filtered;

// الرصيد الكلي الحالي (إجمالي الصندوق فقط - غير مفلتر)
$total_in_all = $db->select("SELECT SUM(amount) AS total FROM main_cashbox WHERE transaction_type='دخل'")[0]['total'] ?? 0;
$total_out_all = $db->select("SELECT SUM(amount) AS total FROM main_cashbox WHERE transaction_type='خرج'")[0]['total'] ?? 0;
$balance_current = $total_in_all - $total_out_all;


// 🚨 تحديد الصلاحيات المطلوبة
$can_edit = hasPermission('edit_cashbox_entry'); 
$can_delete = hasPermission('delete_cashbox_entry'); 
?>

<div class="container py-4" dir="rtl">
    <h2 class="text-center mb-4"><i class="fas fa-wallet me-2"></i><?= htmlspecialchars($pageTitle) ?></h2>
    
    <div class="row mb-4">
        <div class="col-md-4">
            <div class="card text-white bg-success shadow-lg">
                <div class="card-body text-center">
                    <h5>**إجمالي الإيداع في الصندوق** (مفلتر)</h5>
                    <p class="mb-0 text-white-50"><small>(حركات الصندوق المباشرة فقط)</small></p>
                    <h3><?= number_format($total_cashbox_in_filtered, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card text-white bg-danger shadow-lg">
                <div class="card-body text-center">
                    <h5>**إجمالي السحب من الصندوق** (مفلتر)</h5>
                    <p class="mb-0 text-white-50"><small>(حركات الصندوق المباشرة فقط)</small></p>
                    <h3><?= number_format($total_cashbox_out_filtered, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
        <div class="col-md-4">
            <div class="card text-white <?= $net_cashbox_filtered >= 0 ? 'bg-primary' : 'bg-warning' ?> shadow-lg">
                <div class="card-body text-center">
                    <h5>**صافي الصندوق** (مُفلتر)</h5>
                    <p class="mb-0 text-white-50"><small>(دخل الصندوق - خرج الصندوق)</small></p>
                    <h3><?= number_format($net_cashbox_filtered, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
    </div>
    
    <div class="row mb-4">
        <div class="col-md-3">
            <div class="card text-white bg-success shadow-sm">
                <div class="card-body text-center">
                    <h5>**اجمالي المبيعات والواردات**</h5>
                    <p class="mb-0 text-white-50"><small>(مبيعات + مصادر أخرى **باستثناء** إيداع الصندوق)</small></p>
                    <h3><?= number_format($total_in_net, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
        <div class="col-md-3">
            <div class="card text-white bg-danger shadow-sm">
                <div class="card-body text-center">
                    <h5>**الصرفيات والرواتب**</h5>
                    <p class="mb-0 text-white-50"><small>(مصروفات + رواتب **باستثناء** سحب الصندوق)</small></p>
                    <h3><?= number_format($total_out_net, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
        <div class="col-md-3">
            <div class="card text-white <?= $net_profit_filtered >= 0 ? 'bg-info' : 'bg-warning' ?> shadow-sm">
                <div class="card-body text-center">
                    <h5>**صافي الأرباح الكلي (مُفلتر)**</h5>
                    <p class="mb-0 text-white-50"><small>(الدخل الكلي - الخرج الكلي)</small></p>
                    <h3><?= number_format($net_profit_filtered, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
        <div class="col-md-3">
            <div class="card text-white bg-primary shadow-sm">
                <div class="card-body text-center">
                    <h5>الرصيد الكلي الحالي</h5>
                    <p class="mb-0 text-white-50"><small>(صندوق رئيسي فقط - غير مُفلتر)</small></p>
                    <h3><?= number_format($balance_current, 2) ?> د.ع</h3>
                </div>
            </div>
        </div>
    </div>

    <form method="GET" class="row g-3 mb-4 p-3 bg-light border rounded shadow-sm" id="filterForm">
        <input type="hidden" name="p" value="<?= htmlspecialchars($page) ?>">
        <div class="col-md-3">
            <label class="form-label">من تاريخ</label>
            <input type="date" name="start_date" value="<?= htmlspecialchars($filterStartDate) ?>" class="form-control">
        </div>
        <div class="col-md-3">
            <label class="form-label">إلى تاريخ</label>
            <input type="date" name="end_date" value="<?= htmlspecialchars($filterEndDate) ?>" class="form-control">
        </div>
        <div class="col-md-3">
            <label class="form-label">المصدر</label>
            <select name="source" class="form-select">
                <option value="">الكل</option>
                <option value="Cashbox" <?= $filterSource == 'Cashbox' ? 'selected' : '' ?>>الصندوق الرئيسي</option>
                <option value="Sales" <?= $filterSource == 'Sales' ? 'selected' : '' ?>>المبيعات</option>
                <option value="Expenses" <?= $filterSource == 'Expenses' ? 'selected' : '' ?>>المصروفات</option>
                <option value="Salaries" <?= $filterSource == 'Salaries' ? 'selected' : '' ?>>الرواتب</option>
            </select>
        </div>
        <div class="col-md-3">
            <label class="form-label">نوع الحركة</label>
            <select name="type" class="form-select">
                <option value="">الكل</option>
                <option value="دخل" <?= $filterType == 'دخل' ? 'selected' : '' ?>>ايداع</option>
                <option value="خرج" <?= $filterType == 'خرج' ? 'selected' : '' ?>>سحب</option>
            </select>
        </div>
        <div class="col-md-6">
            <label class="form-label">التصنيف (نوع العملية)</label>
            <input type="text" name="operation_type" value="<?= htmlspecialchars($filterOperationType) ?>" class="form-control" placeholder="مثال: راتب شهري، سلفة، إيداع">
        </div>
        
<div class="col-md-6 d-flex align-items-end justify-content-between gap-2">

    <button type="submit" class="btn btn-primary flex-fill d-flex align-items-center justify-content-center">
        <i class="fas fa-search me-2"></i> بحث
    </button>

    <a href="cashbox_list.php" class="btn btn-secondary flex-fill d-flex align-items-center justify-content-center">
        <i class="fas fa-eraser me-2"></i> إعادة تعيين
    </a>

    <a href="cashbox_index.php" class="btn btn-info flex-fill d-flex align-items-center justify-content-center text-white">
        <i class="fas fa-hand-holding-usd me-2"></i> إدارة الصندوق
    </a>

    <a href="cashbox_add.php" class="btn btn-success flex-fill d-flex align-items-center justify-content-center">
        <i class="fas fa-plus me-2"></i> إضافة عملية صندوق
    </a>

</div>

    </form>

    <div class="card shadow-lg">
        <div class="card-body table-responsive">
            <p class="text-muted text-center">عرض **<?= count($rows) ?>** من **<?= $total_rows_filtered ?>** حركة (الصفحة <?= $page ?>)</p>
            <?php if ($rows): ?>
                <table class="table table-bordered table-hover text-center align-middle">
                    <thead class="table-dark">
                        <tr>
                            <th>#</th>
                            <th>تاريخ الادخال</th>
                            <th>المصدر</th> 
                            <th>نوع الحركة</th>
                            <th>التصنيف</th>
                            <th>المبلغ</th>
                            <th>الموظف/المرتبط</th>
                            <th>أُدخل بواسطة</th>
                            <th>ملاحظات</th>
                            <?php if ($can_edit || $can_delete): ?>
                            <th>الإجراءات</th>
                            <?php endif; ?>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($rows as $i => $row): ?>
                            <?php
                            $type_badge = ($row['type'] == 'دخل') ? 'bg-success' : 'bg-danger';

                            // تحديد صفحات الإجراءات بناءً على المصدر
                            if ($row['source'] == 'Cashbox') {
                                $edit_page = 'cashbox_edit.php';
                                $delete_page = 'cashbox_delete.php';
                            } elseif ($row['source'] == 'Sales') {
                                $edit_page = '../sales/edit.php'; 
                                $delete_page = '../sales/delete.php'; 
                            } elseif ($row['source'] == 'Expenses') {
                                $edit_page = '../expenses/edit.php'; 
                                $delete_page = '../expenses/delete.php'; 
                            } elseif ($row['source'] == 'Salaries') {
                                $edit_page = '../salaries/salary_edit.php'; 
                                $delete_page = '../salaries/salary_delete.php'; 
                            }
                            // تحديد رقم التسلسل للصف الحالي
                            $row_number = $offset + $i + 1;
                            ?>
                            <tr>
                                <td><?= $row_number ?></td>
                                <td><?= htmlspecialchars($row['date']) ?></td>
                                <td><span class="badge bg-primary"><?= htmlspecialchars($row['source']) ?></span></td> 
                                <td><span class="badge <?= $type_badge ?>">
                                    <?= htmlspecialchars($row['type']) ?>
                                </span></td>
                                <td><?= htmlspecialchars($row['operation_type']) ?></td>
                                <td class="fw-bold"><?= number_format($row['amount'], 2) ?></td>
                                <td><?= htmlspecialchars($row['employee_name'] ?? 'غير محدد') ?></td>
                                <td><?= htmlspecialchars($row['created_by_name'] ?? 'غير محدد') ?></td>
                                <td><?= htmlspecialchars($row['description']) ?></td>
                                
                                <?php if ($can_edit || $can_delete): ?>
                                <td class="text-nowrap">
                                    <?php if ($can_edit): ?>
                                    <a href="<?= $edit_page ?>?id=<?= $row['id'] ?>" class="btn btn-sm btn-info text-white me-1" title="تعديل">
                                        <i class="fas fa-edit"></i>
                                    </a>
                                    <?php endif; ?>
                                    
                                    <?php if ($can_delete): ?>
                                    <button class="btn btn-sm btn-danger delete-btn" 
                                            data-id="<?= $row['id'] ?>" 
                                            data-source="<?= $row['source'] ?>"
                                            data-delete-page="<?= $delete_page ?>"
                                            data-bs-toggle="modal" 
                                            data-bs-target="#deleteModal" 
                                            title="حذف">
                                        <i class="fas fa-trash"></i>
                                    </button>
                                    <?php endif; ?>
                                </td>
                                <?php endif; ?>
                            </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            <?php else: ?>
                <div class="alert alert-info text-center">لا توجد حركات مسجلة ضمن الفلاتر المحددة.</div>
            <?php endif; ?>

            <?php if ($total_pages > 1): ?>
                <nav aria-label="Page navigation">
                    <ul class="pagination justify-content-center">
                        <?php 
                        // بناء سلسلة الاستعلام الحالية مع الفلاتر، مع استثناء رقم الصفحة 'p'
                        $query_params = $_GET;
                        unset($query_params['p']);
                        $query_string = http_build_query($query_params);

                        // الرابط السابق
                        $prev_page = max(1, $page - 1);
                        ?>
                        <li class="page-item <?= ($page <= 1) ? 'disabled' : '' ?>">
                            <a class="page-link" href="?p=<?= $prev_page ?>&<?= $query_string ?>" aria-label="Previous">
                                <span aria-hidden="true">&laquo;</span>
                            </a>
                        </li>

                        <?php for ($i = 1; $i <= $total_pages; $i++): ?>
                            <li class="page-item <?= ($i == $page) ? 'active' : '' ?>">
                                <a class="page-link" href="?p=<?= $i ?>&<?= $query_string ?>"><?= $i ?></a>
                            </li>
                        <?php endfor; ?>

                        <?php 
                        // الرابط التالي
                        $next_page = min($total_pages, $page + 1);
                        ?>
                        <li class="page-item <?= ($page >= $total_pages) ? 'disabled' : '' ?>">
                            <a class="page-link" href="?p=<?= $next_page ?>&<?= $query_string ?>" aria-label="Next">
                                <span aria-hidden="true">&raquo;</span>
                            </a>
                        </li>
                    </ul>
                </nav>
            <?php endif; ?>
        </div>
    </div>
</div>

<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true" dir="rtl">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header bg-danger text-white">
                <h5 class="modal-title" id="deleteModalLabel">تأكيد الحذف</h5>
                <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal" aria-label="Close"></button>
            </div>
            <div class="modal-body">
                هل أنت متأكد من أنك تريد حذف هذه العملية من سجل الحركات؟
                <br><strong class="text-danger">هذا الإجراء لا يمكن التراجع عنه.</strong>
            </div>
            <div class="modal-footer justify-content-start">
                <form method="POST" action="cashbox_delete.php" id="deleteForm">
                    <input type="hidden" name="id" id="delete_id">
                    <input type="hidden" name="source" id="delete_source">
                    <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">إلغاء</button>
                    <button type="submit" class="btn btn-danger">تأكيد الحذف</button>
                </form>
            </div>
        </div>
    </div>
</div>

<script>
document.addEventListener('DOMContentLoaded', function() {
    const deleteButtons = document.querySelectorAll('.delete-btn');
    const deleteIdInput = document.getElementById('delete_id');
    const deleteSourceInput = document.getElementById('delete_source');
    const deleteForm = document.getElementById('deleteForm');

    deleteButtons.forEach(button => {
        button.addEventListener('click', function() {
            const rowId = this.getAttribute('data-id');
            const rowSource = this.getAttribute('data-source');
            const deletePage = this.getAttribute('data-delete-page');
            
            deleteIdInput.value = rowId;
            deleteSourceInput.value = rowSource;
            // توجيه الفورم لملف الحذف الصحيح بناءً على مصدر الحركة
            deleteForm.action = deletePage; 
        });
    });
});
</script>

<?php include '../../includes/footer.php'; ?>