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

$pageTitle = 'إضافة راتب شهري';
include '../../includes/header.php';

checkLogin();
// الصلاحية المطلوبة لإضافة الرواتب
if (!hasPermission('add_employee_salary')) {
    $_SESSION['error_message'] = 'ليس لديك صلاحية لإضافة الرواتب الشهرية.';
    header('Location: salaries_report.php');
    exit();
}

$db = getDB();
$employeesList = [];
$errors = [];
// استخدام $_SESSION['success_message'] بعد التوجيه
$successMessage = $_SESSION['success_message'] ?? '';
unset($_SESSION['success_message']);

// جلب قائمة الموظفين لعرضها في قائمة الاختيار
try {
    $employeesList = $db->select("SELECT id, full_name, salary, position FROM employees ORDER BY full_name ASC");
} catch (Exception $e) {
    error_log("Database error in fetching employees: " . $e->getMessage());
    $errors[] = 'حدث خطأ في قاعدة البيانات أثناء جلب قائمة الموظفين.';
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 1. تنظيف وإعداد البيانات
    $employee_id    = intval($_POST['employee_id'] ?? 0);
    $payment_month  = trim($_POST['payment_month'] ?? ''); // YYYY-MM
    $base_salary    = floatval($_POST['base_salary'] ?? 0);
    $allowances     = floatval($_POST['allowances'] ?? 0);
    $deductions     = floatval($_POST['deductions'] ?? 0);
    $payment_method = trim($_POST['payment_method'] ?? 'تحويل بنكي');
    $notes          = trim($_POST['notes'] ?? '');
    
    // **القيمة الجديدة:** جلب معرف المستخدم الحالي الذي قام بالعملية
    $created_by_user_id = $_SESSION['user_id'] ?? NULL;

    // حساب صافي الراتب
    $net_salary = $base_salary + $allowances - $deductions;

    // 2. التحقق من صحة البيانات
    if ($employee_id <= 0) {
        $errors[] = 'الرجاء اختيار موظف.';
    }
    if (empty($payment_month) || !preg_match('/^\d{4}-\d{2}$/', $payment_month)) {
         $errors[] = 'الرجاء تحديد شهر الدفع بالتنسيق الصحيح (YYYY-MM).';
    }
    if ($base_salary <= 0) {
        $errors[] = 'الراتب الأساسي يجب أن يكون رقماً موجباً.';
    }
    if ($net_salary < 0) {
        $errors[] = 'صافي الراتب لا يمكن أن يكون سالباً.';
    }
    if ($created_by_user_id === NULL) {
        $errors[] = 'خطأ في الجلسة: لم يتم التعرف على هوية المستخدم المُسجل.';
    }

    // تحويل شهر الدفع إلى تاريخ كامل ليناسب حقل DATE
    $payment_month_date = $payment_month . '-01';

    // 3. الإضافة إلى قاعدة البيانات
    if (empty($errors)) {
        try {
            
            // 🛑 التحقق المسبق من عدم التكرار (منع رسائل الخطأ غير الواضحة)
            $check_duplicate = $db->selectOne(
                "SELECT id FROM monthly_salaries WHERE employee_id = ? AND payment_month = ?",
                [$employee_id, $payment_month_date]
            );

            if ($check_duplicate) {
                // رسالة خطأ واضحة للمستخدم
                $errors[] = '🛑 **تم دفع الراتب بالفعل:** هذا الموظف لديه بالفعل دفعة مسجلة لشهر ' . htmlspecialchars($payment_month) . '.';
            } else {
                
                // 🚀 تنفيذ الإدراج مع تسجيل هوية المنشئ (created_by_user_id)
                $sql = "INSERT INTO monthly_salaries 
                        (employee_id, payment_month, base_salary, allowances, deductions, net_salary, payment_method, notes, created_by_user_id) 
                        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)";
                
                $db->insert($sql, [
                    $employee_id,
                    $payment_month_date,
                    $base_salary,
                    $allowances,
                    $deductions,
                    $net_salary,
                    $payment_method,
                    $notes,
                    $created_by_user_id
                ]);

                // تسجيل رسالة النجاح في الجلسة وإعادة التوجيه (Post-Redirect-Get)
                $_SESSION['success_message'] = '✅ تم تسجيل الراتب الشهري بنجاح.';
                header('Location: add_monthly_salary.php');
                exit();
            }

        } catch (Exception $e) {
            // معالجة الأخطاء العامة (في حال فشل التحقق المسبق ووصل إلى خطأ المفتاح الفريد)
             error_log("Database error in inserting salary: " . $e->getMessage());
             $errors[] = 'حدث خطأ غير متوقع في قاعدة البيانات. تحقق من log الأخطاء.';
        }
    }
}
// جلب الراتب الافتراضي عند عدم وجود بيانات POST
$defaultEmployeeSalary = 0.00;
if (!isset($_POST['employee_id']) && !empty($employeesList)) {
    // يمكنك تعيين قيمة الراتب الأساسي لأول موظف في القائمة كافتراضي
    // أو تركه صفراً والاعتماد فقط على الـ JavaScript لتحديثه عند اختيار موظف.
    // سنعتمد على JS لتحديثه فور اختيار موظف.
}
?>

<div class="content-area">
    <div class="page-header">
        <h2 class="page-title">إضافة راتب شهري جديد</h2>
        <p class="page-subtitle">تسجيل تفاصيل الدفعة الشهرية لأحد الموظفين.</p>
    </div>

    <?php if (!empty($errors)): ?>
        <div class="alert alert-danger mt-3">
            <ul class="mb-0">
                <?php foreach ($errors as $error): ?>
                    <li><?php echo htmlspecialchars($error); ?></li>
                <?php endforeach; ?>
            </ul>
        </div>
    <?php endif; ?>

    <?php if ($successMessage): ?>
        <div class="alert alert-success mt-3">
            <?php echo htmlspecialchars($successMessage); ?>
        </div>
    <?php endif; ?>

    <div class="card shadow-sm mt-4">
        <div class="card-body">
            <form method="POST">
                <div class="row g-3">
                    
                    <div class="col-md-6">
                        <label for="employee_id" class="form-label">الموظف <span class="text-danger">*</span></label>
                        <select class="form-control" id="employee_id" name="employee_id" required onchange="updateSalaryFields(this)">
                            <option value="">اختر موظفاً...</option>
                            <?php foreach ($employeesList as $emp): ?>
                                <option 
                                    value="<?php echo $emp['id']; ?>" 
                                    data-salary="<?php echo htmlspecialchars($emp['salary'] ?? 0); ?>"
                                    <?php echo (isset($_POST['employee_id']) && $_POST['employee_id'] == $emp['id']) ? 'selected' : ''; ?>
                                >
                                    <?php echo htmlspecialchars($emp['full_name']) . ' (' . htmlspecialchars($emp['position']) . ')'; ?>
                                </option>
                            <?php endforeach; ?>
                        </select>
                    </div>

                    <div class="col-md-6">
                        <label for="payment_month" class="form-label">شهر الدفع (سنة-شهر) <span class="text-danger">*</span></label>
                        <input type="text" class="form-control" id="payment_month" name="payment_month"
                               placeholder="مثال: 2025-01" required 
                               pattern="\d{4}-\d{2}" title="يرجى استخدام التنسيق YYYY-MM، مثل 2025-01"
                               value="<?php echo htmlspecialchars($_POST['payment_month'] ?? date('Y-m')); ?>">
                        <small class="form-text text-muted">التنسيق المطلوب: YYYY-MM</small>
                    </div>

                    <div class="col-md-4">
                        <label for="base_salary" class="form-label">الراتب الأساسي المدفوع <span class="text-danger">*</span></label>
                        <input type="number" step="0.01" min="0" class="form-control" id="base_salary" name="base_salary" required 
                               value="<?php echo htmlspecialchars($_POST['base_salary'] ?? $defaultEmployeeSalary); ?>" oninput="calculateNetSalary()">
                        <small class="form-text text-info">يتم ملؤه آلياً براتب الموظف الثابت (يمكن تعديله).</small>
                    </div>

                    <div class="col-md-4">
                        <label for="allowances" class="form-label">المكافأة</label>
                        <input type="number" step="0.01" min="0" class="form-control" id="allowances" name="allowances" 
                               value="<?php echo htmlspecialchars($_POST['allowances'] ?? 0.00); ?>" oninput="calculateNetSalary()">
                    </div>

                    <div class="col-md-4">
                        <label for="deductions" class="form-label">الاستقطاعات/الغرامات</label>
                        <input type="number" step="0.01" min="0" class="form-control" id="deductions" name="deductions" 
                               value="<?php echo htmlspecialchars($_POST['deductions'] ?? 0.00); ?>" oninput="calculateNetSalary()">
                    </div>

                    <div class="col-md-6">
                        <label for="net_salary_display" class="form-label">صافي الراتب</label>
                        <input type="text" class="form-control bg-light fw-bold" id="net_salary_display" readonly value="<?php echo number_format($net_salary ?? 0, 2); ?>">
                        <small class="form-text text-success">القيمة النهائية التي ستُحسب.</small>
                    </div>

                    <div class="col-md-6">
                        <label for="payment_method" class="form-label">طريقة الدفع</label>
                        <select class="form-control" id="payment_method" name="payment_method">
                            <option value="تحويل بنكي" <?php echo (isset($_POST['payment_method']) && $_POST['payment_method'] == 'تحويل بنكي') ? 'selected' : ''; ?>>تحويل بنكي</option>
                            <option value="نقداً" <?php echo (isset($_POST['payment_method']) && $_POST['payment_method'] == 'نقداً') ? 'selected' : ''; ?>>نقداً</option>
                            <option value="شيك" <?php echo (isset($_POST['payment_method']) && $_POST['payment_method'] == 'شيك') ? 'selected' : ''; ?>>شيك</option>
                        </select>
                    </div>

                    <div class="col-12">
                        <label for="notes" class="form-label">ملاحظات</label>
                        <textarea class="form-control" id="notes" name="notes" rows="3"><?php echo htmlspecialchars($_POST['notes'] ?? ''); ?></textarea>
                    </div>

                    <div class="col-12 d-grid">
                        <button class="btn btn-success btn-lg" type="submit">
                            <i class="fas fa-money-bill-wave me-1"></i> تسجيل الدفعة الشهرية
                        </button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
    // دالة لحساب صافي الراتب وتحديث حقل العرض
    function calculateNetSalary() {
        const base = parseFloat(document.getElementById('base_salary').value) || 0;
        const allowances = parseFloat(document.getElementById('allowances').value) || 0;
        const deductions = parseFloat(document.getElementById('deductions').value) || 0;
        
        const netSalary = base + allowances - deductions;
        
        // تحديث حقل العرض (مع تنسيق)
        document.getElementById('net_salary_display').value = netSalary.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ","); 
    }

    // دالة لتحديث حقل الراتب الأساسي عند اختيار موظف
    function updateSalaryFields(selectElement) {
        const selectedOption = selectElement.options[selectElement.selectedIndex];
        const baseSalaryInput = document.getElementById('base_salary');
        
        // جلب الراتب الأساسي من خاصية data-salary في الـ option المختار
        const newSalary = selectedOption.getAttribute('data-salary') || 0;
        
        // تحديث حقل الراتب الأساسي
        baseSalaryInput.value = parseFloat(newSalary).toFixed(2);
        
        // إعادة حساب صافي الراتب
        calculateNetSalary();
    }
    
    // حساب صافي الراتب عند تحميل الصفحة
    document.addEventListener('DOMContentLoaded', function() {
        // تأكد من تحديث الراتب الأساسي إذا كان هناك موظف محدد مسبقًا (مثل بعد فشل الإرسال)
        const select = document.getElementById('employee_id');
        if (select && select.value !== "") {
             updateSalaryFields(select);
        } else {
             calculateNetSalary();
        }
    });
</script>

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