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

$pageTitle = 'تسجيل دفعة اشتراك جديدة';
// يُفترض أن header.php يتضمن الدوال الأساسية والاتصال بقاعدة البيانات
include '../../includes/header.php';

// ********* التحقق من الصلاحيات والوصول *********
checkLogin();
if (!hasPermission('create_payment')) {
    $_SESSION['error_message'] = 'ليس لديك الإذن لإنشاء مدفوعات.';
    header('Location: ../subscribers/index.php');
    exit();
}

$db = getDB();
$current_user_id = (int)$_SESSION['user_id'];
$subscriber_id = filter_input(INPUT_GET, 'subscriber_id', FILTER_VALIDATE_INT);
$subscriber = null;
$ampere_price = 0;
$subscription_type = 0;

// 1. جلب بيانات المشترك لملء النموذج
if ($subscriber_id) {
    $sql = "
        SELECT 
            s.id, s.name, s.ampere_price, s.subscription_type,
            g.id AS generator_id, g.name AS generator_name,
            c.cabinet_name
        FROM subscribers s
        LEFT JOIN generators g ON s.generator_id = g.id
        LEFT JOIN cabinets c ON s.cabinet_id = c.id
        WHERE s.id = :id AND s.user_id = :user_id
    ";
    try {
        $result = $db->select($sql, ['id' => $subscriber_id, 'user_id' => $current_user_id]);
        if (!empty($result)) {
            $subscriber = $result[0];
            $ampere_price = (float)$subscriber['ampere_price'];
            $subscription_type = (int)$subscriber['subscription_type'];
        } else {
            $_SESSION['error_message'] = 'المشترك غير موجود أو غير مصرح لك بالوصول إليه.';
            header('Location: ../subscribers/index.php');
            exit();
        }
    } catch (Exception $e) {
        error_log("خطأ في جلب بيانات المشترك: " . $e->getMessage());
        $_SESSION['error_message'] = 'حدث خطأ أثناء جلب بيانات المشترك.';
        header('Location: ../subscribers/index.php');
        exit();
    }
} else {
    $_SESSION['error_message'] = 'لم يتم تحديد معرّف المشترك بشكل صحيح.';
    header('Location: ../subscribers/index.php');
    exit();
}

// تحديد القيمة الافتراضية المقترحة للدفع
$suggested_amount = number_format($ampere_price * $subscription_type, 3, '.', '');
$default_payment_date = date('Y-m-d');
$default_month = date('m');
$default_year = date('Y');

// ********* 2. معالجة طلب النموذج (POST) *********
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $errors = [];

    // تنقية وتدقيق المدخلات
    $posted_subscriber_id = filter_input(INPUT_POST, 'subscriber_id', FILTER_VALIDATE_INT);
    $amount_paid = filter_input(INPUT_POST, 'amount_paid', FILTER_VALIDATE_FLOAT);
    $billing_month = filter_input(INPUT_POST, 'billing_month', FILTER_VALIDATE_INT, ['options' => ['min_range' => 1, 'max_range' => 12]]);
    $billing_year = filter_input(INPUT_POST, 'billing_year', FILTER_VALIDATE_INT, ['options' => ['min_range' => date('Y') - 5, 'max_range' => date('Y') + 1]]);
    $payment_date = filter_input(INPUT_POST, 'payment_date', FILTER_DEFAULT);
    // استخدام FILTER_DEFAULT بدلاً من FILTER_SANITIZE_STRING
    $notes = filter_input(INPUT_POST, 'notes', FILTER_DEFAULT); 
    
    // التحقق من صحة المدخلات
    if (!$posted_subscriber_id || $posted_subscriber_id != $subscriber['id']) {
        $errors[] = 'خطأ في معرّف المشترك.';
    }
    if ($amount_paid === false || $amount_paid <= 0) {
        $errors[] = 'مبلغ الدفع غير صالح ويجب أن يكون أكبر من الصفر.';
    }
    if ($billing_month === false) {
        $errors[] = 'شهر الفاتورة غير صالح.';
    }
    if ($billing_year === false) {
        $errors[] = 'سنة الفاتورة غير صالحة.';
    }
    if (empty($payment_date) || !strtotime($payment_date)) {
        $errors[] = 'تاريخ الدفع غير صالح.';
    }

    if (empty($errors)) {
        try {
            // تنظيف الملاحظات قبل الإدراج
            $clean_notes = htmlspecialchars(trim((string)$notes));

            // إعداد استعلام INSERT مع معاملات مسماة
            $insertSql = "
                INSERT INTO `payments`
                (`subscriber_id`, `generator_id`, `amount_paid`, `billing_month`, `billing_year`, `payment_date`, `notes`, `user_id`)
                VALUES
                (:subscriber_id, :generator_id, :amount_paid, :billing_month, :billing_year, :payment_date, :notes, :user_id)
            ";

            // المصفوفة التي ستمرر للدالة insert() — لاحظ المفاتيح بدون النقطتين
            $insertParams = [
                'subscriber_id' => $posted_subscriber_id,
                'generator_id'  => $subscriber['generator_id'] ?? null,
                'amount_paid'   => $amount_paid,
                'billing_month' => $billing_month,
                'billing_year'  => $billing_year,
                'payment_date'  => $payment_date,
                'notes'         => $clean_notes,
                'user_id'       => $current_user_id
            ];

            // نفّذ الإدراج عبر دالة Database::insert (تتوقع استعلام SQL + params)
            $payment_id = $db->insert($insertSql, $insertParams);

            if ($payment_id) {
                $_SESSION['success_message'] = "تم تسجيل دفعة بقيمة " . number_format($amount_paid, 3) . " للمشترك <strong>" . htmlspecialchars($subscriber['name']) . "</strong> بنجاح.";
                // التوجيه إلى صفحة المشتركين بعد النجاح
                header('Location: ../subscribers/index.php');
                exit();
            } else {
                $errors[] = 'فشل في إدراج الدفعة في قاعدة البيانات.';
            }

        } catch (Exception $e) {
            // سجّل الخطأ مع مزيد من التفاصيل
            error_log("خطأ قاعدة بيانات عند إنشاء الدفعة: " . $e->getMessage() . " | SQL: " . $insertSql . " | params: " . json_encode($insertParams));
            $errors[] = 'حدث خطأ غير متوقع في قاعدة البيانات. يرجى المحاولة لاحقاً.';
        }
    }

    // إعادة تعبئة الحقول في حالة وجود أخطاء
    if (!empty($errors)) {
        $_SESSION['error_message'] = implode('<br>', $errors);
        $default_month = $_POST['billing_month'] ?? $default_month;
        $default_year = $_POST['billing_year'] ?? $default_year;
        $default_payment_date = $_POST['payment_date'] ?? $default_payment_date;
        $suggested_amount = $_POST['amount_paid'] ?? $suggested_amount;
        $notes = $_POST['notes'] ?? '';
    }
}

// قائمة الأشهر للعرض في القائمة المنسدلة
$months = [
    1 => 'يناير', 2 => 'فبراير', 3 => 'مارس', 4 => 'أبريل', 5 => 'مايو', 6 => 'يونيو',
    7 => 'يوليو', 8 => 'أغسطس', 9 => 'سبتمبر', 10 => 'أكتوبر', 11 => 'نوفمبر', 12 => 'ديسمبر'
];

?>

<div class="content-area container mt-4">
    <div class="card shadow-lg border-primary">
        <div class="card-header bg-primary text-white">
            <h4 class="mb-0"><i class="fas fa-wallet me-2"></i> تسجيل دفعة جديدة</h4>
        </div>
        <div class="card-body">
            <?php include '../../includes/alerts.php'; ?>

            <div class="alert alert-info border-0 rounded-0 p-3 mb-4">
                <h5 class="alert-heading"><i class="fas fa-user-tag me-2"></i> تفاصيل المشترك</h5>
                <p class="mb-1"><strong>الاسم:</strong> <?php echo htmlspecialchars($subscriber['name']); ?></p>
                <p class="mb-1"><strong>المولدة:</strong> <?php echo htmlspecialchars($subscriber['generator_name'] ?? 'غير محدد'); ?></p>
                <p class="mb-1"><strong>الاشتراك:</strong> <span class="badge bg-secondary"><?php echo htmlspecialchars($subscriber['subscription_type']); ?> أمبير</span></p>
                <p class="mb-0"><strong>سعر الأمبير:</strong> <span class="fw-bold text-success"><?php echo number_format($ampere_price, 3); ?></span></p>
                <p class="mt-2">المبلغ الشهري المقترح (<?php echo $subscription_type; ?> أمبير * <?php echo number_format($ampere_price, 3); ?>): <strong class="text-danger fs-5"><?php echo number_format($suggested_amount, 3); ?></strong></p>
            </div>

            <form method="POST" action="create.php?subscriber_id=<?php echo htmlspecialchars($subscriber_id); ?>">
                <input type="hidden" name="subscriber_id" value="<?php echo htmlspecialchars($subscriber['id']); ?>">

                <div class="row mb-3">
                    <div class="col-md-6">
                        <label for="amount_paid" class="form-label fw-bold">المبلغ المدفوع (بالدينار العراقي)</label>
                        <div class="input-group">
                            <input type="number" step="0.001" min="0.001" class="form-control" id="amount_paid" name="amount_paid"
                                   value="<?php echo htmlspecialchars($suggested_amount ?? ''); ?>" required aria-describedby="amountHelp">
                            <span class="input-group-text">دينار</span>
                        </div>
                        <div id="amountHelp" class="form-text">يرجى إدخال المبلغ الفعلي الذي تم استلامه.</div>
                    </div>

                    <div class="col-md-6">
                        <label for="payment_date" class="form-label fw-bold">تاريخ الدفع</label>
                        <input type="date" class="form-control" id="payment_date" name="payment_date"
                               value="<?php echo htmlspecialchars($default_payment_date); ?>" required>
                        <div class="form-text">تاريخ استلام هذه الدفعة.</div>
                    </div>
                </div>

                <div class="row mb-4">
                    <div class="col-md-6">
                        <label for="billing_month" class="form-label fw-bold">شهر الفاتورة</label>
                        <select class="form-select" id="billing_month" name="billing_month" required>
                            <?php foreach ($months as $num => $name): ?>
                                <option value="<?php echo $num; ?>" <?php echo ((int)$default_month === $num) ? 'selected' : ''; ?>>
                                    <?php echo $name; ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                        <div class="form-text">الشهر الذي تغطيه هذه الدفعة.</div>
                    </div>
                    <div class="col-md-6">
                        <label for="billing_year" class="form-label fw-bold">سنة الفاتورة</label>
                        <select class="form-select" id="billing_year" name="billing_year" required>
                            <?php
                            $current_year = date('Y');
                            for ($y = $current_year; $y >= $current_year - 2; $y--):
                            ?>
                                <option value="<?php echo $y; ?>" <?php echo ((int)$default_year === $y) ? 'selected' : ''; ?>>
                                    <?php echo $y; ?>
                                </option>
                            <?php endfor; ?>
                        </select>
                        <div class="form-text">السنة التي تغطيها هذه الدفعة.</div>
                    </div>
                </div>

                <div class="mb-4">
                    <label for="notes" class="form-label fw-bold">ملاحظات (اختياري)</label>
                    <textarea class="form-control" id="notes" name="notes" rows="3"><?php echo htmlspecialchars($notes ?? ''); ?></textarea>
                    <div class="form-text">يمكن استخدامها لتسجيل تفاصيل إضافية حول الدفعة.</div>
                </div>

                <div class="d-flex justify-content-between">
                    <button type="submit" class="btn btn-success btn-lg">
                        <i class="fas fa-check-circle me-2"></i> تسجيل الدفعة
                    </button>
                    <a href="../subscribers/index.php" class="btn btn-outline-secondary">
                        <i class="fas fa-arrow-right me-2"></i> العودة لقائمة المشتركين
                    </a>
                </div>
            </form>
        </div>
    </div>
</div>

<?php include '../../includes/footer.php'; ?>
