<?php
/**
 * config.php - تهيئة فائقة السرعة مع Multi-level Cache
 * @version 4.0.1
 */

// ============================================
// إعدادات الجلسة - يجب أن تكون في البداية
// ============================================

// إعدادات الجلسة قبل بدئها
ini_set('session.cookie_httponly', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.cookie_samesite', 'Lax');

// بدء الجلسة إذا لم تكن قد بدأت
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

// ============================================
// إعدادات الخادم
// ============================================

// تمكين الضغط الفوري
ini_set('zlib.output_compression', 'On');
ini_set('zlib.output_compression_level', 9);
ini_set('max_execution_time', 30);
ini_set('memory_limit', '256M');

// إعدادات الرأس
header('Content-Type: text/html; charset=utf-8');
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');

// إخفاء الأخطاء في الإنتاج (عدّل للتشخيص)
error_reporting(E_ALL);
ini_set('display_errors', 1);  // فعّل مؤقتاً للتشخيص

// ============================================
// إعدادات قاعدة البيانات
// ============================================

define('DB_HOST', 'sql305.infinityfree.com');
define('DB_USER', 'if0_40375409');
define('DB_PASS', 'pDPSp6KEQfub');
define('DB_NAME', 'if0_40375409_aws');

// Create connection with persistent connection
$conn = new mysqli('p:' . DB_HOST, DB_USER, DB_PASS, DB_NAME);

if ($conn->connect_error) {
    die(json_encode(['error' => 'Database connection failed']));
}

$conn->set_charset('utf8mb4');
$conn->query("SET SESSION sql_mode = ''");
$conn->query("SET SESSION group_concat_max_len = 1000000");

// ============================================
// دوال التحقق من الدخول
// ============================================

function checkAdminAuth() {
    if (!isset($_SESSION['admin_id'])) {
        header('Location: login.php');
        exit();
    }
}

function checkCustomerAuth() {
    if (!isset($_SESSION['customer_id'])) {
        header('Location: customer/login.php');
        exit();
    }
}

function isCustomerLoggedIn() {
    return isset($_SESSION['customer_id']);
}

function isAdminLoggedIn() {
    return isset($_SESSION['admin_id']);
}

// ============================================
// دوال الأمان
// ============================================

function e($str) {
    return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}

function isPost() {
    return $_SERVER['REQUEST_METHOD'] === 'POST';
}

function input($key, $default = '') {
    return $_POST[$key] ?? $_GET[$key] ?? $default;
}

// ============================================
// Advanced Multi-level Cache System
// ============================================

class CacheManager {
    private static $instance = null;
    private $use_apcu = false;
    private $cache_dir = '';
    private $memory_cache = [];
    
    private function __construct() {
        $this->use_apcu = function_exists('apcu_fetch');
        $this->cache_dir = __DIR__ . '/cache/';
        if (!file_exists($this->cache_dir)) {
            mkdir($this->cache_dir, 0777, true);
        }
    }
    
    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }
    
    public function get($key) {
        $key = md5($key);
        
        // L1: Memory cache
        if (isset($this->memory_cache[$key])) {
            $data = $this->memory_cache[$key];
            if ($data['expire'] > time()) {
                return $data['value'];
            }
            unset($this->memory_cache[$key]);
        }
        
        // L2: APCu cache
        if ($this->use_apcu) {
            $value = apcu_fetch($key);
            if ($value !== false) {
                $this->memory_cache[$key] = [
                    'expire' => time() + 60,
                    'value' => $value
                ];
                return $value;
            }
        }
        
        // L3: File cache
        $file = $this->cache_dir . $key . '.cache';
        if (file_exists($file)) {
            $data = unserialize(file_get_contents($file));
            if ($data['expire'] > time()) {
                $this->memory_cache[$key] = [
                    'expire' => time() + 60,
                    'value' => $data['value']
                ];
                return $data['value'];
            }
            unlink($file);
        }
        
        return null;
    }
    
    public function set($key, $value, $ttl = 300) {
        $key = md5($key);
        $expire = time() + $ttl;
        
        // L1: Memory cache
        $this->memory_cache[$key] = [
            'expire' => $expire,
            'value' => $value
        ];
        
        // L2: APCu cache
        if ($this->use_apcu) {
            apcu_store($key, $value, $ttl);
        }
        
        // L3: File cache
        $file = $this->cache_dir . $key . '.cache';
        $data = serialize([
            'expire' => $expire,
            'value' => $value
        ]);
        file_put_contents($file, $data, LOCK_EX);
        
        return true;
    }
    
    public function delete($key) {
        $key = md5($key);
        
        unset($this->memory_cache[$key]);
        
        if ($this->use_apcu) {
            apcu_delete($key);
        }
        
        $file = $this->cache_dir . $key . '.cache';
        if (file_exists($file)) {
            unlink($file);
        }
        
        return true;
    }
    
    public function clear() {
        $this->memory_cache = [];
        
        if ($this->use_apcu) {
            apcu_clear_cache();
        }
        
        $files = glob($this->cache_dir . '*.cache');
        foreach ($files as $file) {
            unlink($file);
        }
        
        return true;
    }
}

$cache = CacheManager::getInstance();

// ============================================
// Optimized Image Functions
// ============================================

function uploadImage($file) {
    $target_dir = "uploads/";
    if (!file_exists($target_dir)) {
        mkdir($target_dir, 0777, true);
    }
    
    // Validate
    $check = getimagesize($file['tmp_name']);
    if ($check === false) {
        return ['success' => false, 'message' => 'ملف غير صالح'];
    }
    
    if ($file['size'] > 5000000) {
        return ['success' => false, 'message' => 'حجم كبير جداً'];
    }
    
    $ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
    $allowed = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
    
    if (!in_array($ext, $allowed)) {
        return ['success' => false, 'message' => 'صيغة غير مدعومة'];
    }
    
    // Generate unique filename
    $filename = uniqid() . '_' . time() . '.' . $ext;
    $target = $target_dir . $filename;
    
    // Optimize image
    if ($ext == 'jpg' || $ext == 'jpeg') {
        $image = imagecreatefromjpeg($file['tmp_name']);
        imagejpeg($image, $target, 85);
        imagedestroy($image);
    } elseif ($ext == 'png') {
        $image = imagecreatefrompng($file['tmp_name']);
        imagepng($image, $target, 8);
        imagedestroy($image);
    } else {
        move_uploaded_file($file['tmp_name'], $target);
    }
    
    return ['success' => true, 'filename' => $filename];
}

function deleteImage($filename) {
    if ($filename && file_exists("uploads/" . $filename)) {
        return unlink("uploads/" . $filename);
    }
    return true;
}

// ============================================
// دوال قاعدة البيانات مع الكاش
// ============================================

function db_query($sql, $cache_ttl = 0) {
    global $conn, $cache;
    
    if ($cache_ttl > 0) {
        $result = $cache->get($sql);
        if ($result !== null) {
            return $result;
        }
    }
    
    $query = $conn->query($sql);
    $result = [];
    while ($row = $query->fetch_assoc()) {
        $result[] = $row;
    }
    
    if ($cache_ttl > 0) {
        $cache->set($sql, $result, $cache_ttl);
    }
    
    return $result;
}

function db_row($sql, $cache_ttl = 0) {
    $result = db_query($sql, $cache_ttl);
    return $result[0] ?? [];
}

function db_value($sql, $cache_ttl = 0) {
    $row = db_row($sql, $cache_ttl);
    return reset($row) ?? null;
}

// ============================================
// دوال الرد التلقائي
// ============================================

function getAutoReply($message) {
    $lower_msg = strtolower($message);
    
    $keywords = [
        ['تأخير', 'delay', 'متأخر', 'late', 'بطيء'],
        ['خطأ', 'غلط', 'error', 'wrong', 'مشكلة'],
        ['استرداد', 'refund', 'ارجاع', 'return', 'استعادة'],
        ['شكوى', 'complaint', 'تذمر'],
        ['طلب', 'order', 'اوردر', 'طلب']
    ];
    
    $replies = [
        "نأسف للتأخير. جاري التحقق من حالة طلبك.",
        "نعتذر عن الخطأ. سيتم تصحيح المشكلة فوراً.",
        "تم استلام طلب استرداد المبلغ. سيتم مراجعته والرد خلال 24 ساعة.",
        "نأسف للإزعاج. تم تحويل شكواك للمسؤول المختص.",
        "شكراً لتواصلك. سيتم الرد على استفسارك قريباً."
    ];
    
    for ($i = 0; $i < count($keywords); $i++) {
        foreach ($keywords[$i] as $keyword) {
            if (strpos($lower_msg, $keyword) !== false) {
                return $replies[$i];
            }
        }
    }
    
    return null;
}