<?php
/**
 * فحص جغرافي محلي - بدون APIs خارجية
 * يستخدم قاعدة بيانات IP سعودية محلية من RIPE
 * لا حدود على عدد الطلبات - يعمل بأي ضغط
 */

// لا تفحص index.php (صفحة الصيانة نفسها)
$currentPage = basename($_SERVER['SCRIPT_NAME']);
if ($currentPage === 'index.php') return;

if (session_status() === PHP_SESSION_NONE) { session_start(); }

// الحصول على IP الزائر الحقيقي
function getVisitorRealIP() {
    $headers = [
        'HTTP_CF_CONNECTING_IP',     // Cloudflare
        'HTTP_X_FORWARDED_FOR',      // Proxy
        'HTTP_X_REAL_IP',            // Nginx proxy
        'HTTP_CLIENT_IP',            // بعض البروكسيات
        'REMOTE_ADDR'                // الافتراضي
    ];
    
    foreach ($headers as $header) {
        if (!empty($_SERVER[$header])) {
            $ip = $_SERVER[$header];
            if (strpos($ip, ',') !== false) {
                $ip = trim(explode(',', $ip)[0]);
            }
            if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) {
                return $ip;
            }
        }
    }
    return $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';
}

// فحص إذا الـ IP سعودي باستخدام binary search (سريع جداً)
function checkSaudiIP($ip) {
    $ip_long = ip2long($ip);
    if ($ip_long === false) return false;
    
    // تحويل لـ unsigned
    $ip_num = sprintf('%u', $ip_long);
    $ip_num = (float)$ip_num;
    
    // تحميل قاعدة البيانات المحلية
    require(__DIR__ . '/sa-ip-ranges.php');
    
    // Binary search - أسرع من البحث العادي
    $low = 0;
    $high = count($sa_ip_ranges) - 1;
    
    while ($low <= $high) {
        $mid = intval(($low + $high) / 2);
        $range = $sa_ip_ranges[$mid];
        
        if ($ip_num < $range[0]) {
            $high = $mid - 1;
        } elseif ($ip_num > $range[1]) {
            $low = $mid + 1;
        } else {
            return true; // IP ضمن نطاق سعودي
        }
    }
    
    return false;
}

// تنفيذ الفحص
$visitor_ip = getVisitorRealIP();

// لو الـ IP تغير عن اللي بالـ session، أعد الفحص
if (!isset($_SESSION['geo_checked']) || !isset($_SESSION['geo_ip']) || $_SESSION['geo_ip'] !== $visitor_ip) {
    $_SESSION['geo_ip'] = $visitor_ip;
    $_SESSION['geo_is_sa'] = checkSaudiIP($visitor_ip);
    $_SESSION['geo_checked'] = true;
}

// لو مش سعودي = حوله لصفحة الصيانة
if (!$_SESSION['geo_is_sa']) {
    header('Location: /index.php');
    exit();
}
