<?php
/**
 * core_functions.php - الدوال الأساسية للتطبيق
 */

// ======== دوال الجلسة ========

/**
 * بدء جلسة آمنة
 */
function startSecureSession() {
    if (session_status() === PHP_SESSION_NONE) {
        // إعدادات الجلسة المحسنة
        ini_set('session.cookie_httponly', 1);
        ini_set('session.use_only_cookies', 1);
        ini_set('session.cookie_secure', 0); // غير إلى 1 إذا كنت تستخدم HTTPS
        ini_set('session.cookie_samesite', 'Lax');
        ini_set('session.gc_maxlifetime', 604800); // 7 أيام
        
        session_start();
    }
}

/**
 * إعادة تعيين الجلسة
 */
function resetSession() {
    $_SESSION = [];
    
    if (ini_get("session.use_cookies")) {
        $params = session_get_cookie_params();
        setcookie(session_name(), '', time() - 42000,
            $params["path"], $params["domain"],
            $params["secure"], $params["httponly"]
        );
    }
    
    session_destroy();
    session_start();
    session_regenerate_id(true);
    
    $_SESSION['valid_session'] = true;
}

/**
 * التحقق من صحة بيانات الجلسة
 */
function validateSessionData() {
    if (!isset($_SESSION['user_agent']) || $_SESSION['user_agent'] !== ($_SERVER['HTTP_USER_AGENT'] ?? '')) {
        return false;
    }
    
    if (!isset($_SESSION['ip_address']) || $_SESSION['ip_address'] !== ($_SERVER['REMOTE_ADDR'] ?? '')) {
        return false;
    }
    
    if (isset($_SESSION['last_activity']) && (time() - $_SESSION['last_activity'] > 604800)) { // 7 أيام
        return false;
    }
    
    return true;
}

// ======== دوال CSRF ========

/**
 * إنشاء رمز CSRF
 */
function generateCSRFToken() {
    if (!isset($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
        $_SESSION['csrf_token_time'] = time();
    }
    return $_SESSION['csrf_token'];
}

/**
 * التحقق من رمز CSRF
 */
function validateCSRFToken($token) {
    if (!isset($_SESSION['csrf_token']) || $token !== $_SESSION['csrf_token']) {
        return false;
    }
    
    // التحقق من أن الرمز لم ينته (ساعة واحدة)
    if (isset($_SESSION['csrf_token_time']) && (time() - $_SESSION['csrf_token_time'] > 3600)) {
        return false;
    }
    
    return true;
}

// ======== دوال التنظيف والأمان ========

/**
 * تنظيف المدخلات
 */
function sanitizeInput($data) {
    if (is_array($data)) {
        return array_map('sanitizeInput', $data);
    }
    return htmlspecialchars(trim($data), ENT_QUOTES, 'UTF-8');
}

/**
 * إنشاء OTP
 */
function generateOTP($length = 6) {
    return str_pad(random_int(0, pow(10, $length) - 1), $length, '0', STR_PAD_LEFT);
}

/**
 * تسجيل الأخطاء
 */
function logError($message, $context = []) {
    $logFile = __DIR__ . '/../logs/error.log';
    $logDir = dirname($logFile);
    
    if (!file_exists($logDir)) {
        mkdir($logDir, 0777, true);
    }
    
    $timestamp = date('Y-m-d H:i:s');
    $contextStr = !empty($context) ? ' | ' . json_encode($context, JSON_UNESCAPED_UNICODE) : '';
    $logMessage = "[$timestamp] $message$contextStr" . PHP_EOL;
    
    file_put_contents($logFile, $logMessage, FILE_APPEND | LOCK_EX);
}

/**
 * تسجيل الأداء
 */
function logPerformance() {
    if (isset($GLOBALS['start_time'])) {
        $execution_time = microtime(true) - $GLOBALS['start_time'];
        if ($execution_time > 1) { // سجل فقط إذا تجاوزت ثانية واحدة
            logError("Slow page load", [
                'page' => $_SERVER['PHP_SELF'] ?? 'unknown',
                'time' => round($execution_time, 2) . 's'
            ]);
        }
    }
}

// ======== دوال التنسيق ========

/**
 * تنسيق التاريخ
 */
function formatDate($date, $format = 'Y/m/d') {
    if (!$date) return '';
    return date($format, strtotime($date));
}

/**
 * تنسيق الوقت
 */
function formatTime($date, $format = 'h:i A') {
    if (!$date) return '';
    return date($format, strtotime($date));
}

/**
 * تنسيق السعر
 */
function formatPrice($price, $currency = 'ريال') {
    return number_format($price, 2) . ' ' . $currency;
}

/**
 * اقتطاع النص
 */
function truncateText($text, $length = 100, $suffix = '...') {
    if (mb_strlen($text) <= $length) return $text;
    return mb_substr($text, 0, $length) . $suffix;
}
?>