<?php
$pageTitle = 'إدارة الصلاحيات';
include '../../includes/header.php';

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

$db = getDB();

// تهيئة متغيرات النموذج
$current_permission = [
    'id' => 0,
    'permission_name' => '',
    'description' => '',
    'module' => ''
];
$form_action_text = 'إضافة صلاحية جديدة';
$submit_button_text = 'إضافة الصلاحية';

// 1. معالجة طلبات الحذف
if (isset($_GET['delete_id']) && hasPermission('manage_permissions')) {
    $permission_id_to_delete = (int)$_GET['delete_id'];
    
    $linked_roles_count = $db->selectOne(
        "SELECT COUNT(*) as count FROM role_permissions WHERE permission_id = ?",
        [$permission_id_to_delete]
    )['count'];

    if ($linked_roles_count > 0) {
        $_SESSION['status_message'] = 'لا يمكن حذف هذه الصلاحية لأنها مرتبطة بأدوار حالية. قم بإلغاء ربطها أولاً.';
        $_SESSION['status_type'] = 'danger';
    } else {
        $result = $db->delete("DELETE FROM permissions WHERE id = ?", [$permission_id_to_delete]);
        
        if ($result) {
            $_SESSION['status_message'] = 'تم حذف الصلاحية بنجاح.';
            $_SESSION['status_type'] = 'success';
        } else {
            $_SESSION['status_message'] = 'حدث خطأ في حذف الصلاحية.';
            $_SESSION['status_type'] = 'danger';
        }
    }
    // بعد الحذف، أعد التوجيه إلى نفس الصفحة لتحديث عرض الجدول وإزالة معلمات GET
    header('Location: manage_permissions.php');
    exit();
}

// 2. معالجة طلبات التعديل (جلب البيانات للنموذج)
if (isset($_GET['edit_id']) && hasPermission('manage_permissions')) {
    $edit_id = (int)$_GET['edit_id'];
    $permission_to_edit = $db->selectOne("SELECT * FROM permissions WHERE id = ?", [$edit_id]);
    
    if ($permission_to_edit) {
        $current_permission = $permission_to_edit;
        $form_action_text = 'تعديل الصلاحية: ' . htmlspecialchars($current_permission['permission_name']);
        $submit_button_text = 'حفظ التعديلات';
    } else {
        $_SESSION['status_message'] = 'الصلاحية المطلوبة للتعديل غير موجودة.';
        $_SESSION['status_type'] = 'danger';
    }
}

// 3. معالجة إرسال النموذج (إضافة أو تعديل)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $permission_id = (int)$_POST['permission_id'];
    $permission_name = trim($_POST['permission_name']);
    $description = trim($_POST['description']);
    $module = trim($_POST['module']);

    $existing = $db->selectOne(
        "SELECT id FROM permissions WHERE permission_name = ? AND id != ?",
        [$permission_name, $permission_id]
    );

    if ($existing) {
        $_SESSION['status_message'] = 'اسم الصلاحية هذا موجود بالفعل.';
        $_SESSION['status_type'] = 'danger';
        // احتفظ بالقيم المدخلة في النموذج ليعيد المستخدم المحاولة
        $current_permission = [
            'id' => $permission_id,
            'permission_name' => $permission_name,
            'description' => $description,
            'module' => $module
        ];
    } else {
        try {
            if ($permission_id === 0) {
                $result = $db->insert(
                    "INSERT INTO permissions (permission_name, description, module) VALUES (?, ?, ?)",
                    [$permission_name, $description, $module]
                );
                if ($result) {
                    $_SESSION['status_message'] = 'تم إضافة الصلاحية بنجاح.';
                    $_SESSION['status_type'] = 'success';
                    // إعادة تعيين النموذج بعد الإضافة الناجحة
                    $current_permission = [
                        'id' => 0,
                        'permission_name' => '',
                        'description' => '',
                        'module' => ''
                    ];
                    $form_action_text = 'إضافة صلاحية جديدة';
                    $submit_button_text = 'إضافة الصلاحية';
                } else {
                    $_SESSION['status_message'] = 'حدث خطأ في إضافة الصلاحية: لم يتم الحفظ في قاعدة البيانات.';
                    $_SESSION['status_type'] = 'danger';
                }
            } else {
                $result = $db->update(
                    "UPDATE permissions SET permission_name = ?, description = ?, module = ? WHERE id = ?", 
                    [$permission_name, $description, $module, $permission_id]
                );
                if ($result) {
                    $_SESSION['status_message'] = 'تم تحديث الصلاحية بنجاح.';
                    $_SESSION['status_type'] = 'success';
                } else {
                    $_SESSION['status_message'] = 'حدث خطأ في تحديث الصلاحية: لم يتم الحفظ في قاعدة البيانات.';
                    $_SESSION['status_type'] = 'danger';
                }
            }
        } catch (Exception $e) {
            $_SESSION['status_message'] = 'حدث خطأ غير متوقع أثناء معالجة الصلاحية: ' . $e->getMessage();
            $_SESSION['status_type'] = 'danger';
            error_log("Exception during permission save: " . $e->getMessage());
        }
    }
}

// 4. إعدادات التقسيم إلى صفحات وميزة البحث
$limit = 10;
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$offset = ($page - 1) * $limit;

$search_query = isset($_GET['search']) ? trim($_GET['search']) : '';
$search_param = '%' . $search_query . '%';

$where_clause = '';
$params = [];
if (!empty($search_query)) {
    $where_clause = "WHERE permission_name LIKE ? OR description LIKE ? OR module LIKE ?";
    $params = [$search_param, $search_param, $search_param];
}

$total_permissions_count = $db->selectOne("SELECT COUNT(*) as count FROM permissions " . $where_clause, $params)['count'];
$total_pages = ceil($total_permissions_count / $limit);

$permissions = $db->select(
    "SELECT * FROM permissions " . $where_clause . " ORDER BY module, permission_name LIMIT ? OFFSET ?",
    array_merge($params, [$limit, $offset])
);

$search_get_param = !empty($search_query) ? '&search=' . urlencode($search_query) : '';
?>

<div class="content-area">
    <div class="page-header d-flex justify-content-between align-items-center">
        <div>
            <h2 class="page-title">إدارة الصلاحيات</h2>
            <p class="page-subtitle">إضافة، تعديل، وحذف الصلاحيات</p>
        </div>
        <div class="header-actions">
            <!-- هذا الزر يعيد تهيئة النموذج لإضافة صلاحية جديدة -->
            <a href="manage_permissions.php" class="btn btn-primary">
                <i class="fas fa-plus me-2"></i>إضافة صلاحية جديدة
            </a>
        </div>
    </div>

    <?php if (isset($_SESSION['status_message'])): ?>
        <div class="alert alert-<?php echo $_SESSION['status_type']; ?> alert-dismissible fade show" role="alert">
            <?php echo $_SESSION['status_message']; ?>
            <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
        </div>
        <?php 
        unset($_SESSION['status_message']);
        unset($_SESSION['status_type']);
        ?>
    <?php endif; ?>

    <div class="card mb-4">
        <div class="card-header">
            <h5 class="card-title mb-0"><?php echo $form_action_text; ?></h5>
        </div>
        <div class="card-body">
            <form action="manage_permissions.php" method="POST" class="row g-3">
                <input type="hidden" name="permission_id" value="<?php echo htmlspecialchars($current_permission['id']); ?>">
                
                <div class="col-md-6">
                    <label for="permission_name" class="form-label">الاسم الفريد للصلاحية (مثال: view_users)</label>
                    <input type="text" class="form-control" id="permission_name" name="permission_name" 
                           value="<?php echo htmlspecialchars($current_permission['permission_name']); ?>" required>
                </div>
                <div class="col-md-6">
                    <label for="module" class="form-label">فئة الصلاحية (مثال: users)</label>
                    <input type="text" class="form-control" id="module" name="module" 
                           value="<?php echo htmlspecialchars($current_permission['module']); ?>" required>
                </div>
                <div class="col-12">
                    <label for="description" class="form-label">وصف الصلاحية</label>
                    <textarea class="form-control" id="description" name="description" rows="3"><?php echo htmlspecialchars($current_permission['description']); ?></textarea>
                </div>
                <div class="col-12 mt-4">
                    <button type="submit" class="btn btn-primary">
                        <i class="fas fa-save me-2"></i><?php echo $submit_button_text; ?>
                    </button>
                    <?php if ($current_permission['id'] !== 0): ?>
                        <a href="manage_permissions.php" class="btn btn-outline-secondary ms-2">
                            <i class="fas fa-times me-2"></i>إلغاء التعديل
                        </a>
                    <?php endif; ?>
                </div>
            </form>
        </div>
    </div>

    <div class="card">
        <div class="card-header">
            <h5 class="card-title mb-0">قائمة الصلاحيات (إجمالي: <?php echo $total_permissions_count; ?>)</h5>
        </div>
        <div class="card-body">
            <div class="mb-3 d-flex justify-content-end">
                <form action="manage_permissions.php" method="GET" class="d-flex">
                    <input type="text" name="search" class="form-control me-2" placeholder="بحث..." value="<?php echo htmlspecialchars($search_query); ?>">
                    <button type="submit" class="btn btn-secondary"><i class="fas fa-search"></i></button>
                </form>
            </div>
            <div class="table-responsive">
                <table class="table table-bordered table-striped table-hover">
                    <thead>
                        <tr>
                            <th>الاسم الفريد</th>
                            <th>الوصف</th>
                            <th>الفئة</th>
                            <th>الإجراءات</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php if (is_array($permissions) && !empty($permissions)): ?>
                            <?php foreach ($permissions as $permission): ?>
                                <tr>
                                    <td><?php echo htmlspecialchars($permission['permission_name']); ?></td>
                                    <td><?php echo htmlspecialchars($permission['description']); ?></td>
                                    <td><?php echo htmlspecialchars($permission['module']); ?></td>
                                    <td>
                                        <a href="?edit_id=<?php echo $permission['id']; ?>" class="btn btn-sm btn-info me-2" title="تعديل">
                                            <i class="fas fa-edit"></i>
                                        </a>
                                        <a href="?delete_id=<?php echo $permission['id']; ?>" class="btn btn-sm btn-danger" title="حذف" onclick="return confirm('هل أنت متأكد من حذف هذه الصلاحية؟ سيتم إزالة الصلاحية من جميع الأدوار المرتبطة بها.')">
                                            <i class="fas fa-trash-alt"></i>
                                        </a>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        <?php else: ?>
                            <tr>
                                <td colspan="4" class="text-center">لا توجد صلاحيات لعرضها.</td>
                            </tr>
                        <?php endif; ?>
                    </tbody>
                </table>
            </div>
            
            <?php if ($total_pages > 1): ?>
                <nav>
                    <ul class="pagination justify-content-center">
                        <li class="page-item <?php echo ($page <= 1) ? 'disabled' : ''; ?>">
                            <a class="page-link" href="?page=<?php echo $page - 1; ?><?php echo $search_get_param; ?>">السابق</a>
                        </li>
                        <?php for ($i = 1; $i <= $total_pages; $i++): ?>
                            <li class="page-item <?php echo ($page == $i) ? 'active' : ''; ?>">
                                <a class="page-link" href="?page=<?php echo $i; ?><?php echo $search_get_param; ?>"><?php echo $i; ?></a>
                            </li>
                        <?php endfor; ?>
                        <li class="page-item <?php echo ($page >= $total_pages) ? 'disabled' : ''; ?>">
                            <a class="page-link" href="?page=<?php echo $page + 1; ?><?php echo $search_get_param; ?>">التالي</a>
                        </li>
                    </ul>
                </nav>
            <?php endif; ?>
            
        </div>
    </div>
</div>

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