<?php
/**
 * نظام الصلاحيات المتكامل
 * Comprehensive Permissions System
 */

// التحقق من تسجيل الدخول
function checkLogin() {
    if (!isset($_SESSION['user_id'])) {
        header('Location: index.php');
        exit();
    }
}

// التحقق من صلاحية معينة
function hasPermission($permission) {
    // المدير لديه كل الصلاحيات
    if (isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
        return true;
    }
    
    // التحقق من الصلاحية في الـ SESSION
    return isset($_SESSION[$permission]) && $_SESSION[$permission] == 1;
}

// التحقق من صلاحية الوصول للصفحة
function requirePermission($permission, $redirect = 'access_denied.php') {
    checkLogin();
    
    if (!hasPermission($permission)) {
        header("Location: $redirect");
        exit();
    }
}

// عرض عنصر HTML فقط إذا كان لديه الصلاحية
function showIfHasPermission($permission, $html) {
    if (hasPermission($permission)) {
        echo $html;
    }
}

// التحقق من عدة صلاحيات (يحتاج واحدة على الأقل)
function hasAnyPermission($permissions) {
    if (isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
        return true;
    }
    
    foreach ($permissions as $permission) {
        if (hasPermission($permission)) {
            return true;
        }
    }
    return false;
}

// التحقق من كل الصلاحيات (يحتاج كلها)
function hasAllPermissions($permissions) {
    if (isset($_SESSION['role']) && $_SESSION['role'] === 'admin') {
        return true;
    }
    
    foreach ($permissions as $permission) {
        if (!hasPermission($permission)) {
            return false;
        }
    }
    return true;
}

// إخفاء زرار أو عنصر بناءً على الصلاحية
function hideIfNoPermission($permission) {
    if (!hasPermission($permission)) {
        echo 'style="display: none;"';
    }
}

// تعطيل زرار بناءً على الصلاحية
function disableIfNoPermission($permission) {
    if (!hasPermission($permission)) {
        echo 'disabled title="ليس لديك صلاحية"';
    }
}

// الحصول على class CSS بناءً على الصلاحية
function getPermissionClass($permission, $hasClass = '', $noClass = 'disabled') {
    return hasPermission($permission) ? $hasClass : $noClass;
}

// عرض رسالة عدم وجود صلاحية
function showNoPermissionMessage($message = 'ليس لديك صلاحية للقيام بهذا الإجراء') {
    return '<div class="alert alert-warning" style="text-align: center; padding: 20px;">
                <i class="fas fa-lock" style="font-size: 48px; color: #ffc107; margin-bottom: 15px;"></i>
                <h4>⛔ ' . htmlspecialchars($message) . '</h4>
                <p><a href="index.php" class="btn btn-primary">العودة للصفحة الرئيسية</a></p>
            </div>';
}

// تحميل صلاحيات المستخدم في الـ SESSION
function loadUserPermissions($conn, $user_id) {
    try {
        $stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
        $stmt->execute([$user_id]);
        $user = $stmt->fetch(PDO::FETCH_ASSOC);
        
        if ($user) {
            // تحميل كل الصلاحيات في الـ SESSION
            $permissions = [
                'can_view_dashboard', 'can_view_records', 'can_add_records', 'can_edit_records', 'can_delete_records',
                'can_export', 'can_print', 'can_manage_users', 'can_manage_antibiotics', 'can_manage_patients',
                'can_view_reports', 'can_add_reports', 'can_edit_reports', 'can_delete_reports',
                'can_view_icu', 'can_manage_icu', 'can_view_pharmacy', 'can_manage_pharmacy', 'can_view_kpi',
                'can_access_advanced_search', 'can_view_activity_log', 'can_create_backup'
            ];
            
            foreach ($permissions as $perm) {
                $_SESSION[$perm] = $user[$perm] ?? 0;
            }
            
            // تحميل البيانات الأساسية
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['username'] = $user['username'];
            $_SESSION['full_name'] = $user['full_name'];
            $_SESSION['email'] = $user['email'];
            $_SESSION['role'] = $user['role'];
            $_SESSION['is_active'] = $user['is_active'];
            
            return true;
        }
        return false;
    } catch (Exception $e) {
        return false;
    }
}

// دالة للتحقق من الصلاحية وإرجاع HTML
function permissionButton($permission, $button_html, $disabled_html = '') {
    if (hasPermission($permission)) {
        return $button_html;
    } else {
        return $disabled_html ?: '';
    }
}

// دالة للتحقق من الصلاحية وإرجاع Link
function permissionLink($permission, $link_html, $disabled_html = '') {
    if (hasPermission($permission)) {
        return $link_html;
    } else {
        return $disabled_html ?: '<span style="color: #ccc; cursor: not-allowed;">' . strip_tags($link_html) . '</span>';
    }
}

// قائمة الصفحات والصلاحيات المطلوبة
function getPagePermissions() {
    return [
        'index.php' => 'can_view_dashboard',
        'admin_dashboard.php' => 'can_view_dashboard',
        'add_patient.php' => 'can_manage_patients',
        'edit_patient.php' => 'can_edit_records',
        'add_antibiotic.php' => 'can_manage_antibiotics',
        'edit_antibiotic.php' => 'can_edit_records',
        'add_user.php' => 'can_manage_users',
        'user_management.php' => 'can_manage_users',
        'complete_user_management.php' => 'can_manage_users',
        'activity_log.php' => 'can_view_activity_log',
        'advanced_search.php' => 'can_access_advanced_search',
        'key_performance_indicators.php' => 'can_view_kpi',
        'icu_management.php' => 'can_view_icu',
        'clinical_pharmacy_intervention.php' => 'can_view_pharmacy',
        'antibiotic_management_reports.php' => 'can_view_reports',
    ];
}

// التحقق من صلاحية الصفحة الحالية
function checkCurrentPagePermission() {
    $current_page = basename($_SERVER['PHP_SELF']);
    $page_permissions = getPagePermissions();
    
    if (isset($page_permissions[$current_page])) {
        requirePermission($page_permissions[$current_page]);
    }
}

// إنشاء زرار مع صلاحية
function createButton($permission, $text, $onclick = '', $class = 'btn-primary', $icon = '') {
    if (!hasPermission($permission)) {
        return '<button class="btn btn-secondary" disabled title="ليس لديك صلاحية">
                    ' . ($icon ? '<i class="' . $icon . '"></i> ' : '') . $text . ' 🔒
                </button>';
    }
    
    return '<button class="btn ' . $class . '" onclick="' . $onclick . '">
                ' . ($icon ? '<i class="' . $icon . '"></i> ' : '') . $text . '
            </button>';
}

// إنشاء رابط مع صلاحية
function createLink($permission, $text, $href, $class = '', $icon = '') {
    if (!hasPermission($permission)) {
        return '<span class="disabled-link" style="color: #ccc; cursor: not-allowed;" title="ليس لديك صلاحية">
                    ' . ($icon ? '<i class="' . $icon . '"></i> ' : '') . $text . ' 🔒
                </span>';
    }
    
    return '<a href="' . $href . '" class="' . $class . '">
                ' . ($icon ? '<i class="' . $icon . '"></i> ' : '') . $text . '
            </a>';
}

// عرض قائمة الصلاحيات للمستخدم الحالي (للتطوير)
function debugPermissions() {
    if (!isset($_SESSION['user_id'])) {
        return 'Not logged in';
    }
    
    echo '<div style="background: #f8f9fa; padding: 20px; border-radius: 10px; margin: 20px 0;">';
    echo '<h4>🔐 صلاحيات المستخدم الحالي:</h4>';
    echo '<p><strong>الاسم:</strong> ' . ($_SESSION['full_name'] ?? 'N/A') . '</p>';
    echo '<p><strong>الدور:</strong> ' . ($_SESSION['role'] ?? 'N/A') . '</p>';
    echo '<ul style="columns: 2;">';
    
    $permissions = [
        'can_view_dashboard' => 'عرض لوحة التحكم',
        'can_view_records' => 'عرض السجلات',
        'can_add_records' => 'إضافة سجلات',
        'can_edit_records' => 'تعديل السجلات',
        'can_delete_records' => 'حذف السجلات',
        'can_export' => 'تصدير',
        'can_print' => 'طباعة',
        'can_manage_users' => 'إدارة المستخدمين',
        'can_manage_antibiotics' => 'إدارة المضادات',
        'can_manage_patients' => 'إدارة المرضى',
        'can_view_reports' => 'عرض التقارير',
        'can_add_reports' => 'إضافة تقارير',
        'can_edit_reports' => 'تعديل التقارير',
        'can_delete_reports' => 'حذف التقارير',
        'can_view_icu' => 'عرض ICU',
        'can_manage_icu' => 'إدارة ICU',
        'can_view_pharmacy' => 'عرض الصيدلية',
        'can_manage_pharmacy' => 'إدارة الصيدلية',
        'can_view_kpi' => 'عرض KPI',
        'can_access_advanced_search' => 'بحث متقدم',
        'can_view_activity_log' => 'سجل النشاط',
        'can_create_backup' => 'نسخ احتياطي'
    ];
    
    foreach ($permissions as $key => $label) {
        $has = hasPermission($key);
        $icon = $has ? '✅' : '❌';
        echo '<li>' . $icon . ' ' . $label . '</li>';
    }
    
    echo '</ul>';
    echo '</div>';
}
?>

