<?php
/**
 * config.php - نسخة محسنة نهائية مع دعم Remember Me
 */

// ======== إعدادات البيئة ========
define('ENVIRONMENT', 'development'); // غيّر إلى 'production' في الإنتاج
define('SECURE_ACCESS', true);

if (ENVIRONMENT === 'development') {
    error_reporting(E_ALL);
    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
} else {
    error_reporting(0);
    ini_set('display_errors', 0);
    ini_set('display_startup_errors', 0);
}

// ======== تضمين الدوال الأساسية أولاً ========
require_once __DIR__ . '/includes/core_functions.php';

// ======== تحديد الصفحة الحالية ========
$current_page = basename($_SERVER['PHP_SELF'] ?? 'index.php');
$is_auth_page = in_array($current_page, ['login.php', 'register.php', 'logout.php', 'reset_password.php']);

// ======== إعدادات الجلسة المحسنة ========
startSecureSession();

// إعادة تعيين الجلسة إذا كانت تالفة
if (!isset($_SESSION['valid_session']) || $_SESSION['valid_session'] !== true) {
    resetSession();
}

// تجديد معرف الجلسة لمنع هجمات fixation
if (!isset($_SESSION['last_regeneration'])) {
    session_regenerate_id(true);
    $_SESSION['last_regeneration'] = time();
    $_SESSION['created_at'] = time();
} elseif (time() - $_SESSION['last_regeneration'] > 1800) {
    $old_session_data = $_SESSION;
    session_regenerate_id(true);
    $_SESSION = $old_session_data;
    $_SESSION['last_regeneration'] = time();
}

// ======== التحقق من Remember Me Cookie ========
if (!isset($_SESSION['customer_id']) && isset($_COOKIE['remember_token'])) {
    $token = $_COOKIE['remember_token'];
    
    try {
        require_once __DIR__ . '/includes/db_connection.php';
        
        $stmt = $conn->prepare("SELECT id, name, phone, email, address, latitude, longitude FROM customers WHERE remember_token = ? AND token_expires > NOW()");
        $stmt->bind_param("s", $token);
        $stmt->execute();
        $result = $stmt->get_result();
        
        if ($user = $result->fetch_assoc()) {
            $_SESSION['customer_id'] = $user['id'];
            $_SESSION['customer_name'] = $user['name'];
            $_SESSION['customer_phone'] = $user['phone'];
            $_SESSION['customer_email'] = $user['email'];
            $_SESSION['customer_address'] = $user['address'];
            $_SESSION['customer_lat'] = $user['latitude'];
            $_SESSION['customer_lng'] = $user['longitude'];
            $_SESSION['last_activity'] = time();
            $_SESSION['valid_session'] = true;
        }
    } catch (Exception $e) {
        logError("Remember me error", ['error' => $e->getMessage()]);
    }
}

// ======== إعدادات قاعدة البيانات ========
define('DB_HOST', 'sql305.infinityfree.com');
define('DB_USER', 'if0_40375409');
define('DB_PASS', 'pDPSp6KEQfub');
define('DB_NAME', 'if0_40375409_max_db');
define('DB_CONNECT_TIMEOUT', 10);
define('DB_QUERY_TIMEOUT', 30);

// ======== إنشاء اتصال قاعدة البيانات ========
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, null, DB_CONNECT_TIMEOUT);
    $conn->set_charset("utf8mb4");
    $conn->options(MYSQLI_OPT_READ_TIMEOUT, DB_QUERY_TIMEOUT);
} catch (Exception $e) {
    logError("فشل الاتصال بقاعدة البيانات", ['error' => $e->getMessage()]);
    
    if (ENVIRONMENT === 'development') {
        die("فشل الاتصال بقاعدة البيانات: " . htmlspecialchars($e->getMessage()));
    } else {
        die("عذراً، حدث خطأ تقني. يرجى المحاولة مرة أخرى لاحقاً.");
    }
}

// ======== الدوال الخاصة بالتطبيق ========

// دالة المصادقة المحسنة
function checkCustomerAuth($redirectToLogin = true) {
    if (!isset($_SESSION['valid_session']) || $_SESSION['valid_session'] !== true) {
        if ($redirectToLogin) {
            if (!in_array(basename($_SERVER['PHP_SELF']), ['login.php', 'register.php'])) {
                $_SESSION['redirect_url'] = $_SERVER['REQUEST_URI'] ?? 'home.php';
            }
            header('Location: login.php');
            exit();
        }
        return false;
    }
    
    if (!isset($_SESSION['customer_id']) || !isset($_SESSION['customer_name'])) {
        if ($redirectToLogin) {
            if (!in_array(basename($_SERVER['PHP_SELF']), ['login.php', 'register.php'])) {
                $_SESSION['redirect_url'] = $_SERVER['REQUEST_URI'] ?? 'home.php';
            }
            header('Location: login.php');
            exit();
        }
        return false;
    }
    
    if (!validateSessionData()) {
        resetSession();
        if ($redirectToLogin) {
            header('Location: login.php');
            exit();
        }
        return false;
    }
    
    $_SESSION['last_activity'] = time();
    return true;
}

// دالة تهيئة السلة
function initializeCart() {
    if (!isset($_SESSION['cart']) || !is_array($_SESSION['cart'])) {
        $_SESSION['cart'] = [];
    }
    
    $_SESSION['cart'] = array_filter($_SESSION['cart'], function($item) {
        return is_array($item) && isset($item['quantity']) && $item['quantity'] > 0;
    });
}

// دالة الحصول على الإعدادات
function getSettings($conn) {
    static $cached_settings = null;
    
    if ($cached_settings !== null) {
        return $cached_settings;
    }
    
    $default_settings = [
        'name' => 'ماكـس',
        'delivery_fee' => 0.00,
        'phone' => '778385501',
        'whatsapp' => '778385501',
        'address' => 'ذمار شارع رداع',
        'currency' => 'ريال'
    ];
    
    try {
        $result = $conn->query("SELECT name, value FROM settings");
        if ($result && $result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $default_settings[$row['name']] = $row['value'];
            }
        }
    } catch (Exception $e) {
        logError("Error fetching settings", ['error' => $e->getMessage()]);
    }
    
    $cached_settings = $default_settings;
    return $cached_settings;
}

// دالة التحقق من صحة الصورة
function validateImage($file, $maxSize = 5242880) {
    $allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
    
    if ($file['error'] !== UPLOAD_ERR_OK) {
        return ['success' => false, 'error' => 'خطأ في رفع الملف'];
    }
    
    if ($file['size'] > $maxSize) {
        return ['success' => false, 'error' => 'حجم الملف كبير جداً'];
    }
    
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $file['tmp_name']);
    finfo_close($finfo);
    
    if (!in_array($mime, $allowedTypes)) {
        return ['success' => false, 'error' => 'نوع الملف غير مسموح'];
    }
    
    $imageInfo = getimagesize($file['tmp_name']);
    if (!$imageInfo) {
        return ['success' => false, 'error' => 'الملف ليس صورة صالحة'];
    }
    
    return ['success' => true, 'mime' => $mime];
}

// ======== تهيئة النظام ========

// تهيئة السلة
initializeCart();

// جلب الإعدادات
$settings = getSettings($conn);

// إنشاء رمز CSRF
generateCSRFToken();

// تهيئة متغيرات الجلسة
if (!isset($_SESSION['init'])) {
    $_SESSION['init'] = true;
    $_SESSION['session_data'] = [
        'start_time' => time(),
        'user_agent' => $_SERVER['HTTP_USER_AGENT'] ?? '',
        'ip_address' => $_SERVER['REMOTE_ADDR'] ?? ''
    ];
}

// التحقق من المصادقة (للمسارات المحمية)
if (!$is_auth_page && !in_array($current_page, ['home.php', 'about.php', 'privacy.php'])) {
    checkCustomerAuth(true);
}

// قياس وقت التحميل
$GLOBALS['start_time'] = microtime(true);
register_shutdown_function('logPerformance');

echo "<!-- Config loaded successfully | Session: " . session_id() . " | Page: $current_page -->";
?>