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

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

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

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

        // تجهيز البيانات
        $memberId = (int) sanitizeInput($_POST['member_id']);
        $startMonth = sanitizeInput($_POST['start_month']); // بتنسيق YYYY-MM
        $endMonth = sanitizeInput($_POST['end_month']); // بتنسيق YYYY-MM
        $paymentStatus = sanitizeInput($_POST['payment_status']);
        $paymentDate = !empty($_POST['payment_date']) ? sanitizeInput($_POST['payment_date']) : null;
        $monthlyFee = !empty($_POST['monthly_fee']) ? (float) sanitizeInput($_POST['monthly_fee']) : 0;
        $paymentMethod = !empty($_POST['payment_method']) ? sanitizeInput($_POST['payment_method']) : null;
        $notes = !empty($_POST['notes']) ? sanitizeInput($_POST['notes']) : null;
        $createdBy = $_SESSION['user_id'];

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

        // التحقق من أن شهر البداية يسبق شهر النهاية
        $startDate = new DateTime($startMonth . '-01');
        $endDate = new DateTime($endMonth . '-01');
        
        if ($startDate > $endDate) {
            setAlert('danger', 'تاريخ البداية يجب أن يكون قبل تاريخ النهاية');
            header('Location: ' . SITE_URL . '/monthly_payments/index.php');
            exit;
        }

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

        // حساب عدد الشهور
        $interval = $startDate->diff($endDate);
        $monthsCount = ($interval->y * 12) + $interval->m + 1; // +1 لتضمين الشهر الأخير

        // تحضير الشهور المراد تسجيلها
        $months = [];
        $currentDate = clone $startDate;
        
        for ($i = 0; $i < $monthsCount; $i++) {
            $months[] = $currentDate->format('Y-m-d');
            $currentDate->modify('+1 month');
        }

        // بدء المعاملة
        $db->beginTransaction();
        
        $successCount = 0;
        $errorMessages = [];

        foreach ($months as $monthDate) {
            // التحقق من عدم وجود دفعة مسجلة لنفس المنخرط ونفس الشهر
            $existingPayment = fetchOne("SELECT id FROM monthly_payments WHERE member_id = ? AND payment_month = ?", 
                [$memberId, $monthDate]);
                
            if ($existingPayment) {
                $errorMessages[] = 'الشهر ' . date('m/Y', strtotime($monthDate)) . ' مسجل بالفعل';
                continue;
            }

            try {
                // إدخال البيانات
                $stmt = $db->prepare("
                    INSERT INTO monthly_payments (
                        member_id, payment_month, payment_status, payment_date, 
                        amount_paid, payment_method, notes, created_by
                    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
                ");

                $stmt->execute([
                    $memberId, 
                    $monthDate, 
                    $paymentStatus, 
                    $paymentDate,
                    $monthlyFee, // المبلغ الشهري
                    $paymentMethod, 
                    $notes ? $notes . ' (دفعة متعددة)' : '(دفعة متعددة)', 
                    $createdBy
                ]);
                
                $successCount++;
            } catch (PDOException $e) {
                $errorMessages[] = 'خطأ في تسجيل شهر ' . date('m/Y', strtotime($monthDate)) . ': ' . $e->getMessage();
            }
        }

        // إنهاء المعاملة
        if ($successCount > 0) {
            $db->commit();
            setAlert('success', 'تم تسجيل ' . $successCount . ' من أصل ' . $monthsCount . ' دفعة اشتراك شهري بنجاح');
            
            if (!empty($errorMessages)) {
                setAlert('warning', 'بعض الشهور لم يتم تسجيلها: ' . implode(', ', $errorMessages));
            }
        } else {
            $db->rollBack();
            setAlert('danger', 'لم يتم تسجيل أي دفعة: ' . implode(', ', $errorMessages));
        }
        
    } catch (PDOException $e) {
        // التراجع عن المعاملة في حالة حدوث خطأ
        $db->rollBack();
        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;
?>
