<?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['num_months']) || 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']);
        $numMonths = (int) sanitizeInput($_POST['num_months']);
        $paymentStatus = sanitizeInput($_POST['payment_status']);
        $paymentDate = !empty($_POST['payment_date']) ? sanitizeInput($_POST['payment_date']) : date('Y-m-d');
        $totalAmount = !empty($_POST['total_amount']) ? (float) sanitizeInput($_POST['total_amount']) : 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;
        }

        // التحقق من صحة عدد الأشهر
        if ($numMonths < 1 || $numMonths > 12) {
            setAlert('danger', 'عدد الأشهر يجب أن يكون بين 1 و 12');
            header('Location: ' . SITE_URL . '/monthly_payments/index.php');
            exit;
        }

        // حساب المبلغ لكل شهر
        $amountPerMonth = $totalAmount / $numMonths;

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

        // إنشاء قائمة بالأشهر المطلوب تسجيل دفعات لها
        $months = [];
        $currentMonth = $startMonth . '-01'; // إضافة اليوم الأول من الشهر
        
        for ($i = 0; $i < $numMonths; $i++) {
            $month = date('Y-m-d', strtotime($currentMonth . " +$i months"));
            $months[] = $month;
        }

        // عدد الدفعات التي تم تسجيلها بنجاح
        $successCount = 0;
        $skippedCount = 0;

        // تسجيل دفعة لكل شهر
        foreach ($months as $month) {
            // التحقق من عدم وجود دفعة مسجلة لنفس المنخرط ونفس الشهر
            $existingPayment = fetchOne("SELECT id FROM monthly_payments WHERE member_id = ? AND payment_month = ?", [$memberId, $month]);
            
            if ($existingPayment) {
                $skippedCount++;
                continue; // تخطي هذا الشهر إذا كانت هناك دفعة موجودة بالفعل
            }

            // إدخال البيانات
            $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, $month, $paymentStatus, $paymentDate,
                $amountPerMonth, $paymentMethod, $notes, $createdBy
            ]);

            // إضافة الدفعة كإيراد في النظام المالي إذا كانت مدفوعة
            if ($paymentStatus === 'paid' || $paymentStatus === 'partial') {
                addMonthlyPaymentAsIncome($memberId, $month, $amountPerMonth, $paymentMethod, $paymentDate, $createdBy);
            }

            $successCount++;
        }

        // رسالة نجاح مع تفاصيل
        if ($successCount > 0) {
            $message = "تم تسجيل $successCount دفعة اشتراك شهري بنجاح";
            if ($skippedCount > 0) {
                $message .= " وتم تخطي $skippedCount شهر لوجود دفعات مسجلة مسبقاً";
            }
            setAlert('success', $message);
        } else {
            setAlert('warning', 'لم يتم تسجيل أي دفعات جديدة. جميع الأشهر المحددة لديها دفعات مسجلة مسبقاً.');
        }
    } catch (PDOException $e) {
        setAlert('danger', 'حدث خطأ أثناء تسجيل الدفعات: ' . $e->getMessage());
    }
}

// Redirection vers la page appropriée
header('Location: ' . SITE_URL . '/monthly_payments/index.php');
exit;
?>
