<?php
// وظائف المصادقة وإدارة المستخدمين

// التحقق من تسجيل الدخول
function isLoggedIn() {
    return isset($_SESSION['user_id']);
}

// التحقق من صلاحيات المستخدم
function hasPermission($requiredRole) {
    if (!isLoggedIn()) {
        return false;
    }
    
    // إذا كان المستخدم مديرًا، فلديه جميع الصلاحيات
    if ($_SESSION['user_role'] === 'admin') {
        return true;
    }
    
    // التحقق من دور المستخدم
    return $_SESSION['user_role'] === $requiredRole;
}

// إعادة التوجيه إذا لم يكن المستخدم مسجل الدخول
function requireLogin() {
    if (!isLoggedIn()) {
        setAlert('warning', 'يرجى تسجيل الدخول للوصول إلى هذه الصفحة.');
        header('Location: ' . SITE_URL . '/login.php');
        exit;
    }
}

// إعادة التوجيه إذا لم يكن لدى المستخدم الصلاحيات المطلوبة
function requirePermission($requiredRole) {
    requireLogin();
    
    if (!hasPermission($requiredRole)) {
        setAlert('danger', 'ليس لديك صلاحية للوصول إلى هذه الصفحة.');
        header('Location: ' . SITE_URL . '/index.php');
        exit;
    }
}

// تسجيل الدخول
function login($username, $password) {
    $query = "SELECT * FROM users WHERE username = :username";
    $user = fetchOne($query, [':username' => $username]);
    
    if (!$user) {
        return false;
    }
    
    // التحقق من كلمة المرور
    if (password_verify($password, $user['password'])) {
        // تخزين معلومات المستخدم في الجلسة
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['user_name'] = $user['full_name'];
        $_SESSION['user_role'] = $user['role'];
        
        // تحديث وقت آخر تسجيل دخول
        $updateQuery = "UPDATE users SET last_login = CURRENT_TIMESTAMP WHERE id = :id";
        update($updateQuery, [':id' => $user['id']]);
        
        return true;
    }
    
    return false;
}

// تسجيل الخروج
function logout() {
    // حذف متغيرات الجلسة
    unset($_SESSION['user_id']);
    unset($_SESSION['user_name']);
    unset($_SESSION['user_role']);
    
    // إعادة تهيئة الجلسة
    session_destroy();
    
    // إعادة التوجيه إلى صفحة تسجيل الدخول
    header('Location: ' . SITE_URL . '/login.php');
    exit;
}

// إنشاء مستخدم جديد
function createUser($username, $password, $fullName, $email, $role) {
    // التحقق من وجود اسم المستخدم
    $query = "SELECT id FROM users WHERE username = :username";
    $existingUser = fetchOne($query, [':username' => $username]);
    
    if ($existingUser) {
        return ['success' => false, 'message' => 'اسم المستخدم موجود بالفعل.'];
    }
    
    // تشفير كلمة المرور
    $hashedPassword = password_hash($password, PASSWORD_DEFAULT);
    
    // إدخال المستخدم الجديد
    $query = "INSERT INTO users (username, password, full_name, email, role) VALUES (:username, :password, :full_name, :email, :role)";
    $params = [
        ':username' => $username,
        ':password' => $hashedPassword,
        ':full_name' => $fullName,
        ':email' => $email,
        ':role' => $role
    ];
    
    $userId = insert($query, $params);
    
    if ($userId) {
        return ['success' => true, 'user_id' => $userId];
    } else {
        return ['success' => false, 'message' => 'حدث خطأ أثناء إنشاء المستخدم.'];
    }
}

// تحديث كلمة المرور
function updatePassword($userId, $newPassword) {
    // تشفير كلمة المرور الجديدة
    $hashedPassword = password_hash($newPassword, PASSWORD_DEFAULT);
    
    // تحديث كلمة المرور
    $query = "UPDATE users SET password = :password WHERE id = :id";
    $params = [
        ':password' => $hashedPassword,
        ':id' => $userId
    ];
    
    $result = update($query, $params);
    
    return $result > 0;
}

// الحصول على معلومات المستخدم الحالي
function getCurrentUser() {
    if (!isLoggedIn()) {
        return null;
    }
    
    $query = "SELECT id, username, full_name, email, role, created_at, last_login FROM users WHERE id = :id";
    return fetchOne($query, [':id' => $_SESSION['user_id']]);
}

// الحصول على قائمة المستخدمين
function getUsers() {
    $query = "SELECT id, username, full_name, email, role, created_at, last_login FROM users ORDER BY id";
    return fetchAll($query);
}

// حذف مستخدم
function deleteUser($userId) {
    // لا يمكن حذف المستخدم الحالي
    if ($userId == $_SESSION['user_id']) {
        return ['success' => false, 'message' => 'لا يمكنك حذف حسابك الحالي.'];
    }
    
    $query = "DELETE FROM users WHERE id = :id";
    $result = delete($query, [':id' => $userId]);
    
    if ($result > 0) {
        return ['success' => true];
    } else {
        return ['success' => false, 'message' => 'حدث خطأ أثناء حذف المستخدم.'];
    }
}
