<?php
require_once '../config.php';
require_once '../includes/functions_finance.php';

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

// التحقق من الصلاحيات
requirePermission('admin');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    try {
        // التحقق من البيانات المطلوبة
        if (empty($_POST['payment_id']) || empty($_POST['member_id']) || empty($_POST['payment_month']) || empty($_POST['payment_status'])) {
            setAlert('danger', 'يرجى ملء جميع الحقول المطلوبة');
            header('Location: ' . SITE_URL . '/monthly_payments/index.php');
            exit;
        }

        // تجهيز البيانات
        $paymentId = (int) sanitizeInput($_POST['payment_id']);
        $memberId = (int) sanitizeInput($_POST['member_id']);
        $paymentMonth = sanitizeInput($_POST['payment_month']) . '-01'; // إضافة اليوم الأول من الشهر
        $paymentStatus = sanitizeInput($_POST['payment_status']);
        $paymentDate = !empty($_POST['payment_date']) ? sanitizeInput($_POST['payment_date']) : null;
        $amountPaid = !empty($_POST['amount_paid']) ? (float) sanitizeInput($_POST['amount_paid']) : 0;
        $paymentMethod = !empty($_POST['payment_method']) ? sanitizeInput($_POST['payment_method']) : null;
        $notes = !empty($_POST['notes']) ? sanitizeInput($_POST['notes']) : null;

        // التحقق من وجود الدفعة
        $payment = fetchOne("SELECT id, payment_status, amount_paid FROM monthly_payments WHERE id = ?", [$paymentId]);
        if (!$payment) {
            setAlert('danger', 'الدفعة غير موجودة');
            header('Location: ' . SITE_URL . '/monthly_payments/index.php');
            exit;
        }

        // التحقق من وجود المنخرط
        $member = fetchOne("SELECT id FROM members WHERE id = ?", [$memberId]);
        if (!$member) {
            setAlert('danger', 'المنخرط غير موجود');
            header('Location: ' . SITE_URL . '/monthly_payments/index.php');
            exit;
        }

        // التحقق من عدم وجود دفعة أخرى لنفس المنخرط ونفس الشهر (باستثناء الدفعة الحالية)
        $existingPayment = fetchOne("SELECT id FROM monthly_payments WHERE member_id = ? AND payment_month = ? AND id != ?", [$memberId, $paymentMonth, $paymentId]);
        if ($existingPayment) {
            setAlert('warning', 'توجد دفعة أخرى مسجلة لهذا المنخرط في هذا الشهر');
            header('Location: ' . SITE_URL . '/monthly_payments/index.php');
            exit;
        }

        // تعديل البيانات بناءً على حالة الدفع
        if ($paymentStatus === 'unpaid') {
            $paymentDate = null;
            $amountPaid = 0;
            $paymentMethod = null;
        }

        // تحديث البيانات
        $stmt = $db->prepare("
            UPDATE monthly_payments SET 
                member_id = ?, 
                payment_month = ?, 
                payment_status = ?, 
                payment_date = ?, 
                amount_paid = ?, 
                payment_method = ?, 
                notes = ?
            WHERE id = ?
        ");

        $stmt->execute([
            $memberId, $paymentMonth, $paymentStatus, $paymentDate,
            $amountPaid, $paymentMethod, $notes, $paymentId
        ]);

        // معالجة الإيرادات المرتبطة بالدفعة
        $oldStatus = $payment['payment_status'] ?? '';
        $oldAmount = $payment['amount_paid'] ?? 0;

        // حالة 1: كان غير مدفوع وأصبح مدفوع - إضافة إيراد جديد
        if (($oldStatus !== 'paid' || $oldAmount <= 0) && $paymentStatus === 'paid' && $amountPaid > 0) {
            addMonthlyPaymentAsIncome(
                $memberId,
                $paymentMonth,
                $amountPaid,
                $paymentMethod,
                $paymentDate,
                $_SESSION['user_id']
            );
        }
        // حالة 2: كان مدفوع وأصبح غير مدفوع - حذف الإيراد المرتبط (إذا وجد)
        else if ($oldStatus === 'paid' && $oldAmount > 0 && ($paymentStatus !== 'paid' || $amountPaid <= 0)) {
            // التحقق من وجود إيراد مسجل لهذه الدفعة
            if (checkMonthlyPaymentIncome($memberId, $paymentMonth)) {
                // حذف الإيراد المرتبط بهذه الدفعة
                $member = fetchOne("SELECT first_name, last_name FROM members WHERE id = ?", [$memberId]);
                $memberName = $member ? $member['first_name'] . ' ' . $member['last_name'] : 'غير معروف';
                $description = 'اشتراك شهري: ' . $memberName . ' - ' . date('m/Y', strtotime($paymentMonth));
                
                $db->prepare("DELETE FROM income WHERE source = 'monthly_subscription' AND description = ?")->execute([$description]);
            }
        }
        // حالة 3: كان مدفوع وما زال مدفوع ولكن تغير المبلغ أو طريقة الدفع - تحديث الإيراد
        else if ($oldStatus === 'paid' && $oldAmount > 0 && $paymentStatus === 'paid' && $amountPaid > 0 && 
                ($oldAmount != $amountPaid || $paymentMethod != $paymentMethod)) {
            // التحقق من وجود إيراد مسجل لهذه الدفعة
            if (checkMonthlyPaymentIncome($memberId, $paymentMonth)) {
                $member = fetchOne("SELECT first_name, last_name FROM members WHERE id = ?", [$memberId]);
                $memberName = $member ? $member['first_name'] . ' ' . $member['last_name'] : 'غير معروف';
                $description = 'اشتراك شهري: ' . $memberName . ' - ' . date('m/Y', strtotime($paymentMonth));
                
                // تحديث الإيراد الموجود
                $db->prepare("UPDATE income SET amount = ?, payment_method = ?, payment_date = ? WHERE source = 'monthly_subscription' AND description = ?")
                   ->execute([$amountPaid, $paymentMethod, $paymentDate, $description]);
            } else {
                // إذا لم يكن هناك إيراد مسجل، قم بإضافته
                addMonthlyPaymentAsIncome(
                    $memberId,
                    $paymentMonth,
                    $amountPaid,
                    $paymentMethod,
                    $paymentDate,
                    $_SESSION['user_id']
                );
            }
        }

        setAlert('success', 'تم تحديث دفعة الاشتراك الشهري بنجاح');
    } catch (PDOException $e) {
        setAlert('danger', 'حدث خطأ أثناء تحديث الدفعة: ' . $e->getMessage());
    }
}

// Redirection vers la page appropriée
$redirectUrl = !empty($_POST['redirect_url']) ? $_POST['redirect_url'] : SITE_URL . '/monthly_payments/index.php';
header('Location: ' . $redirectUrl);
exit;
?>
