<?php
/**
 * v58 - Central state/cancel guard.
 * Prevents old numeric/text steps from swallowing unrelated menu commands.
 */
if(!function_exists('bot_state_cancel_texts')){
function bot_state_cancel_texts(){ return ['❌ لغو عملیات','❌ لغو','لغو','انصراف','کنسل','cancel','Cancel','🔙بازگشت به منوی ادمین','🔙 بازگشت به منوی ادمین','🔙بازگشت به منو','🔙 بازگشت به منو','🔙 بازگشت']; }
}
if(!function_exists('bot_state_is_cancel_text')){
function bot_state_is_cancel_text($msg){ return in_array(trim((string)$msg), bot_state_cancel_texts(), true); }
}
if(!function_exists('bot_state_menu_texts')){
function bot_state_menu_texts(){
    return [
        '/start','📈 آمار ربات','👤 جستجوی کاربر','📦 سفارش‌ها','📨 ارسال پیام','🎫 تیکت‌ها','🪙 سکه همگانی','👥 آمار رفرال','👥 رفرال‌گیری',
        '📌ثبت سفارش','📌 ثبت سفارش','🛍 مدیریت فروشگاه','📊 وضعیت ارسال همگانی','▶️ اجرای فوری صف همگانی','🚪 جریمه لفت','🔄 بررسی فوری لفت‌ها','💾 بکاپ دیتابیس','🧾 بکاپ تنظیمات','📥 ورود بکاپ',
        '⚙️ تنظیمات وب','🌐 پنل وب','🧰 ابزارهای سریع','👥 مشاهده پنل کاربران عادی','🚀 امکانات پیشرفته','📊 داشبورد پیشرفته','📦 مدیریت سفارش‌ها',
        '👥 سطح‌بندی کاربران','📣 اطلاعیه‌ها','📜 قوانین و راهنما','🧪 تست نصب','🔄 آپدیت و بازگشت','🧹 پاکسازی دیتابیس','🎫 پشتیبانی','پشتیبانی',
        '🛍 فروشگاه','🛍فروشگاه','فروشگاه','🏠 منوی اصلی','منوی اصلی'
    ];
}}
if(!function_exists('bot_state_is_menu_text')){
function bot_state_is_menu_text($msg){
    $m=trim((string)$msg); if($m==='') return false;
    if(function_exists('bot_is_menu_back_text') && bot_is_menu_back_text($m)) return true;
    if(function_exists('bot_is_admin_menu_back_text') && bot_is_admin_menu_back_text($m)) return true;
    if(function_exists('bot_admin_tools_is_panel_nav_text') && bot_admin_tools_is_panel_nav_text($m)) return true;
    return in_array($m, bot_state_menu_texts(), true);
}}
if(!function_exists('bot_state_clear')){
function bot_state_clear(&$user,$userID){
    if(!is_array($user)) $user=[];
    $user['step']='none';
    foreach(['pending_mass_coin_amount','pending_backup_import','pending_db_restore'] as $k) unset($user[$k]);
    if(function_exists('saveJson')) saveJson('melat/'.$userID.'.json',$user);
    elseif(function_exists('bot_data_put_json')) bot_data_put_json('melat/'.$userID.'.json',$user);
    $GLOBALS['step']='none';
    return true;
}}
if(!function_exists('bot_state_cancel_keyboard')){
function bot_state_cancel_keyboard($admin=false){
    $rows=[[['text'=>'❌ لغو عملیات']]];
    $rows[]=[['text'=>$admin?'🔙بازگشت به منوی ادمین':'🔙بازگشت به منو']];
    return json_encode(['keyboard'=>$rows,'resize_keyboard'=>true], JSON_UNESCAPED_UNICODE);
}}
if(!function_exists('bot_state_runtime_guard')){
function bot_state_runtime_guard(){
    global $msg,$Tc,$isAdmin,$chatID,$userID,$msg_id,$user,$step,$Button_Panel,$Button_Home;
    if((string)$Tc!=='private' || empty($userID) || !isset($msg)) return false;
    $cur = is_array($user) ? (string)($user['step'] ?? 'none') : 'none';
    if($cur==='' || $cur==='none' || $cur==='__callback_query_no_text__') return false;
    $m=trim((string)$msg);
    if(bot_state_is_cancel_text($m)){
        bot_state_clear($user,$userID); $step='none';
        if(!empty($isAdmin)) SM($chatID,'✅ عملیات لغو شد.','html',$msg_id,$Button_Panel);
        else SM($chatID,'✅ عملیات لغو شد.','html',$msg_id,$Button_Home);
        return true;
    }
    if(bot_state_is_menu_text($m)){
        bot_state_clear($user,$userID); $step='none';
        return false;
    }
    return false;
}}
