<?php
/**
 * @file edit_role.php
 * @brief صفحة تعديل دور المستخدم وصلاحياته.
 * * هذه الصفحة تسمح للمسؤولين بتعديل اسم ووصف الدور، وتحديد/تعديل الصلاحيات المرتبطة به.
 * - يتم جلب الدور وصلاحياته الحالية.
 * - يتم عرض جميع الصلاحيات المتاحة مجمعة حسب الموديل.
 * - يمكن تحديد صلاحيات متعددة للدور.
 * - تتطلب صلاحية 'edit_roles' للوصول.
 */

$pageTitle = 'تعديل الدور';
include __DIR__ . '/../../includes/header.php';

// التحقق من الصلاحيات
checkLogin();
if (!hasPermission('edit_roles')) {
    $_SESSION['error_message'] = 'ليس لديك صلاحية لعرض هذه الصفحة.';
    header('Location: ' . SITE_URL . '/pages/errors/access_denied.php');
    exit();
}

$db = getDB();
$role_id = $_GET['id'] ?? null;
$errors = [];
$success_message = ''; // سيتم استخدام $_SESSION للرسائل لتجنب إعادة الإرسال

if (!$role_id) {
    $_SESSION['error_message'] = 'معرف الدور غير محدد.';
    header('Location: ' . SITE_URL . '/pages/roles/index.php');
    exit();
}

$role = $db->selectOne("SELECT * FROM roles WHERE id = ?", [$role_id]);

if (!$role) {
    $_SESSION['error_message'] = 'الدور غير موجود.';
    header('Location: ' . SITE_URL . '/pages/roles/index.php');
    exit();
}

// جلب جميع الصلاحيات المتاحة وتجميعها حسب الموديل
$all_permissions_raw = $db->select("SELECT * FROM permissions ORDER BY module ASC, permission_name ASC");
$permissions_by_module = [];
foreach ($all_permissions_raw as $perm) {
    $permissions_by_module[$perm['module']][] = $perm;
}

// جلب الصلاحيات الحالية للدور
$current_role_permissions = $db->select("SELECT permission_id FROM role_permissions WHERE role_id = ?", [$role_id]);
$current_permission_ids = array_column($current_role_permissions, 'permission_id');

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $role_name = $_POST['role_name'] ?? '';
    $description = $_POST['description'] ?? '';
    $selected_permissions = $_POST['permissions'] ?? [];

    if (empty($role_name)) {
        $errors[] = 'اسم الدور مطلوب.';
    }

    if (empty($errors)) {
        try {
            $db->beginTransaction();

            // تحديث معلومات الدور
            $db->update(
                "UPDATE roles SET role_name = ?, description = ? WHERE id = ?",
                [$role_name, $description, $role_id]
            );

            // تحديث صلاحيات الدور
            // حذف الصلاحيات القديمة
            $db->delete("DELETE FROM role_permissions WHERE role_id = ?", [$role_id]);

            // إضافة الصلاحيات الجديدة
            foreach ($selected_permissions as $permission_id) {
                // التأكد من أن permission_id رقم صحيح لمنع حقن SQL بسيطة
                if (filter_var($permission_id, FILTER_VALIDATE_INT)) {
                    $db->insert("INSERT INTO role_permissions (role_id, permission_id) VALUES (?, ?)", [$role_id, $permission_id]);
                }
            }

            $db->commit();
            $_SESSION['success_message'] = 'تم تعديل الدور والصلاحيات بنجاح.';
            header('Location: ' . SITE_URL . '/pages/roles/index.php');
            exit();
        } catch (Exception $e) {
            $db->rollBack();
            $errors[] = 'خطأ في قاعدة البيانات: ' . $e->getMessage();
            error_log("Error updating role permissions: " . $e->getMessage()); // تسجيل الخطأ للمراجعة
        }
    }
}

// إذا كان هناك أخطاء بعد الإرسال، استخدم القيم المرسلة بدلاً من القيم الأصلية للدور
// هذا يضمن الاحتفاظ بمدخلات المستخدم في حالة حدوث خطأ
if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($errors)) {
    $role_name = $_POST['role_name'] ?? $role['role_name'];
    $description = $_POST['description'] ?? $role['description'];
    $current_permission_ids = $_POST['permissions'] ?? $current_permission_ids;
} else {
    $role_name = $role['role_name'];
    $description = $role['description'];
}

?>

<div class="container-fluid py-4">
    <div class="row">
        <div class="col-lg-10 mx-auto">
            <div class="card shadow-lg border-0 rounded-3">
                <div class="card-header bg-gradient-primary text-white py-3 d-flex justify-content-between align-items-center rounded-top-3">
                    <h3 class="card-title mb-0 fw-bold fs-4">
                        <i class="fas fa-users-cog me-2"></i> <?php echo $pageTitle; ?>: 
                        <span class="text-warning"><?php echo htmlspecialchars($role['role_name']); ?></span>
                    </h3>
                    <a href="<?php echo SITE_URL; ?>/pages/roles/index.php" class="btn btn-light btn-sm"><i class="fas fa-arrow-right me-1"></i> العودة للأدوار</a>
                </div>
                <div class="card-body p-4">
                    <?php if (!empty($errors)): ?>
                        <div class="alert alert-danger alert-dismissible fade show" role="alert">
                            <h5 class="alert-heading fs-6"><i class="fas fa-exclamation-triangle me-2"></i> حدثت أخطاء:</h5>
                            <ul class="mb-0">
                                <?php foreach ($errors as $error): ?>
                                    <li><?php echo htmlspecialchars($error); ?></li>
                                <?php endforeach; ?>
                            </ul>
                            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
                        </div>
                    <?php endif; ?>

                    <form action="" method="POST">
                        <div class="mb-3">
                            <label for="role_name" class="form-label fw-bold">اسم الدور:</label>
                            <input type="text" class="form-control form-control-lg" id="role_name" name="role_name" value="<?php echo htmlspecialchars($role_name); ?>" required placeholder="ادخل اسم الدور">
                        </div>
                        <div class="mb-4">
                            <label for="description" class="form-label fw-bold">الوصف:</label>
                            <textarea class="form-control" id="description" name="description" rows="3" placeholder="وصف موجز للدور..."><?php echo htmlspecialchars($description); ?></textarea>
                        </div>

                        <h4 class="mb-3 fw-bold text-primary"><i class="fas fa-key me-2"></i> تحديد الصلاحيات:</h4>
                        <?php if (empty($permissions_by_module)): ?>
                            <div class="alert alert-info text-center py-4 rounded-3 shadow-sm">
                                <i class="fas fa-info-circle fa-2x text-info mb-3"></i>
                                <h5 class="mb-2">لا توجد صلاحيات معرفة في النظام بعد.</h5>
                                <p class="mb-0">يرجى إضافة صلاحيات لتمكين تحديدها للأدوار.</p>
                                <?php if (hasPermission('create_permissions')): ?>
                                    <a href="<?php echo SITE_URL; ?>/pages/permissions/index.php" class="btn btn-outline-info mt-3"><i class="fas fa-plus me-2"></i>إدارة الصلاحيات</a>
                                <?php endif; ?>
                            </div>
                        <?php else: ?>
                            <div class="row">
                                <?php foreach ($permissions_by_module as $module_name => $permissions): ?>
                                    <div class="col-lg-6 col-xl-4 mb-4">
                                        <div class="card h-100 shadow-sm border border-primary">
                                            <div class="card-header bg-primary-subtle py-3 d-flex align-items-center rounded-top-2">
                                                <h6 class="mb-0 text-primary fw-bold">
                                                    <i class="fas fa-cube me-2"></i> <?php echo htmlspecialchars(ucwords(str_replace('_', ' ', $module_name))); ?>
                                                </h6>
                                                <div class="form-check form-switch ms-auto">
                                                    <input class="form-check-input select-all-module" type="checkbox" 
                                                           id="select_all_<?php echo htmlspecialchars($module_name); ?>" 
                                                           data-module="<?php echo htmlspecialchars($module_name); ?>">
                                                    <label class="form-check-label" for="select_all_<?php echo htmlspecialchars($module_name); ?>">تحديد الكل</label>
                                                </div>
                                            </div>
                                            <div class="card-body py-3">
                                                <?php foreach ($permissions as $permission): ?>
                                                    <div class="form-check mb-2">
                                                        <input class="form-check-input permission-checkbox <?php echo htmlspecialchars($module_name); ?>-checkbox" 
                                                               type="checkbox" name="permissions[]" value="<?php echo $permission['id']; ?>" 
                                                               id="permission_<?php echo $permission['id']; ?>"
                                                               <?php echo in_array($permission['id'], $current_permission_ids) ? 'checked' : ''; ?>>
                                                        <label class="form-check-label d-block" for="permission_<?php echo $permission['id']; ?>">
                                                            <span class="fw-bold text-dark" style="font-size: 0.95em;"><?php echo htmlspecialchars($permission['description'] ?: $permission['permission_name']); ?></span>
                                                            <?php if ($permission['description'] && $permission['description'] !== $permission['permission_name']): ?>
                                                                <small class="text-muted d-block" style="font-size: 0.75em;">(<?php echo htmlspecialchars($permission['permission_name']); ?>)</small>
                                                            <?php endif; ?>
                                                        </label>
                                                    </div>
                                                <?php endforeach; ?>
                                            </div>
                                        </div>
                                    </div>
                                <?php endforeach; ?>
                            </div>
                        <?php endif; ?>

                        <div class="d-flex justify-content-end gap-3 mt-4">
                            <button type="submit" class="btn btn-success btn-lg px-4"><i class="fas fa-save me-2"></i>حفظ التعديلات</button>
                            <a href="<?php echo SITE_URL; ?>/pages/roles/index.php" class="btn btn-secondary btn-lg px-4"><i class="fas fa-times-circle me-2"></i>إلغاء</a>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </div>
</div>

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

<!-- JavaScript مخصص لتشغيل تحديد/إلغاء تحديد الكل للصلاحيات -->
<script>
document.addEventListener('DOMContentLoaded', function() {
    // وظيفة لتحديث حالة مربع "تحديد الكل" لوحدة معينة
    function updateSelectAllCheckbox(moduleName) {
        const moduleCheckboxes = document.querySelectorAll(`.${moduleName}-checkbox`);
        const selectAllCheckbox = document.getElementById(`select_all_${moduleName}`);
        
        if (moduleCheckboxes.length === 0) {
            if (selectAllCheckbox) selectAllCheckbox.checked = false; // لا يوجد عناصر لتحديدها
            return;
        }

        let allChecked = true;
        for (const checkbox of moduleCheckboxes) {
            if (!checkbox.checked) {
                allChecked = false;
                break;
            }
        }
        if (selectAllCheckbox) {
            selectAllCheckbox.checked = allChecked;
        }
    }

    // إضافة مستمع حدث لكل مربع "تحديد الكل"
    document.querySelectorAll('.select-all-module').forEach(function(selectAllCheckbox) {
        const moduleName = selectAllCheckbox.getAttribute('data-module');
        const moduleCheckboxes = document.querySelectorAll(`.${moduleName}-checkbox`);

        // عند تغيير حالة مربع "تحديد الكل" الخاص بالوحدة
        selectAllCheckbox.addEventListener('change', function() {
            const isChecked = this.checked;
            moduleCheckboxes.forEach(function(checkbox) {
                checkbox.checked = isChecked;
            });
        });

        // إضافة مستمع حدث لكل مربع صلاحية فردي داخل الوحدة
        moduleCheckboxes.forEach(function(checkbox) {
            checkbox.addEventListener('change', function() {
                updateSelectAllCheckbox(moduleName);
            });
        });

        // تحديث الحالة الأولية لمربع "تحديد الكل" عند تحميل الصفحة
        updateSelectAllCheckbox(moduleName);
    });
});
</script>
