<?php
// تضمين الملفات الأساسية
include '../../includes/header.php';

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

// التحقق من أن الطلب يحتوي على مُعرّف الصرفية والحالة المطلوبة
if (!isset($_GET['id']) || !isset($_GET['status'])) {
    $_SESSION['error_message'] = "بيانات الطلب غير مكتملة.";
    header("Location: index.php");
    exit;
}

$expenseId = (int)$_GET['id'];
$newStatus = $_GET['status'];
$userId = $_SESSION['user_id'];

// بما أن header.php يضم getDB()، يمكننا استخدامه مباشرة
$db = getDB();

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

    // إذا لم يتم العثور على الصرفية، عرض رسالة الخطأ
    if (!$expense) {
        $_SESSION['error_message'] = "الصرفية المطلوبة غير موجودة أو تم التعامل معها بالفعل.";
        header("Location: index.php");
        exit;
    }

    // 2. التحقق من الصلاحيات المطلوبة لكل حالة
    if ($newStatus === 'approved' || $newStatus === 'rejected') {
        // التحقق من صلاحية الموافقة والرفض
        if (!hasPermission('approve_expenses')) {
            $_SESSION['error_message'] = "ليس لديك صلاحية للموافقة على أو رفض الصرفيات.";
            header("Location: index.php");
            exit;
        }

        // التحقق من الحالة الحالية قبل التغيير (يجب أن تكون 'pending')
        if ($expense['status'] !== 'pending') {
            $_SESSION['error_message'] = "الصرفية المطلوبة ليست في حالة 'قيد الانتظار'.";
            header("Location: index.php");
            exit;
        }

        // 3. تحديث الحالة
        // ✅ إضافة تحديث تاريخ الموافقة إلى الوقت الحالي
        $db->update("UPDATE expenses SET status = ?, approved_by = ?, approved_at = NOW() WHERE id = ?", [$newStatus, $userId, $expenseId]);
        $_SESSION['success_message'] = "تمت عملية الموافقة/الرفض بنجاح.";
        
    } elseif ($newStatus === 'pending') {
        // التحقق من صلاحية إلغاء الموافقة
        if (!hasPermission('revert_approved_expense')) {
            $_SESSION['error_message'] = "ليس لديك صلاحية لإلغاء موافقة الصرفيات.";
            header("Location: index.php");
            exit;
        }

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

        // 3. تحديث الحالة
        // ✅ إعادة تعيين حقل 'approved_by' و 'approved_at' إلى NULL
        $db->update("UPDATE expenses SET status = ?, approved_by = NULL, approved_at = NULL WHERE id = ?", [$newStatus, $expenseId]);
        $_SESSION['success_message'] = "تمت إعادة الصرفية إلى حالة 'قيد الانتظار' بنجاح.";

    } else {
        // إذا كانت الحالة غير صالحة
        $_SESSION['error_message'] = "الحالة المطلوبة غير صالحة.";
    }

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

header("Location: index.php");
exit;
?>