<?php
/** Rebuilt admin text settings for current simplified bot buttons. */

if (!function_exists('bot_text_settings_definitions')) {
    function bot_text_settings_definitions(){
        return [
            'starttext' => ['title'=>'🏠 متن شروع ربات','path'=>'lib/Button/starttext.txt','default'=>"سلام NAME عزیز 🌹\nبه ربات خوش آمدید.",'help'=>'متغیرها: NAME یا {NAME} ، LAST یا {LAST} ، USER یا {USER} ، ID یا {ID}'],
            'doktxt1' => ['title'=>'💎 متن دریافت الماس','path'=>'lib/Button/doktxt1.txt','default'=>"💎 به بخش دریافت الماس خوش آمدید.\nاز سفارش‌های فعال عضو شوید و پاداش بگیرید.",'help'=>'متن بالای بخش دریافت الماس'],
            'doktxt2' => ['title'=>'👤 متن حساب کاربری','path'=>'lib/Button/doktxt2.txt','default'=>'👤 اطلاعات حساب کاربری شما','help'=>'متن بخش حساب کاربری'],
            'doktxt3' => ['title'=>'✅ متن سفارش ممبر','path'=>'lib/Button/doktxt3.txt','default'=>'✅ نوع سفارش ممبر را انتخاب کنید.','help'=>'متن شروع ثبت سفارش ممبر'],
            'doktxt6' => ['title'=>'🔍 متن پیگیری سفارشات','path'=>'lib/Button/doktxt6.txt','default'=>'🔍 سفارش‌های خود را از این بخش پیگیری کنید.','help'=>'متن بخش پیگیری سفارشات'],
            'doktxt9' => ['title'=>'🛍 متن فروشگاه','path'=>'lib/Button/doktxt9.txt','default'=>'🛍 از فروشگاه می‌توانید بسته‌های الماس را خریداری کنید.','help'=>'متن ورودی فروشگاه کاربران'],
            'shop_help' => ['title'=>'📋 متن راهنمای خرید فروشگاه','path'=>'lib/Button/shop_help_text.txt','default'=>"📋 راهنمای خرید\n\nبسته موردنظر را انتخاب کنید و یکی از روش‌های پرداخت فعال را بزنید.",'help'=>'متن راهنمای فروشگاه'],
            'card_receipt' => ['title'=>'🏦 متن ارسال رسید کارت‌به‌کارت','path'=>'lib/Button/card_receipt_text.txt','default'=>'پس از واریز، عکس رسید یا کد پیگیری را ارسال کنید.','help'=>'متنی که در پرداخت کارت‌به‌کارت نمایش داده می‌شود'],
            'zibal_pay' => ['title'=>'💳 متن پرداخت زیبال','path'=>'lib/Button/zibal_pay_text.txt','default'=>'برای پرداخت آنلاین روی دکمه پرداخت بزنید.','help'=>'متن توضیح پرداخت آنلاین'],
            'doktxt4' => ['title'=>'👥 توضیحات بخش رفرال‌گیری','path'=>'lib/Button/doktxt4.txt','default'=>"📌 دریافت/نمایش بنر دعوت\n\n🎁 لینک دعوت اختصاصی شما آماده است.\nبرای دریافت بنر دعوت روی دکمه زیر بزنید.",'help'=>'متنی که وقتی کاربر دکمه رفرال‌گیری را می‌زند نمایش داده می‌شود. متغیرها: NAME، USER_ID، REF_LINK، REFERRAL_LINK'],
            'zirtext' => ['title'=>'🎁 متن بنر/لینک دعوت رفرال','path'=>'lib/Button/zirtext.txt','default'=>"🎁 لینک دعوت اختصاصی شما آماده شد!\n\nبا ارسال این لینک برای دوستانت، می‌تونی زیرمجموعه بگیری و الماس دریافت کنی:\n\n🔗 لینک دعوت:\nREF_LINK\n\n💎 هر کاربری که با لینک شما وارد ربات شود و مراحل عضویت را کامل انجام دهد، به‌عنوان زیرمجموعه شما ثبت می‌شود.",'help'=>'متغیرها: REF_LINK یا {REF_LINK}، REFERRAL_LINK یا {referral_link}، BOT_USERNAME، USER_ID'],
            'doktxt11' => ['title'=>'🌐 متن راهنما','path'=>'lib/Button/doktxt11.txt','default'=>"🌐 راهنما\n\nاز منوی ربات می‌توانید سفارش ثبت کنید، الماس دریافت کنید، حساب خود را ببینید و از بخش پشتیبانی پیام بفرستید.",'help'=>'متن دکمه راهنما/Startot. متغیرها: NAME، USER_ID، BALANCE، REF_LINK'],
            'doktxt0' => ['title'=>'🎁 متن کد هدیه','path'=>'lib/Button/doktxt0.txt','default'=>'🎁 کد هدیه خود را وارد کنید.','help'=>'متن بخش کد هدیه'],
            'forced_join' => ['title'=>'🔐 متن جوین اجباری','path'=>'lib/Button/forced_join_text.txt','default'=>"🔐 برای ادامه استفاده از ربات، ابتدا در کانال‌های زیر عضو شوید.\n\nCHANNELS\n\nبعد از عضویت، روی «عضو شدم» بزنید یا /start را ارسال کنید.",'help'=>'متغیرها: CHANNELS یا {CHANNELS}'],
            'no_balance' => ['title'=>'⚠️ متن موجودی ناکافی','path'=>'lib/Button/no_balance_text.txt','default'=>"❌ موجودی کافی نیست.\n\nهزینه سفارش: COST MONEY\nموجودی شما: BALANCE MONEY\n\nبرای شارژ حساب از فروشگاه استفاده کنید.",'help'=>'متغیرها: COST یا {COST} ، BALANCE یا {BALANCE} ، MONEY یا {MONEY}'],
            'order_confirm' => ['title'=>'📦 متن تأیید نهایی سفارش','path'=>'lib/Button/order_confirm_text.txt','default'=>'📦 پیش‌نمایش سفارش شما آماده است. آیا سفارش نهایی شود؟','help'=>'متن مرحله آخر ثبت سفارش'],
            'claim_success' => ['title'=>'✅ نوتیف دریافت موفق الماس','path'=>'lib/Button/claim_success_text.txt','default'=>'✅ الماس دریافت شد | +AMOUNT 💎 | موجودی: BALANCE','help'=>'متغیرها: AMOUNT یا {AMOUNT} ، BALANCE یا {BALANCE} ، MONEY یا {MONEY} ، ICMONEY یا {ICMONEY} ، ORDER_ID یا {ORDER_ID} ، CHANNEL یا {CHANNEL}'],
            'claim_already' => ['title'=>'♻️ نوتیف دریافت تکراری','path'=>'lib/Button/claim_already_text.txt','default'=>'❌ شما قبلاً MONEY این پست را دریافت کرده‌اید.','help'=>'متغیرها: MONEY یا {MONEY} ، ORDER_ID یا {ORDER_ID} ، CHANNEL یا {CHANNEL}'],
            'claim_join_order' => ['title'=>'📢 نوتیف عضو نبودن در کانال سفارش','path'=>'lib/Button/claim_join_order_text.txt','default'=>'‼️ ابتدا عضو کانال سفارش شوید، سپس دوباره دکمه دریافت MONEY را بزنید.','help'=>'متغیرها: MONEY یا {MONEY} ، ORDER_ID یا {ORDER_ID} ، CHANNEL یا {CHANNEL}'],
            'claim_join_main' => ['title'=>'📌 نوتیف عضو نبودن در کانال ممبرگیر','path'=>'lib/Button/claim_join_main_text.txt','default'=>'‼️ ابتدا در کانال ممبرگیر عضو شوید.','help'=>'متغیرها: MONEY یا {MONEY} ، ORDER_ID یا {ORDER_ID} ، CHANNEL یا {CHANNEL}'],
            'claim_cooldown' => ['title'=>'⏱ نوتیف فاصله دریافت مجدد','path'=>'lib/Button/claim_cooldown_text.txt','default'=>'❌ شما قبلاً برای REASON MONEY گرفته‌اید. دریافت مجدد بعد از DAYS روز مجاز است. زمان باقی‌مانده: REMAINING','help'=>'متغیرها: MONEY یا {MONEY} ، REASON یا {REASON} ، DAYS یا {DAYS} ، REMAINING یا {REMAINING} ، ORDER_ID یا {ORDER_ID} ، CHANNEL یا {CHANNEL}'],
            'claim_inactive' => ['title'=>'🚫 نوتیف سفارش غیرفعال','path'=>'lib/Button/claim_inactive_text.txt','default'=>'❌ این سفارش فعال نیست.','help'=>'متغیرها: MONEY یا {MONEY} ، ORDER_ID یا {ORDER_ID} ، CHANNEL یا {CHANNEL}'],
            'claim_not_found' => ['title'=>'🔎 نوتیف سفارش پیدا نشد','path'=>'lib/Button/claim_not_found_text.txt','default'=>'❌ سفارش یافت نشد یا حذف شده است.','help'=>'متغیرها: ORDER_ID یا {ORDER_ID}'],
            'claim_not_started' => ['title'=>'🤖 نوتیف استارت نکردن ربات','path'=>'lib/Button/claim_not_started_text.txt','default'=>'❌ ابتدا ربات را استارت کنید.','help'=>'متغیرها: MONEY یا {MONEY} ، ORDER_ID یا {ORDER_ID}'],
            'report_success' => ['title'=>'🚫 نوتیف ثبت گزارش تخلف','path'=>'lib/Button/report_success_text.txt','default'=>'✅ گزارش شما با موفقیت ثبت شد.','help'=>'متغیرها: ORDER_ID یا {ORDER_ID} ، REPORT_COUNT یا {REPORT_COUNT} ، THRESHOLD یا {THRESHOLD}'],
            'report_already' => ['title'=>'♻️ نوتیف گزارش تکراری','path'=>'lib/Button/report_already_text.txt','default'=>'❌ شما قبلاً این پست را گزارش داده‌اید.','help'=>'متغیرها: ORDER_ID یا {ORDER_ID}'],
        ];
    }
}
if (!function_exists('bot_text_settings_defs')) {
    function bot_text_settings_defs(){ return bot_text_settings_definitions(); }
}
if (!function_exists('bot_text_settings_get')) {
    function bot_text_settings_get($key){
        $defs=bot_text_settings_definitions(); if(!isset($defs[$key])) return '';
        $path=$defs[$key]['path']; $default=$defs[$key]['default'];
        if(function_exists('bot_data_file_exists') && bot_data_file_exists($path)){
            $v=function_exists('bot_data_get_text') ? bot_data_get_text($path,'') : (is_file($path)?file_get_contents($path):'');
            if(trim((string)$v)!=='') return (string)$v;
        }
        return $default;
    }
}
if (!function_exists('bot_text_settings_put')) {
    function bot_text_settings_put($key,$value){
        $defs=bot_text_settings_definitions(); if(!isset($defs[$key])) return false;
        $value=trim((string)$value); if($value==='') return false;
        if(function_exists('Save')) Save($defs[$key]['path'],$value); elseif(function_exists('bot_data_put_raw')) bot_data_put_raw($defs[$key]['path'],$value); else { $dir=dirname($defs[$key]['path']); if(!is_dir($dir))@mkdir($dir,0755,true); @file_put_contents($defs[$key]['path'],$value); }
        return true;
    }
}
if (!function_exists('bot_text_settings_reset_all')) { function bot_text_settings_reset_all(){ foreach(bot_text_settings_definitions() as $k=>$d) bot_text_settings_put($k,$d['default']); } }

if (!function_exists('bot_text_settings_normalize_vars')) {
    /**
     * Normalize template variables for admin-defined texts.
     * Supported in texts: AMOUNT, {AMOUNT}, {{AMOUNT}}, [AMOUNT], %AMOUNT%, $AMOUNT
     * Wrapped forms are case-insensitive: {amount}, {{amount}}, [amount], %amount%, $amount.
     */
    function bot_text_settings_normalize_vars(array $vars){
        $out = [];
        foreach($vars as $k=>$v){
            $key = strtoupper(trim((string)$k));
            $key = trim($key, "{}[]%\$ \t\n\r\0\x0B");
            if($key === '') continue;
            if(is_array($v) || is_object($v)) $v = json_encode($v, JSON_UNESCAPED_UNICODE);
            if($v === null) $v = '';
            $out[$key] = (string)$v;
        }
        if(isset($out['USER']) && !isset($out['USERNAME'])) $out['USERNAME'] = $out['USER'];
        if(isset($out['USERNAME']) && !isset($out['USER'])) $out['USER'] = $out['USERNAME'];
        if(isset($out['USER_ID']) && !isset($out['ID'])) $out['ID'] = $out['USER_ID'];
        if(isset($out['ID']) && !isset($out['USER_ID'])) $out['USER_ID'] = $out['ID'];
        if(isset($out['REF_LINK']) && !isset($out['INVITE_LINK'])) $out['INVITE_LINK'] = $out['REF_LINK'];
        if(isset($out['INVITE_LINK']) && !isset($out['REF_LINK'])) $out['REF_LINK'] = $out['INVITE_LINK'];
        if(isset($out['REF_LINK']) && !isset($out['REFERRAL_LINK'])) $out['REFERRAL_LINK'] = $out['REF_LINK'];
        if(isset($out['REFERRAL_LINK']) && !isset($out['REF_LINK'])) $out['REF_LINK'] = $out['REFERRAL_LINK'];
        if(isset($out['REF_LINK']) && !isset($out['LINK'])) $out['LINK'] = $out['REF_LINK'];
        if(isset($out['LINK']) && !isset($out['REFERRAL_LINK'])) $out['REFERRAL_LINK'] = $out['LINK'];
        return $out;
    }
}


if (!function_exists('bot_text_settings_extract_user_value')) {
    function bot_text_settings_extract_user_value($field){
        $field = (string)$field;
        $candidates = [];
        if(isset($GLOBALS[$field])) $candidates[] = $GLOBALS[$field];
        if($field === 'first_name' && isset($GLOBALS['first'])) $candidates[] = $GLOBALS['first'];
        if($field === 'last_name' && isset($GLOBALS['last'])) $candidates[] = $GLOBALS['last'];
        if(isset($GLOBALS['message']->from) && isset($GLOBALS['message']->from->{$field})) $candidates[] = $GLOBALS['message']->from->{$field};
        if(isset($GLOBALS['callback_query']->from) && isset($GLOBALS['callback_query']->from->{$field})) $candidates[] = $GLOBALS['callback_query']->from->{$field};
        if(isset($GLOBALS['update']->message->from) && isset($GLOBALS['update']->message->from->{$field})) $candidates[] = $GLOBALS['update']->message->from->{$field};
        if(isset($GLOBALS['update']->callback_query->from) && isset($GLOBALS['update']->callback_query->from->{$field})) $candidates[] = $GLOBALS['update']->callback_query->from->{$field};
        foreach($candidates as $v){
            if(is_scalar($v) && trim((string)$v) !== '') return trim((string)$v);
        }
        return '';
    }
}

if (!function_exists('bot_text_settings_user_vars')) {
    function bot_text_settings_user_vars(array $extra=[]){
        $first = bot_text_settings_extract_user_value('first_name');
        $last = bot_text_settings_extract_user_value('last_name');
        $username = bot_text_settings_extract_user_value('username');
        $userID = '';
        if(isset($GLOBALS['userID']) && trim((string)$GLOBALS['userID']) !== '') $userID = trim((string)$GLOBALS['userID']);
        elseif(isset($GLOBALS['message']->from->id)) $userID = trim((string)$GLOBALS['message']->from->id);
        elseif(isset($GLOBALS['callback_query']->from->id)) $userID = trim((string)$GLOBALS['callback_query']->from->id);
        elseif(isset($GLOBALS['chatID'])) $userID = trim((string)$GLOBALS['chatID']);
        $displayName = trim($first.' '.$last);
        if($displayName === '' && $username !== '') $displayName = ltrim($username, '@');
        if($displayName === '' && $userID !== '') $displayName = $userID;
        if($displayName === '') $displayName = 'کاربر';
        if($first === '') $first = $displayName;
        $botUsername = trim((string)($GLOBALS['boter_id'] ?? ($GLOBALS['bot_username'] ?? '')));
        $refLink = $botUsername !== '' && $userID !== '' ? 'https://t.me/'.$botUsername.'?start='.$userID : '';
        $balance = $GLOBALS['Points'] ?? '';
        if($balance === '' && isset($GLOBALS['user']) && is_array($GLOBALS['user'])) $balance = $GLOBALS['user']['Points'] ?? '';
        $vars = [
            'NAME'=>$displayName,
            'FULL_NAME'=>$displayName,
            'FULLNAME'=>$displayName,
            'FIRST'=>$first,
            'FIRST_NAME'=>$first,
            'LAST'=>$last,
            'LAST_NAME'=>$last,
            'USER'=>$username,
            'USERNAME'=>$username,
            'ID'=>$userID,
            'USER_ID'=>$userID,
            'BOT_USERNAME'=>$botUsername,
            'BOT_ID'=>$botUsername,
            'REF_LINK'=>$refLink,
            'REFERRAL_LINK'=>$refLink,
            'INVITE_LINK'=>$refLink,
            'LINK'=>$refLink,
            'MONEY'=>$GLOBALS['money'] ?? 'الماس',
            'MONY'=>$GLOBALS['money'] ?? 'الماس',
            'MONEY_UNIT'=>$GLOBALS['money'] ?? 'الماس',
            'ICMONEY'=>$GLOBALS['icmoney'] ?? '💎',
            'IC'=>$GLOBALS['icmoney'] ?? '💎',
            'ICON'=>$GLOBALS['icmoney'] ?? '💎',
            'BALANCE'=>$balance,
            'DATE'=>$GLOBALS['date'] ?? date('Y-m-d'),
            'TIME'=>date('H:i'),
        ];
        return bot_text_settings_normalize_vars(array_merge($vars, $extra));
    }
}

if (!function_exists('bot_text_settings_apply_vars')) {
    function bot_text_settings_apply_vars($text, array $vars){
        $text = (string)$text;
        // Always merge runtime user variables so templates like NAME / {NAME}
        // work in every text-setting and notification, even when the caller
        // only passes order-specific variables such as AMOUNT or ORDER_ID.
        $vars = function_exists('bot_text_settings_user_vars') ? bot_text_settings_user_vars($vars) : bot_text_settings_normalize_vars($vars);
        if(empty($vars)) return $text;
        uksort($vars, function($a,$b){ return strlen($b) <=> strlen($a); });
        foreach($vars as $key=>$value){
            $quoted = preg_quote($key, '/');
            $replace = function() use ($value){ return $value; };
            // Case-insensitive wrapped variables.
            $text = preg_replace_callback('/\{\{\s*'.$quoted.'\s*\}\}/iu', $replace, $text);
            $text = preg_replace_callback('/\{\s*'.$quoted.'\s*\}/iu', $replace, $text);
            $text = preg_replace_callback('/\[\s*'.$quoted.'\s*\]/iu', $replace, $text);
            $text = preg_replace_callback('/%\s*'.$quoted.'\s*%/iu', $replace, $text);
            $text = preg_replace_callback('/\$\s*'.$quoted.'\b/iu', $replace, $text);
            // Legacy bare variables such as NAME, AMOUNT and ORDER_ID.
            // The i flag lets admin texts use Name/name/name-like uppercase safely.
            $text = preg_replace_callback('/(?<![A-Z0-9_])'.$quoted.'(?![A-Z0-9_])/iu', $replace, $text);
        }
        return $text;
    }
}

if (!function_exists('bot_text_settings_referral_text')) {
    function bot_text_settings_referral_text($text, array $vars=[]){
        $raw = (string)$text;
        $vars = bot_text_settings_user_vars($vars);
        $rendered = bot_text_settings_apply_vars($raw, $vars);
        $hasLinkToken = preg_match('/(BOT_USERNAME|USER_ID|REF_LINK|REFERRAL_LINK|INVITE_LINK|\bLINK\b|referral_link|ble\.ir\/|t\.me\/)/iu', $raw);
        if(!$hasLinkToken && !empty($vars['REF_LINK'])) $rendered .= "

".$vars['REF_LINK'];
        return $rendered;
    }
}

if (!function_exists('bot_notif_text')) {
    function bot_notif_text($key, array $vars=[]){
        return bot_text_settings_apply_vars(bot_text_settings_get($key), bot_text_settings_user_vars($vars));
    }
}

if (!function_exists('bot_clean_legacy_display_text')) {
    /**
     * Cleans legacy placeholder leftovers from button labels and short visible texts.
     * Old builds used MONEY/IC in editable files; if they were not rendered, users saw
     * things like "دریافت mony ic" in channel posts. This function keeps runtime output clean.
     */
    function bot_clean_legacy_display_text($text, array $vars=[]){
        $text = (string)$text;
        if(function_exists('bot_text_settings_apply_vars')){
            $text = bot_text_settings_apply_vars($text, $vars);
        }
        $money = (string)($vars['MONEY'] ?? ($GLOBALS['money'] ?? 'الماس'));
        $icon = (string)($vars['ICMONEY'] ?? ($vars['IC'] ?? ($GLOBALS['icmoney'] ?? '💎')));
        if($money === '') $money = 'الماس';
        if($icon === '') $icon = '💎';
        $replacements = [
            '/\bMONEY\b/iu' => $money,
            '/\bMONY\b/iu' => $money,
            '/\bMONEY_UNIT\b/iu' => $money,
            '/\bICMONEY\b/iu' => $icon,
            '/\bICON\b/iu' => $icon,
            '/\bIC\b/iu' => $icon,
        ];
        foreach($replacements as $pattern=>$value){
            $text = preg_replace($pattern, $value, $text);
        }
        $text = preg_replace('/\s{2,}/u', ' ', $text);
        return trim((string)$text);
    }
}
if (!function_exists('bot_text_settings_panel_text')) {
    function bot_text_settings_panel_text(){ return "📇 **تنظیم متن‌های ربات**\n\nاین بخش بر اساس منوی فعلی ربات بازسازی شده است. متن‌های اصلی منوی کاربر، راهنما، رفرال، فروشگاه و نوتیف‌ها از همین بخش قابل تنظیم هستند.\n\nبرای بولد کردن متن کافی است متن را بین ** قرار دهید.

متغیرها را می‌توانید هم بدون آکولاد و هم با آکولاد بنویسید؛ مثلاً NAME یا {NAME}، AMOUNT یا {AMOUNT}."; }
}
if (!function_exists('bot_text_settings_panel_keyboard')) {
    function bot_text_settings_panel_keyboard(){
        $d=bot_text_settings_definitions();
        $rows=[
            [[ 'text'=>$d['starttext']['title'], 'callback_data'=>'bottext_edit_starttext' ]],
            [[ 'text'=>$d['doktxt1']['title'], 'callback_data'=>'bottext_edit_doktxt1' ],[ 'text'=>$d['doktxt2']['title'], 'callback_data'=>'bottext_edit_doktxt2' ]],
            [[ 'text'=>$d['doktxt3']['title'], 'callback_data'=>'bottext_edit_doktxt3' ],[ 'text'=>$d['order_confirm']['title'], 'callback_data'=>'bottext_edit_order_confirm' ]],
            [[ 'text'=>$d['doktxt6']['title'], 'callback_data'=>'bottext_edit_doktxt6' ],[ 'text'=>$d['doktxt9']['title'], 'callback_data'=>'bottext_edit_doktxt9' ]],
            [[ 'text'=>$d['shop_help']['title'], 'callback_data'=>'bottext_edit_shop_help' ],[ 'text'=>$d['card_receipt']['title'], 'callback_data'=>'bottext_edit_card_receipt' ]],
            [[ 'text'=>$d['zibal_pay']['title'], 'callback_data'=>'bottext_edit_zibal_pay' ]],
            [[ 'text'=>$d['doktxt4']['title'], 'callback_data'=>'bottext_edit_doktxt4' ],[ 'text'=>$d['zirtext']['title'], 'callback_data'=>'bottext_edit_zirtext' ]],
            [[ 'text'=>$d['doktxt11']['title'], 'callback_data'=>'bottext_edit_doktxt11' ],[ 'text'=>$d['doktxt0']['title'], 'callback_data'=>'bottext_edit_doktxt0' ]],
            [[ 'text'=>$d['forced_join']['title'], 'callback_data'=>'bottext_edit_forced_join' ],[ 'text'=>$d['no_balance']['title'], 'callback_data'=>'bottext_edit_no_balance' ]],
            [[ 'text'=>$d['claim_success']['title'], 'callback_data'=>'bottext_edit_claim_success' ], [ 'text'=>$d['claim_already']['title'], 'callback_data'=>'bottext_edit_claim_already' ]],
            [[ 'text'=>$d['claim_join_order']['title'], 'callback_data'=>'bottext_edit_claim_join_order' ], [ 'text'=>$d['claim_join_main']['title'], 'callback_data'=>'bottext_edit_claim_join_main' ]],
            [[ 'text'=>$d['claim_cooldown']['title'], 'callback_data'=>'bottext_edit_claim_cooldown' ], [ 'text'=>$d['claim_inactive']['title'], 'callback_data'=>'bottext_edit_claim_inactive' ]],
            [[ 'text'=>$d['claim_not_found']['title'], 'callback_data'=>'bottext_edit_claim_not_found' ], [ 'text'=>$d['claim_not_started']['title'], 'callback_data'=>'bottext_edit_claim_not_started' ]],
            [[ 'text'=>$d['report_success']['title'], 'callback_data'=>'bottext_edit_report_success' ], [ 'text'=>$d['report_already']['title'], 'callback_data'=>'bottext_edit_report_already' ]],
            [[ 'text'=>'♻️ ریست همه متن‌ها', 'callback_data'=>'bottext_reset_all' ]],
            [[ 'text'=>'🔙 بازگشت به پنل ادمین', 'callback_data'=>'admin_main_menu' ]],
        ];
        return json_encode(['inline_keyboard'=>$rows],JSON_UNESCAPED_UNICODE);
    }
}
if (!function_exists('bot_text_settings_edit_keyboard')) { function bot_text_settings_edit_keyboard($key){ return json_encode(['inline_keyboard'=>[[[ 'text'=>'♻️ ریست همین متن','callback_data'=>'bottext_reset_'.$key ]],[[ 'text'=>'🔙 برگشت به تنظیم متن','callback_data'=>'bottext_back' ]]]],JSON_UNESCAPED_UNICODE); } }
if (!function_exists('bot_text_settings_edit_text')) {
    function bot_text_settings_edit_text($key){
        $d=bot_text_settings_definitions();
        if(!isset($d[$key])) return '❌ گزینه پیدا نشد.';
        $cur=bot_text_settings_get($key);
        $preview=mb_substr((string)$cur,0,900,'UTF-8');
        return "✏️ **{$d[$key]['title']}**\n\nراهنما: {$d[$key]['help']}\n\nمتن فعلی:\n```\n{$preview}\n```\n\nمتن جدید را دقیقاً همان‌طور که می‌خواهید در نوتیف/پیام نمایش داده شود ارسال کنید. برای بولد از **متن** استفاده کنید. متغیرها را به شکل NAME یا {NAME}، AMOUNT یا {AMOUNT} بنویسید.";
    }
}
if (!function_exists('bot_text_settings_runtime_router')) {
    function bot_text_settings_runtime_router(){
        global $msg,$Tc,$isAdmin,$chatID,$data,$data_id,$msg_id,$user,$userID,$step,$Button_back_panel;
        if(empty($isAdmin) || (isset($Tc) && $Tc!=='private')) return false;
        if(isset($msg) && trim((string)$msg)==='📇 تنظیم متن'){
            if(isset($user)&&is_array($user)){ $user['step']='none'; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); }
            bot('sendMessage',['chat_id'=>$chatID,'text'=>bot_text_settings_panel_text(),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_panel_keyboard()]); return true;
        }
        if(isset($data) && (string)$data==='bottext_back'){
            if(isset($user)&&is_array($user)){ $user['step']='none'; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); }
            bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'تنظیم متن','show_alert'=>false]); bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_text_settings_panel_text(),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_panel_keyboard()]); return true;
        }
        if(isset($data) && preg_match('/^bottext_edit_([A-Za-z0-9_]+)$/',(string)$data,$m)){
            $key=$m[1]; $defs=bot_text_settings_definitions(); if(!isset($defs[$key])){bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'گزینه نامعتبر است.','show_alert'=>true]);return true;}
            $user['step']='bottext_set_'.$key; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'متن جدید را ارسال کنید','show_alert'=>false]); bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_text_settings_edit_text($key),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_edit_keyboard($key)]); return true;
        }
        if(isset($data) && preg_match('/^bottext_reset_([A-Za-z0-9_]+)$/',(string)$data,$m) && (string)$data!=='bottext_reset_all'){
            $key=$m[1]; $defs=bot_text_settings_definitions(); if(!isset($defs[$key])){bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'گزینه نامعتبر است.','show_alert'=>true]);return true;} bot_text_settings_put($key,$defs[$key]['default']); bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'ریست شد','show_alert'=>false]); bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_text_settings_edit_text($key),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_edit_keyboard($key)]); return true;
        }
        if(isset($data) && (string)$data==='bottext_reset_all'){ bot_text_settings_reset_all(); bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'همه متن‌ها ریست شدند','show_alert'=>false]); bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>"✅ همه متن‌ها ریست شدند.\n\n".bot_text_settings_panel_text(),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_panel_keyboard()]); return true; }
        if(isset($step) && preg_match('/^bottext_set_([A-Za-z0-9_]+)$/',(string)$step,$m) && isset($msg)){
            $key=$m[1]; $defs=bot_text_settings_definitions(); if(!isset($defs[$key])){ $user['step']='none'; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); return false; }
            $value=trim((string)$msg); if($value===''){ bot('sendMessage',['chat_id'=>$chatID,'text'=>'❌ متن خالی است. دوباره ارسال کنید.','parse_mode'=>'MarkDown','reply_markup'=>$Button_back_panel??null]); return true; }
            bot_text_settings_put($key,$value); $user['step']='none'; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); bot('sendMessage',['chat_id'=>$chatID,'text'=>'✅ متن ذخیره شد.','parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_panel_keyboard()]); return true;
        }
        if(isset($data) && preg_match('/^setm-(starttext|zirtext|doktxt[0-9]+)$/',(string)$data,$m)){
            $map=['starttext'=>'starttext','zirtext'=>'zirtext','doktxt1'=>'doktxt1','doktxt2'=>'doktxt2','doktxt3'=>'doktxt3','doktxt4'=>'doktxt4','doktxt6'=>'doktxt6','doktxt9'=>'doktxt9','doktxt11'=>'doktxt11','doktxt0'=>'doktxt0']; $key=$map[$m[1]]??null; if(!$key){bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'این متن مربوط به بخش حذف‌شده است.','show_alert'=>true]);return true;} $user['step']='bottext_set_'.$key; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_text_settings_edit_text($key),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_edit_keyboard($key)]); return true;
        }
        if(isset($data) && (string)$data==='settozihbaner-doktxt4'){ $user['step']='bottext_set_doktxt4'; if(function_exists('saveJson'))saveJson("melat/$userID.json",$user); bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'توضیحات رفرال را ارسال کنید','show_alert'=>false]); bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_text_settings_edit_text('doktxt4'),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_edit_keyboard('doktxt4')]); return true; }
        if(isset($data) && (string)$data==='backtexts'){ bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_text_settings_panel_text(),'parse_mode'=>'MarkDown','reply_markup'=>bot_text_settings_panel_keyboard()]); return true; }
        return false;
    }
}
