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

$pageTitle = 'تعديل راتب شهري'; // 1. تغيير العنوان
include '../../includes/header.php';

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

$db = getDB();
$employeesList = [];
$salaryData = []; // بيانات الراتب المراد تعديله
$errors = [];

$successMessage = $_SESSION['success_message'] ?? '';
unset($_SESSION['success_message']);

// =========================================================================
// 2. جلب بيانات الراتب المراد تعديله
// =========================================================================

// التأكد من وجود معرف الراتب في الرابط (GET)
$salary_id = intval($_GET['id'] ?? 0);

if ($salary_id > 0) {
    try {
        // جلب بيانات الراتب الحالي مع بيانات الموظف الأساسية
        $sql = "
            SELECT 
                ms.*, e.full_name, e.position, e.salary AS current_employee_base_salary
            FROM 
                monthly_salaries ms
            JOIN 
                employees e ON ms.employee_id = e.id
            WHERE 
                ms.id = ?
        ";
        $salaryData = $db->selectOne($sql, [$salary_id]);
        
        if (!$salaryData) {
            $_SESSION['error_message'] = '❌ لم يتم العثور على سجل الراتب المطلوب.';
            header('Location: salaries_report.php');
            exit();
        }
    } catch (Exception $e) {
        error_log("Database error in fetching salary data: " . $e->getMessage());
        $_SESSION['error_message'] = 'حدث خطأ في قاعدة البيانات أثناء جلب تفاصيل الراتب.';
        header('Location: salaries_report.php');
        exit();
    }
} else {
    $_SESSION['error_message'] = '❌ يجب تحديد راتب لتعديله.';
    header('Location: salaries_report.php');
    exit();
}

// جلب قائمة الموظفين (لا تزال ضرورية لعرض الاسم والراتب الحالي كمرجع)
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 و payment_month من POST لضمان التعديل على السجل الصحيح)
    // لا يمكن تغيير الموظف أو الشهر بعد تسجيل الراتب.
    $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'] ?? '');
    
    // **القيمة الجديدة:** جلب معرف المستخدم الحالي الذي قام بالتعديل
    $updated_by_user_id = $_SESSION['user_id'] ?? NULL;

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

    // 2. التحقق من صحة البيانات
    if ($base_salary <= 0) {
        $errors[] = 'الراتب الأساسي يجب أن يكون رقماً موجباً.';
    }
    if ($net_salary < 0) {
        $errors[] = 'صافي الراتب لا يمكن أن يكون سالباً.';
    }
    if ($updated_by_user_id === NULL) {
        $errors[] = 'خطأ في الجلسة: لم يتم التعرف على هوية المستخدم المُسجل.';
    }

    // 3. التعديل في قاعدة البيانات
    if (empty($errors)) {
        try {
            
            // 🚀 تنفيذ التعديل (UPDATE) بدلاً من الإدراج (INSERT)
            $sql = "UPDATE monthly_salaries SET
                        base_salary = ?,
                        allowances = ?,
                        deductions = ?,
                        net_salary = ?,
                        payment_method = ?,
                        notes = ?,
                        updated_at = NOW(),
                        updated_by_user_id = ?
                    WHERE id = ?";
            
            $db->update($sql, [
                $base_salary,
                $allowances,
                $deductions,
                $net_salary,
                $payment_method,
                $notes,
                $updated_by_user_id,
                $salary_id // استخدام معرف الراتب للتعديل
            ]);

            // تسجيل رسالة النجاح في الجلسة وإعادة التوجيه (Post-Redirect-Get)
            $_SESSION['success_message'] = '✅ تم تعديل راتب الموظف **' . htmlspecialchars($salaryData['full_name']) . '** لشهر **' . date('Y-m', strtotime($salaryData['payment_month'])) . '** بنجاح.';
            header('Location: edit_monthly_salary.php?id=' . $salary_id);
            exit();

        } catch (Exception $e) {
            error_log("Database error in updating salary: " . $e->getMessage());
            $errors[] = 'حدث خطأ غير متوقع في قاعدة البيانات أثناء التعديل. تحقق من log الأخطاء.';
        }
    }
    
    // في حالة وجود أخطاء، يتم تحديث بيانات النموذج من قيم POST
    // لكي لا يفقد المستخدم المدخلات
    $salaryData['base_salary'] = $base_salary;
    $salaryData['allowances'] = $allowances;
    $salaryData['deductions'] = $deductions;
    $salaryData['payment_method'] = $payment_method;
    $salaryData['notes'] = $notes;
    // صافي الراتب سيتم حسابه بواسطة calculateNetSalary في JS عند التحميل
    
} 

// إذا كان الطلب GET، أو POST به أخطاء، سيتم عرض النموذج ببيانات $salaryData

// لحساب صافي الراتب للعرض الأولي (GET)
$net_salary_display = ($salaryData['base_salary'] ?? 0) + ($salaryData['allowances'] ?? 0) - ($salaryData['deductions'] ?? 0);
?>

<div class="content-area">
    <div class="page-header">
        <h2 class="page-title"><?= $pageTitle ?></h2>
        <p class="page-subtitle">تعديل تفاصيل دفعة الراتب للموظف **<?= htmlspecialchars($salaryData['full_name'] ?? 'N/A') ?>** لشهر **<?= date('Y-m', strtotime($salaryData['payment_month'] ?? 'now')) ?>**.</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 $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_name" class="form-label">الموظف</label>
                        <input type="text" class="form-control" id="employee_name" 
                            value="<?= htmlspecialchars($salaryData['full_name'] ?? 'N/A') . ' (' . htmlspecialchars($salaryData['position'] ?? 'N/A') . ')' ?>" readonly>
                        <small class="form-text text-muted">لا يمكن تعديل الموظف أو الشهر من هنا.</small>
                    </div>

                    <div class="col-md-6">
                        <label for="payment_month_display" class="form-label">شهر الدفع</label>
                        <input type="text" class="form-control" id="payment_month_display" 
                            value="<?= date('Y-m', strtotime($salaryData['payment_month'] ?? 'now')) ?>" readonly>
                        <small class="form-text text-muted">الراتب الثابت للموظف هو: **<?= number_format($salaryData['current_employee_base_salary'] ?? 0, 2) ?>**</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="<?= htmlspecialchars($salaryData['base_salary'] ?? 0.00) ?>" oninput="calculateNetSalary()">
                    </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="<?= htmlspecialchars($salaryData['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="<?= htmlspecialchars($salaryData['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="<?= number_format($net_salary_display, 2) ?>">
                    </div>

                    <div class="col-md-6">
                        <label for="payment_method" class="form-label">طريقة الدفع</label>
                        <select class="form-control" id="payment_method" name="payment_method">
                            <?php $current_method = $salaryData['payment_method'] ?? 'تحويل بنكي'; ?>
                            <option value="تحويل بنكي" <?= ($current_method == 'تحويل بنكي') ? 'selected' : ''; ?>>تحويل بنكي</option>
                            <option value="نقداً" <?= ($current_method == 'نقداً') ? 'selected' : ''; ?>>نقداً</option>
                            <option value="شيك" <?= ($current_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"><?= htmlspecialchars($salaryData['notes'] ?? '') ?></textarea>
                    </div>

                    <div class="col-12 d-grid">
                        <button class="btn btn-primary btn-lg" type="submit">
                            <i class="fas fa-edit me-1"></i> حفظ تعديل الراتب
                        </button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
    // دالة لحساب صافي الراتب وتحديث حقل العرض
    function calculateNetSalary() {
        // نستخدم parseFloat مباشرة لتبسيط الكود، لأن القيم تم تحميلها بشكل صحيح كأرقام في PHP
        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, ","); 
    }
    
    // حساب صافي الراتب عند تحميل الصفحة
    document.addEventListener('DOMContentLoaded', function() {
        calculateNetSalary();
    });
    
    // تم حذف دالة updateSalaryFields لأن بيانات الموظف والشهر ثابتة ولا يمكن تغييرها أثناء التعديل
</script>

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