<?php
/**
 * config.php - ملف الإعدادات الرئيسي
 * الإصدار: 7.5 - مع دعم SMS Gateway
 */

error_reporting(E_ALL);
ini_set('display_errors', 1);

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

// بيانات الاتصال بقاعدة البيانات
define('DB_HOST', 'sql305.infinityfree.com');
define('DB_USER', 'if0_40375409');
define('DB_PASS', 'pDPSp6KEQfub');
define('DB_NAME', 'if0_40375409_aws');

// =============================================
// إعدادات SMS Gateway
// =============================================
define('SMS_ENABLED', true);
define('SMS_PROVIDER', 'ultramsg'); // ultramsg, twilio, vonage
define('SMS_INSTANCE_ID', 'instance168905');
define('SMS_API_TOKEN', 'ec6qnfll7uiz5467');
define('SMS_FROM_NUMBER', 'MaxRestaurant');
define('SMS_RETRY_ATTEMPTS', 3);
define('SMS_TIMEOUT', 15);

// =============================================
// إعدادات الأمان
// =============================================
define('MAX_LOGIN_ATTEMPTS', 5);
define('LOCKOUT_TIME', 900); // 15 دقيقة
define('SESSION_LIFETIME', 7200); // ساعتين
define('OTP_EXPIRY', 300); // 5 دقائق

// =============================================
// إعدادات الجلسة - يجب أن تكون قبل session_start()
// =============================================

// التحقق من عدم وجود جلسة نشطة قبل تغيير الإعدادات
if (session_status() === PHP_SESSION_NONE) {
    // تغيير إعدادات الجلسة فقط إذا لم تكن الجلسة قد بدأت
    ini_set('session.gc_maxlifetime', SESSION_LIFETIME);
    ini_set('session.cookie_lifetime', SESSION_LIFETIME);
    ini_set('session.cookie_httponly', 1);
    ini_set('session.use_only_cookies', 1);
    ini_set('session.cookie_secure', ENVIRONMENT === 'production');
    ini_set('session.cookie_samesite', 'Strict');
    
    // تعيين معاملات الكوكيز
    session_set_cookie_params([
        'lifetime' => SESSION_LIFETIME,
        'path' => '/',
        'domain' => '',
        'secure' => ENVIRONMENT === 'production',
        'httponly' => true,
        'samesite' => 'Strict'
    ]);
    
    // بدء الجلسة
    session_start();
}

// =============================================
// الاتصال بقاعدة البيانات (محسن)
// =============================================

// استخدام mysqli مع إعدادات محسنة
$conn = @new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

// التحقق من الاتصال
if ($conn->connect_error) {
    $error_message = 'فشل الاتصال بقاعدة البيانات: ' . $conn->connect_error;
    error_log($error_message);
    
    if (ENVIRONMENT === 'development') {
        die(json_encode(['success' => false, 'message' => $error_message]));
    } else {
        die(json_encode(['success' => false, 'message' => 'حدث خطأ في النظام. الرجاء المحاولة لاحقاً']));
    }
}

// تعيين الترميز
$conn->set_charset("utf8mb4");

// إعدادات الأداء
$conn->query("SET SESSION sql_mode = ''");
$conn->query("SET SESSION time_zone = '+03:00'");

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

// إعدادات المطعم الافتراضية
$settings = [
    'delivery_fee' => 10.00,
    'name' => 'مطعم Max',
    'phone' => '774052277',
    'whatsapp' => '774052277',
    'address' => 'ذمار - شارع رداع'
];

// جلب الإعدادات من قاعدة البيانات (مع التحقق من وجود الجدول)
try {
    $settings_result = $conn->query("SELECT * FROM settings LIMIT 1");
    if ($settings_result && $settings_result->num_rows > 0) {
        $db_settings = $settings_result->fetch_assoc();
        $settings = array_merge($settings, $db_settings);
    }
} catch (Exception $e) {
    logError("Settings table error: " . $e->getMessage());
}

// =============================================
// تعريف الثوابت الإضافية
// =============================================

// تعريف مسار الصور
define('UPLOADS_PATH', __DIR__ . '/uploads/');
define('UPLOADS_URL', 'http://' . $_SERVER['HTTP_HOST'] . '/max7/admin/uploads/');

// الصور الافتراضية (SVG مضغوطة لمنع الارتجاج)
define('DEFAULT_MEAL_IMAGE', 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 200"%3E%3Crect width="400" height="200" fill="%23FFF3E0"/%3E%3Ctext x="50%25" y="50%25" dominant-baseline="middle" text-anchor="middle" fill="%23F57C00" font-family="Tajawal" font-size="16"%3E🍔 لا توجد صورة%3C/text%3E%3C/svg%3E');
define('DEFAULT_SLIDER_IMAGE', 'data:image/svg+xml,%3Csvg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 400"%3E%3Crect width="1200" height="400" fill="%23F57C00"/%3E%3Ctext x="50%25" y="50%25" dominant-baseline="middle" text-anchor="middle" fill="white" font-family="Tajawal" font-size="32"%3Eماكس للمأكولات%3C/text%3E%3C/svg%3E');

// =============================================
// دوال مساعدة محسنة
// =============================================

function isLoggedIn() {
    return isset($_SESSION['customer_id']) && 
           isset($_SESSION['valid_session']) && 
           $_SESSION['valid_session'] === true &&
           isset($_SESSION['session_id']) &&
           $_SESSION['session_id'] === session_id();
}

function sanitize($input) {
    global $conn;
    if (is_array($input)) {
        return array_map('sanitize', $input);
    }
    return htmlspecialchars(trim($input), ENT_QUOTES, 'UTF-8');
}

function generateOTP($length = 6) {
    return str_pad(random_int(0, pow(10, $length) - 1), $length, '0', STR_PAD_LEFT);
}

function logError($message, $type = 'error') {
    $log_dir = __DIR__ . '/logs';
    if (!file_exists($log_dir)) {
        mkdir($log_dir, 0777, true);
    }
    $log_file = $log_dir . '/' . date('Y-m-d') . '.log';
    $timestamp = date('Y-m-d H:i:s');
    $log_message = "[$timestamp] [$type] $message" . PHP_EOL;
    file_put_contents($log_file, $log_message, FILE_APPEND);
    
    if (ENVIRONMENT === 'development') {
        error_log($message);
    }
}

function getMealPortions($conn, $meal_id) {
    $portions = [];
    try {
        $stmt = $conn->prepare("SELECT id, name, price FROM meal_portions WHERE meal_id = ? AND is_active = 1 ORDER BY price");
        if ($stmt) {
            $stmt->bind_param("i", $meal_id);
            $stmt->execute();
            $result = $stmt->get_result();
            while ($row = $result->fetch_assoc()) {
                $portions[] = $row;
            }
            $stmt->close();
        }
    } catch (Exception $e) {
        logError("Error getting portions: " . $e->getMessage());
    }
    return $portions;
}

// التحقق من وجود عمود sort_order في جدول sliders
function hasSortOrderColumn($conn) {
    try {
        $check = $conn->query("SHOW COLUMNS FROM sliders LIKE 'sort_order'");
        return $check && $check->num_rows > 0;
    } catch (Exception $e) {
        return false;
    }
}

/**
 * إرسال SMS باستخدام المزود المناسب
 */
function sendSms($phone, $message, $retry_count = 0) {
    if (!SMS_ENABLED) {
        logError("SMS is disabled", 'warning');
        return ['success' => false, 'error' => 'خدمة SMS معطلة'];
    }
    
    $phone = preg_replace('/[^0-9+]/', '', $phone);
    
    switch (SMS_PROVIDER) {
        case 'ultramsg':
            return sendSmsUltramsg($phone, $message, $retry_count);
        default:
            return ['success' => false, 'error' => 'مزود SMS غير مدعوم'];
    }
}

function sendSmsUltramsg($phone, $message, $retry_count = 0) {
    $ch = curl_init();
    
    curl_setopt_array($ch, [
        CURLOPT_URL => "https://api.ultramsg.com/" . SMS_INSTANCE_ID . "/messages/chat",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query([
            'token' => SMS_API_TOKEN,
            'to' => $phone,
            'body' => $message
        ]),
        CURLOPT_TIMEOUT => SMS_TIMEOUT,
        CURLOPT_SSL_VERIFYPEER => ENVIRONMENT === 'production'
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curlError = curl_error($ch);
    curl_close($ch);
    
    if ($curlError) {
        logError("SMS Curl Error: " . $curlError);
        return ['success' => false, 'error' => $curlError];
    }
    
    $decoded = json_decode($response, true);
    
    if ($httpCode === 200 && isset($decoded['sent']) && $decoded['sent'] === true) {
        return ['success' => true, 'response' => $decoded];
    }
    
    if ($retry_count < SMS_RETRY_ATTEMPTS) {
        sleep(2);
        return sendSmsUltramsg($phone, $message, $retry_count + 1);
    }
    
    return ['success' => false, 'error' => $decoded['error'] ?? 'فشل إرسال الرسالة'];
}

// =============================================
// تهيئة سلة المشتريات
// =============================================

if (!isset($_SESSION['cart']) || !is_array($_SESSION['cart'])) {
    $_SESSION['cart'] = [];
}

if (!isset($_SESSION['customer_name'])) {
    $_SESSION['customer_name'] = 'زائر';
}

if (!isset($_SESSION['valid_session'])) {
    $_SESSION['valid_session'] = false;
}

if (!isset($_SESSION['session_id'])) {
    $_SESSION['session_id'] = session_id();
}

// تنظيف الجلسات القديمة تلقائياً
register_shutdown_function(function() use ($conn) {
    if (mt_rand(1, 100) === 1) { // 1% chance
        $expired = time() - SESSION_LIFETIME;
        $stmt = $conn->prepare("DELETE FROM session_tracking WHERE last_activity < FROM_UNIXTIME(?)");
        if ($stmt) {
            $stmt->bind_param("i", $expired);
            $stmt->execute();
            $stmt->close();
        }
    }
});
?>