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

// تضمين ملف الرأس لجميع الصفحات
include '../../includes/header.php';

// التحقق من تسجيل الدخول
checkLogin();

// الحصول على كائن قاعدة البيانات
$db = getDB();

// الحصول على معرف المستخدم من الجلسة
$userId = $_SESSION['user_id'] ?? null;

// التحقق من صلاحية حذف الصرفيات (للمدير)
$canDelete = hasPermission('delete_expense');

// التحقق من وجود معرف الصرفية في الرابط
$expenseId = $_GET['id'] ?? null;
if (!$expenseId) {
    $_SESSION['error_message'] = "لم يتم تحديد معرف الصرفية للحذف.";
    header("Location: index.php");
    exit;
}

try {
    // 1. جلب الصرفية للتحقق من الصلاحيات والحالة والمسار
    $sql = "SELECT * FROM expenses WHERE id = ?";
    $expense = $db->selectOne($sql, [$expenseId]);

    if (!$expense) {
        $_SESSION['error_message'] = "الصرفية المطلوبة غير موجودة.";
        header("Location: index.php");
        exit;
    }

    // التحقق من الصلاحيات: المدير أو منشئ الصرفية
    if (!$canDelete && $expense['created_by'] != $userId) {
        $_SESSION['error_message'] = "ليس لديك صلاحية لحذف هذه الصرفية.";
        header("Location: index.php");
        exit;
    }

    // التحقق من حالة الصرفية (approved أو rejected) لمنع الحذف إلا للمدير
    $status = $expense['status'] ?? null;
    if (in_array($status, ['approved', 'rejected']) && !$canDelete) {
        $_SESSION['error_message'] = "لا يمكن حذف صرفية معتمدة أو مرفوضة إلا بواسطة مسؤول.";
        header("Location: index.php");
        exit;
    }

    // 2. حذف ملف المرفق إن وجد
    if (!empty($expense['receipt_path'])) {
        $fullPath = '../../' . $expense['receipt_path'];
        if (file_exists($fullPath) && is_file($fullPath)) {
            try {
                unlink($fullPath);
            } catch (Exception $e) {
                error_log("فشل حذف الملف: {$fullPath} - " . $e->getMessage());
            }
        }
    }

    // 3. حذف الإشعارات المرتبطة بالصرفية
    $deleteNotificationsSql = "DELETE FROM notifications WHERE link LIKE ?";
    $db->delete($deleteNotificationsSql, ['%/view.php?id=' . $expenseId]);

   // 4. تسجيل الحذف في جدول log_file
// 4. تسجيل الحذف في جدول log_file
logAction($db, 'صرفيات', $expenseId, $userId, $expense, [], 'حذف');

    // 4. حذف الصرفية من قاعدة البيانات
    $deleteSql = "DELETE FROM expenses WHERE id = ?";
    if ($db->delete($deleteSql, [$expenseId])) {
        $_SESSION['success_message'] = "تم حذف الصرفية بنجاح.";
    } else {
        $_SESSION['error_message'] = "حدث خطأ أثناء حذف الصرفية.";
    }

} catch (PDOException $e) {
    $_SESSION['error_message'] = "حدث خطأ في قاعدة البيانات أثناء الحذف: " . $e->getMessage();
}

// إعادة التوجيه إلى صفحة قائمة الصرفيات
header("Location: index.php");
exit;
