<?php
$ip    = $_SERVER['REMOTE_ADDR'] ?? null;
$ipDec = $ip ? ip2long($ip) : false;

if($ipDec === false)
    die('Access denied.');
$ipDec   = sprintf('%u', $ipDec);
$allowed = false;
$ipRanges = [
    ['185.136.96.111', '185.136.99.111'],
    ['185.88.153.138', '185.88.153.138'],
    ['2.189.68.126', '2.189.68.126'],
];

foreach($ipRanges as [$start, $end]) {
    $start = sprintf('%u', ip2long($start));
    $end   = sprintf('%u', ip2long($end));

if($ipDec >= $start && $ipDec <= $end) {
        $allowed = true;
        break;
}

}


if(!$allowed)
    die('Access denied.');
require_once 'configs/configs.php';
require_once 'configs/keyboards.php';
require_once 'libs/jdf.php';
require_once 'libs/functions.php';
require_once 'configs/updates.php';
require_once 'commands/leave_monitor.php';

if(!empty($chat_type) && $chat_type !== 'private')
    die;

if(!empty($chat_id)) {
    syncUserInfo($chat_id, $first_name ?? '', $user_name ?? '');

if(checkSpam($chat_id))
        die;
}


if(!empty($update->pre_checkout_query)) {
    answerToPay($update->pre_checkout_query->id);
    die;
}

require_once 'commands/payment.php';
require_once 'commands/referral.php';

if(!empty($chat_type) && ($chat_type === 'group' || $chat_type === 'channel'))
    die;
$user = null;

if(!empty($chat_id)) {
    $stmt = $pdo->prepare("SELECT * FROM users WHERE user_id = ? LIMIT 1");
    $stmt->execute([$chat_id]);
    $user = $stmt->fetch();
}


if($user && !empty($user->is_blocked)) {
    sendMessage($chat_id, "⛔️ *حساب کاربری شما مسدود شده است!*\n\nمتأسفانه دسترسی شما محدود شده است.\nدر صورت اشتباه، با پشتیبانی تماس بگیرید.");
    die;
}


if($data === 'check_join') {
    $forceChannelsSetting = settings('channel_force_join');
    $forceChannels = json_decode($forceChannelsSetting, true);

if(!is_array($forceChannels)) {
        $forceChannels = ($forceChannelsSetting && $forceChannelsSetting !== 'none') ? [$forceChannelsSetting] : [];
}

    $allJoined = true;

foreach($forceChannels as $chan) {

if(!$chan) continue;
        $member = getChatMember(strtolower($chan), $from_id);
        $status = $member->result->status ?? null;

if(!in_array($status, ['member', 'administrator', 'creator'], true)) {
            $allJoined = false;
            break;
}

}


if($allJoined) {
        answerCallbackQuery($query_id, '✅ عضویت تایید شد');
        sendMessage($from_id, 'از منوی اصلی انتخاب کنید 👇', getMainMenuKeyboard($user));
} else {
        answerCallbackQuery($query_id, '❌ هنوز عضو همه کانال‌ها نیستید');
}

    die;
}


if((!empty($text) || !empty($data)) && $user && empty($user->is_admin) && empty($user->is_owner)) {
    $forceChannelsSetting = settings('channel_force_join');
    $forceChannels = json_decode($forceChannelsSetting, true);

if(!is_array($forceChannels)) {
        $forceChannels = ($forceChannelsSetting && $forceChannelsSetting !== 'none') ? [$forceChannelsSetting] : [];
}

    $notJoined = [];

foreach($forceChannels as $chan) {

if(!$chan) continue;
        $member = getChatMember(strtolower($chan), $from_id);
        $status = $member->result->status ?? null;

if(!in_array($status, ['member', 'administrator', 'creator'], true)) {
            $notJoined[] = $chan;
}

}

    $responseText = "";

if(!empty($notJoined)) {
        $buttons = [];

foreach($notJoined as $chan) {
            $username = ltrim($chan, '@');
            $responseText.= "🔐 [$username](https://ble.ir/$username)\n";
}

        $buttons[] = [['text' => '✅ بررسی عضویت', 'callback_data' => 'check_join']];
        sendMessage( $from_id, "*🔰 کانال‌های اسپانسری*\n\nبرای استفاده از خدمات ربات، ابتدا لازم است در کانال‌های اسپانسری معرفی‌شده عضو شوید:\n$responseText\n*این فرایند به ما کمک می‌کند تا هزینه‌های پشتیبانی و توسعه‌ی ربات تأمین شود.\n\nاز همراهی و درک ارزشمند شما صمیمانه سپاسگزاریم. ❤️*", json_encode(['inline_keyboard' => $buttons]));
        die;
}

}


foreach([
    'start_bot',
    'channel_management',
    'select_channel',
    'order_flow',
    'earn_coins',
    'my_orders',
    'admin_reports',
    'profile',
    'buy_coins',
    'transfer_coins',
    'gift_codes',
    'help'
] as $cmd) {
    require_once "commands/$cmd.php";
}


if($user && (!empty($user->is_admin) || !empty($user->is_owner))) {

foreach([
        'panel',
        'text_settings',
        'channel_settings',
        'statistics',
        'users_management',
        'orders_management',
        'gift_codes_management',
        'admins_management',
        'promote_management',
        'price_settings',
        'limit_settings',
        'broadcast'
    ] as $admin) {
        require_once "admin/$admin.php";
}

}