<?php
/**
 * Sponsor forced-join service.
 * Users can pay for a 24-hour sponsored forced-join channel via Zibal or card-to-card.
 */

if(!function_exists('bot_sponsor_html')){ function bot_sponsor_html($v){ return htmlspecialchars((string)$v, ENT_QUOTES, 'UTF-8'); } }
if(!function_exists('bot_sponsor_clean_int')){
    function bot_sponsor_clean_int($value){
        if(function_exists('bot_simple_clean_int')) return bot_simple_clean_int($value);
        $fa=['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹','٠','١','٢','٣','٤','٥','٦','٧','٨','٩'];
        $en=['0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9'];
        return (int)preg_replace('/[^0-9]/','',str_replace($fa,$en,(string)$value));
    }
}
if(!function_exists('bot_sponsor_money')){
    function bot_sponsor_money($amount){ return function_exists('bot_simple_format_money') ? bot_simple_format_money((int)$amount) : number_format((int)$amount).' ریال'; }
}
if(!function_exists('bot_sponsor_get_json')){
    function bot_sponsor_get_json($path, $default=[]){
        if(function_exists('bot_data_get_json')){ $v=bot_data_get_json($path,$default); return is_array($v)?$v:$default; }
        if(!is_file($path)) return $default;
        $v=json_decode((string)@file_get_contents($path),true); return is_array($v)?$v:$default;
    }
}
if(!function_exists('bot_sponsor_put_json')){
    function bot_sponsor_put_json($path, $data){
        if(function_exists('bot_data_put_json')) return bot_data_put_json($path,$data);
        if(function_exists('saveJson')){ saveJson($path,$data); return true; }
        $dir=dirname($path); if($dir && !is_dir($dir)) @mkdir($dir,0775,true);
        return @file_put_contents($path,json_encode($data,JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT),LOCK_EX)!==false;
    }
}
if(!function_exists('bot_sponsor_send')){
    function bot_sponsor_send($chatId, $text, $keyboard=null){
        if(function_exists('SM')) return SM($chatId,$text,'html',null,$keyboard);
        return bot('sendMessage',['chat_id'=>$chatId,'text'=>$text,'parse_mode'=>'HTML','reply_markup'=>$keyboard]);
    }
}
if(!function_exists('bot_sponsor_settings_file')){ function bot_sponsor_settings_file(){ return 'lib/kodam/sponsor_settings.json'; } }
if(!function_exists('bot_sponsor_orders_file')){ function bot_sponsor_orders_file(){ return 'cache/sponsor_orders.json'; } }

if(!function_exists('bot_sponsor_settings')){
    function bot_sponsor_settings(){
        $def=[
            'enabled'=>'✅فعال',
            'price'=>0,
            'duration_hours'=>24,
            'title'=>'اسپانسر جوین اجباری',
            'terms_text'=>'بعد از پرداخت هزینه، کانال شما به مدت ۲۴ ساعت در بخش جوین اجباری ربات قرار می‌گیرد. ابتدا ربات را داخل کانال خود ادمین کنید. اگر کانال شما مغایر قوانین باشد، هزینه پرداختی برگشت داده نمی‌شود.',
        ];
        $data=bot_sponsor_get_json(bot_sponsor_settings_file(),[]);
        if(!is_array($data)) $data=[];
        $out=array_merge($def,$data);
        $out['enabled']=((string)($out['enabled']??'')==='❌غیر فعال')?'❌غیر فعال':'✅فعال';
        $out['price']=(int)($out['price']??0);
        $out['duration_hours']=max(1,(int)($out['duration_hours']??24));
        return $out;
    }
}
if(!function_exists('bot_sponsor_save_settings')){
    function bot_sponsor_save_settings(array $data){
        $cur=bot_sponsor_settings();
        $out=array_merge($cur,$data);
        $out['enabled']=((string)($out['enabled']??'')==='❌غیر فعال')?'❌غیر فعال':'✅فعال';
        $out['price']=max(0,(int)($out['price']??0));
        $out['duration_hours']=max(1,(int)($out['duration_hours']??24));
        return bot_sponsor_put_json(bot_sponsor_settings_file(),$out);
    }
}
if(!function_exists('bot_sponsor_orders_read')){
    function bot_sponsor_orders_read(){
        $data=bot_sponsor_get_json(bot_sponsor_orders_file(),['orders'=>[]]);
        if(isset($data['orders']) && is_array($data['orders'])) return $data['orders'];
        return is_array($data)?$data:[];
    }
}
if(!function_exists('bot_sponsor_orders_write')){
    function bot_sponsor_orders_write(array $orders){ return bot_sponsor_put_json(bot_sponsor_orders_file(),['orders'=>$orders,'updated_at'=>time()]); }
}
if(!function_exists('bot_sponsor_order_get')){
    function bot_sponsor_order_get($id){ $orders=bot_sponsor_orders_read(); return isset($orders[$id]) && is_array($orders[$id]) ? $orders[$id] : null; }
}
if(!function_exists('bot_sponsor_order_save')){
    function bot_sponsor_order_save(array $order){
        $orders=bot_sponsor_orders_read();
        $id=(string)($order['id']??''); if($id==='') return false;
        $order['updated_at']=time();
        $orders[$id]=$order;
        if(count($orders)>1000) $orders=array_slice($orders,-1000,null,true);
        return bot_sponsor_orders_write($orders);
    }
}
if(!function_exists('bot_sponsor_new_order')){
    function bot_sponsor_new_order($userId, $method){
        $s=bot_sponsor_settings();
        $id='sp_'.date('YmdHis').'_'.mt_rand(1000,9999);
        $order=[
            'id'=>$id,
            'user_id'=>(string)$userId,
            'method'=>(string)$method,
            'amount'=>(int)$s['price'],
            'duration_hours'=>(int)$s['duration_hours'],
            'status'=>$method==='card'?'awaiting_card_receipt':'awaiting_zibal',
            'created_at'=>time(),
            'updated_at'=>time(),
            'channel_ref'=>'',
            'expires_at'=>0,
        ];
        bot_sponsor_order_save($order);
        return $order;
    }
}
if(!function_exists('bot_sponsor_user_text')){
    function bot_sponsor_user_text(){
        $s=bot_sponsor_settings();
        $price=(int)$s['price']; $dur=(int)$s['duration_hours'];
        return "🤝 <b>اسپانسر جوین اجباری</b>\n\n".
            "با این بخش می‌توانید کانال خود را به مدت <b>{$dur} ساعت</b> در قفل جوین اجباری ربات قرار دهید.\n\n".
            "💳 هزینه: <b>".bot_sponsor_html($price>0?bot_sponsor_money($price):'هنوز توسط ادمین تنظیم نشده')."</b>\n\n".
            "⚠️ <b>قوانین مهم:</b>\n".
            "• قبل از ثبت کانال، ربات را داخل کانال خود ادمین کنید.\n".
            "• بعد از پرداخت، آیدی یا یوزرنیم کانال را ارسال می‌کنید.\n".
            "• اگر کانال شما مغایر قوانین باشد، پول شما برگشت داده نمی‌شود.\n".
            "• مدت نمایش کانال در جوین اجباری از زمان ثبت موفق کانال محاسبه می‌شود.";
    }
}
if(!function_exists('bot_sponsor_user_keyboard')){
    function bot_sponsor_user_keyboard(){
        $rows=[];
        $s=bot_sponsor_settings();
        if((string)$s['enabled']==='✅فعال' && (int)$s['price']>0){
            if(function_exists('bot_simple_shop_method_enabled') && bot_simple_shop_method_enabled('zibal') && function_exists('bot_zibal_request_payment')) $rows[]=[[ 'text'=>'💳 پرداخت آنلاین زیبال', 'callback_data'=>'sponsor_pay_zibal' ]];
            if(function_exists('bot_simple_shop_method_enabled') && bot_simple_shop_method_enabled('card') && function_exists('bot_simple_shop_card_ready') && bot_simple_shop_card_ready()) $rows[]=[[ 'text'=>'🏦 کارت‌به‌کارت', 'callback_data'=>'sponsor_pay_card' ]];
        }
        $rows[]=[[ 'text'=>'🔙 بازگشت', 'callback_data'=>'sponsor_close' ]];
        return json_encode(['inline_keyboard'=>$rows],JSON_UNESCAPED_UNICODE);
    }
}
if(!function_exists('bot_sponsor_admin_text')){
    function bot_sponsor_admin_text(){
        $s=bot_sponsor_settings();
        $orders=bot_sponsor_orders_read();
        $active=0; $pending=0; $paid=0;
        foreach($orders as $o){
            if(!is_array($o)) continue;
            $st=(string)($o['status']??'');
            if($st==='active' && (int)($o['expires_at']??0)>time()) $active++;
            elseif(strpos($st,'awaiting')===0) $pending++;
            elseif($st==='paid_waiting_channel') $paid++;
        }
        return "🤝 <b>تنظیمات اسپانسر جوین اجباری</b>\n\n".
            "وضعیت: <b>".(((string)$s['enabled']==='✅فعال')?'فعال ✅':'غیرفعال ❌')."</b>\n".
            "هزینه فعلی: <b>".bot_sponsor_html((int)$s['price']>0?bot_sponsor_money((int)$s['price']):'تنظیم نشده')."</b>\n".
            "مدت نمایش: <b>".(int)$s['duration_hours']." ساعت</b>\n\n".
            "⏳ در انتظار پرداخت/رسید: <b>{$pending}</b>\n".
            "📝 پرداخت شده و منتظر ثبت کانال: <b>{$paid}</b>\n".
            "✅ اسپانسرهای فعال: <b>{$active}</b>";
    }
}
if(!function_exists('bot_sponsor_admin_keyboard')){
    function bot_sponsor_admin_keyboard(){
        $s=bot_sponsor_settings();
        return json_encode(['inline_keyboard'=>[
            [[ 'text'=>'💳 تنظیم هزینه اسپانسر', 'callback_data'=>'sponsor_set_price' ]],
            [[ 'text'=>(((string)$s['enabled']==='✅فعال')?'✅ خاموش کردن اسپانسر':'❌ روشن کردن اسپانسر'), 'callback_data'=>'sponsor_toggle' ]],
            [[ 'text'=>'📋 آخرین اسپانسرها', 'callback_data'=>'sponsor_list' ]],
            [[ 'text'=>'🔙 بازگشت به فروشگاه', 'callback_data'=>'simpadmin_shop' ]],
        ]],JSON_UNESCAPED_UNICODE);
    }
}
if(!function_exists('bot_sponsor_pay_url_keyboard')){
    function bot_sponsor_pay_url_keyboard($url){ return json_encode(['inline_keyboard'=>[[['text'=>'💳 پرداخت در زیبال','url'=>$url]],[['text'=>'🔙 برگشت','callback_data'=>'sponsor_open']]]],JSON_UNESCAPED_UNICODE); }
}
if(!function_exists('bot_sponsor_card_text')){
    function bot_sponsor_card_text(array $order){
        $c=function_exists('bot_simple_shop_card_settings')?bot_simple_shop_card_settings():['number'=>'','holder'=>'','bank'=>'','note'=>''];
        return "🏦 <b>پرداخت کارت‌به‌کارت اسپانسر</b>\n\n".
            "🆔 شماره سفارش: <code>".bot_sponsor_html($order['id'])."</code>\n".
            "💳 مبلغ: <b>".bot_sponsor_money((int)$order['amount'])."</b>\n\n".
            "💳 شماره کارت:\n<code>".bot_sponsor_html($c['number']??'')."</code>\n".
            "👤 نام گیرنده: <b>".bot_sponsor_html($c['holder']??'')."</b>\n".
            "🏛 بانک: <b>".bot_sponsor_html($c['bank']??'')."</b>\n\n".
            "بعد از واریز، عکس رسید یا کد پیگیری را همینجا ارسال کنید.";
    }
}

if(!function_exists('bot_sponsor_user_back_keyboard')){
    function bot_sponsor_user_back_keyboard(){
        return json_encode(['keyboard'=>[[['text'=>'🔙 بازگشت']]], 'resize_keyboard'=>true, 'one_time_keyboard'=>true], JSON_UNESCAPED_UNICODE);
    }
}

if(!function_exists('bot_sponsor_set_user_step')){
    function bot_sponsor_set_user_step($userId, $step, array $merge=[]){
        $u=bot_sponsor_get_json("melat/$userId.json",[]);
        if(!is_array($u)) $u=[];
        $u=array_merge($u,$merge);
        $u['step']=$step;
        return bot_sponsor_put_json("melat/$userId.json",$u);
    }
}
if(!function_exists('bot_sponsor_admin_ids')){
    function bot_sponsor_admin_ids(){
        global $admin,$main_admins;
        if(function_exists('bot_config_master_admin_ids')) $ids=bot_config_master_admin_ids(); else $ids=[];
        if(!is_array($ids)) $ids=[];
        if(!empty($admin)) $ids[]=(string)$admin;
        if(!empty($main_admins) && is_array($main_admins)) foreach($main_admins as $a) $ids[]=(string)$a;
        return array_values(array_unique(array_filter($ids,function($v){return trim((string)$v)!=='';})));
    }
}
if(!function_exists('bot_sponsor_receipt_review_keyboard')){
    function bot_sponsor_receipt_review_keyboard($id){ return json_encode(['inline_keyboard'=>[[['text'=>'✅ تأیید اسپانسر','callback_data'=>'sponsor_card_approve_'.$id],['text'=>'❌ رد رسید','callback_data'=>'sponsor_card_reject_'.$id]]]],JSON_UNESCAPED_UNICODE); }
}
if(!function_exists('bot_sponsor_receipt_review_text')){
    function bot_sponsor_receipt_review_text(array $order){
        return "🤝 <b>رسید کارت‌به‌کارت اسپانسر</b>\n\n".
            "🆔 سفارش: <code>".bot_sponsor_html($order['id']??'')."</code>\n".
            "👤 کاربر: <code>".bot_sponsor_html($order['user_id']??'')."</code>\n".
            "💳 مبلغ: <b>".bot_sponsor_money((int)($order['amount']??0))."</b>\n".
            "⏰ زمان: <code>".date('Y-m-d H:i:s',(int)($order['receipt_at']??time()))."</code>\n\n".
            "📎 رسید/کد پیگیری:\n<code>".bot_sponsor_html($order['receipt_value']??'')."</code>";
    }
}
if(!function_exists('bot_sponsor_notify_admins_receipt')){
    function bot_sponsor_notify_admins_receipt(array $order){
        $text=bot_sponsor_receipt_review_text($order); $kb=bot_sponsor_receipt_review_keyboard($order['id']);
        foreach(bot_sponsor_admin_ids() as $aid){ @bot('sendMessage',['chat_id'=>$aid,'text'=>$text,'parse_mode'=>'HTML','reply_markup'=>$kb]); }
        if(function_exists('bot_manual_receipt_channel_settings')){
            $s=bot_manual_receipt_channel_settings();
            if(($s['enabled']??'')==='✅فعال' && trim((string)($s['channel_id']??''))!=='') @bot('sendMessage',['chat_id'=>trim((string)$s['channel_id']),'text'=>$text,'parse_mode'=>'HTML','reply_markup'=>$kb]);
        }
    }
}
if(!function_exists('bot_sponsor_prompt_channel')){
    function bot_sponsor_prompt_channel(array $order){
        $uid=(string)($order['user_id']??''); if($uid==='') return false;
        bot_sponsor_set_user_step($uid,'sponsor_channel_'.$order['id']);
        return bot_sponsor_send($uid,"✅ پرداخت اسپانسر تأیید شد.\n\nحالا ربات را داخل کانال خود ادمین کنید، سپس آیدی یا یوزرنیم کانال را ارسال کنید.\n\nمثال: <code>@mychannel</code> یا <code>-1001234567890</code>");
    }
}
if(!function_exists('bot_sponsor_on_zibal_paid')){
    function bot_sponsor_on_zibal_paid($trackId, array $payment, array $verify=[]){
        $meta=is_array($payment['meta']??null)?$payment['meta']:[];
        $id=(string)($meta['sponsor_order_id']??'');
        if($id==='') return ['ok'=>false,'reason'=>'missing_sponsor_order_id'];
        $order=bot_sponsor_order_get($id);
        if(!$order) return ['ok'=>false,'reason'=>'order_not_found','id'=>$id];
        if(in_array((string)($order['status']??''),['active','paid_waiting_channel'],true)) return ['ok'=>true,'already'=>true,'id'=>$id];
        $order['status']='paid_waiting_channel';
        $order['paid_at']=time();
        $order['trackId']=(string)$trackId;
        $order['verify']=$verify;
        bot_sponsor_order_save($order);
        bot_sponsor_prompt_channel($order);
        return ['ok'=>true,'id'=>$id,'status'=>'paid_waiting_channel'];
    }
}
if(!function_exists('bot_sponsor_register_channel')){
    function bot_sponsor_register_channel($userId, $orderId, $channelRef){
        $order=bot_sponsor_order_get($orderId);
        if(!$order || (string)($order['user_id']??'') !== (string)$userId) return ['ok'=>false,'error'=>'order_not_found'];
        if(!in_array((string)($order['status']??''),['paid_waiting_channel','active'],true)) return ['ok'=>false,'error'=>'not_paid'];
        if(function_exists('normalize_bale_channel_username')) $ref=normalize_bale_channel_username($channelRef); else $ref=trim((string)$channelRef);
        if($ref==='' || (function_exists('is_valid_bale_channel_username') && !is_valid_bale_channel_username($ref))) return ['ok'=>false,'error'=>'invalid_channel'];
        if(function_exists('bale_channel_is_blocked') && bale_channel_is_blocked($ref)) return ['ok'=>false,'error'=>'blocked_channel'];
        if(function_exists('bale_bot_channel_status')){
            $check=bale_bot_channel_status($ref);
            if(empty($check['admin'])) return ['ok'=>false,'error'=>'bot_not_admin','detail'=>$check];
        }
        $expires=time()+((int)($order['duration_hours']??24)*3600);
        $title='اسپانسر تا '.(function_exists('jdate')?jdate('Y/m/d H:i',$expires):date('Y-m-d H:i',$expires));
        $ok=function_exists('bale_forced_join_channel_add_sponsor') ? bale_forced_join_channel_add_sponsor($ref,$title,$orderId,$userId,$expires) : (function_exists('bale_forced_join_channel_add') ? bale_forced_join_channel_add($ref,$title,true) : false);
        if(!$ok) return ['ok'=>false,'error'=>'save_failed'];
        $order['status']='active'; $order['channel_ref']=$ref; $order['activated_at']=time(); $order['expires_at']=$expires;
        bot_sponsor_order_save($order);
        bot_sponsor_set_user_step($userId,'none');
        foreach(bot_sponsor_admin_ids() as $aid){ @bot('sendMessage',['chat_id'=>$aid,'text'=>"✅ اسپانسر جدید فعال شد.\n👤 کاربر: <code>{$userId}</code>\n📢 کانال: <code>".bot_sponsor_html($ref)."</code>\n⏰ اعتبار تا: <code>".(function_exists('jdate')?jdate('Y/m/d H:i',$expires):date('Y-m-d H:i',$expires))."</code>",'parse_mode'=>'HTML']); }
        return ['ok'=>true,'expires_at'=>$expires,'ref'=>$ref];
    }
}
if(!function_exists('bot_sponsor_orders_list_text')){
    function bot_sponsor_orders_list_text(){
        $orders=array_reverse(bot_sponsor_orders_read(), true); $lines=["📋 <b>آخرین اسپانسرها</b>"]; $i=0;
        foreach($orders as $o){ if(!is_array($o)) continue; $i++; if($i>15) break; $lines[]="\n{$i}) <code>".bot_sponsor_html($o['id']??'')."</code> — ".bot_sponsor_html($o['status']??'')."\n👤 ".bot_sponsor_html($o['user_id']??'')." | 💳 ".bot_sponsor_money((int)($o['amount']??0))."\n📢 ".bot_sponsor_html($o['channel_ref']??'ثبت نشده'); }
        if($i===0) $lines[]='هنوز سفارشی ثبت نشده است.';
        return implode("\n",$lines);
    }
}
if(!function_exists('bot_sponsor_runtime_router')){
    function bot_sponsor_runtime_router(){
        global $msg,$data,$chatID,$userID,$user,$step,$isAdmin,$Tc,$data_id,$msg_id,$Button_back_panel,$Button_Home;
        $text=trim((string)($msg??'')); $cb=isset($data)?(string)$data:'';
        $adminCardCallback = !empty($isAdmin) && preg_match('/^sponsor_card_(approve|reject)_/', $cb);
        if((!isset($Tc) || (string)$Tc!=='private') && !$adminCardCallback) return false;
        if($text==='🔙 بازگشت' && preg_match('/^sponsor_/', (string)($step??''))){
            bot_sponsor_set_user_step($userID, 'none');
            bot_sponsor_send($chatID, 'به منوی اصلی برگشتی.', $Button_Home);
            return true;
        }
        $s=bot_sponsor_settings();

        if($text==='🤝 اسپانسر' || $text==='اسپانسر' || $cb==='sponsor_open'){
            if($cb && !empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'اسپانسر','show_alert'=>false]);
            bot_sponsor_send($chatID, bot_sponsor_user_text(), bot_sponsor_user_keyboard()); return true;
        }
        if($cb==='sponsor_close'){
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'بازگشت','show_alert'=>false]);
            bot_sponsor_send($chatID,'به منوی اصلی برگشتی.',$Button_Home); return true;
        }
        if($isAdmin && $cb==='sponsor_admin'){
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'اسپانسر','show_alert'=>false]);
            bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_sponsor_admin_text(),'parse_mode'=>'HTML','reply_markup'=>bot_sponsor_admin_keyboard()]); return true;
        }
        if($isAdmin && $cb==='sponsor_toggle'){
            bot_sponsor_save_settings(['enabled'=>((string)$s['enabled']==='✅فعال'?'❌غیر فعال':'✅فعال')]);
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'وضعیت تغییر کرد','show_alert'=>false]);
            bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_sponsor_admin_text(),'parse_mode'=>'HTML','reply_markup'=>bot_sponsor_admin_keyboard()]); return true;
        }
        if($isAdmin && $cb==='sponsor_set_price'){
            $user['step']='sponsor_admin_price'; bot_sponsor_put_json("melat/$userID.json",$user);
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'مبلغ را ارسال کنید','show_alert'=>false]);
            bot_sponsor_send($chatID,'💳 هزینه اسپانسر ۲۴ ساعته را به ریال ارسال کنید.',$Button_back_panel); return true;
        }
        if($isAdmin && $cb==='sponsor_list'){
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'لیست','show_alert'=>false]);
            bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_sponsor_orders_list_text(),'parse_mode'=>'HTML','reply_markup'=>bot_sponsor_admin_keyboard()]); return true;
        }
        if($isAdmin && (string)($step??'')==='sponsor_admin_price' && $text!==''){
            $amount=bot_sponsor_clean_int($text);
            if($amount<=0){ bot_sponsor_send($chatID,'❌ مبلغ معتبر نیست. عدد ریالی بفرست.',$Button_back_panel); return true; }
            bot_sponsor_save_settings(['price'=>$amount]); $user['step']='none'; bot_sponsor_put_json("melat/$userID.json",$user);
            bot_sponsor_send($chatID,'✅ هزینه اسپانسر ذخیره شد: <b>'.bot_sponsor_money($amount).'</b>',bot_sponsor_admin_keyboard()); return true;
        }
        if($cb==='sponsor_pay_zibal'){
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'ساخت لینک پرداخت','show_alert'=>false]);
            if((string)$s['enabled']!=='✅فعال' || (int)$s['price']<=0){ bot_sponsor_send($chatID,'❌ اسپانسر فعلاً فعال یا قیمت‌گذاری نشده است.',bot_sponsor_user_keyboard()); return true; }
            $order=bot_sponsor_new_order($userID,'zibal');
            $res=function_exists('bot_zibal_request_payment') ? bot_zibal_request_payment($userID,(int)$order['amount'],'اسپانسر جوین اجباری ۲۴ ساعته','', 'sponsor', 0, ['sponsor_order_id'=>$order['id'],'duration_hours'=>$order['duration_hours']]) : ['ok'=>false,'error'=>'zibal_missing'];
            if(empty($res['ok'])){ $order['status']='failed_zibal_request'; $order['zibal_error']=$res; bot_sponsor_order_save($order); bot_sponsor_send($chatID,'❌ ساخت لینک پرداخت انجام نشد.\nکد خطا: <code>'.bot_sponsor_html($res['error']??'unknown').'</code>',bot_sponsor_user_keyboard()); return true; }
            $order['trackId']=(string)($res['trackId']??$res['track_id']??''); $order['payment_url']=(string)($res['payment_url']??''); bot_sponsor_order_save($order);
            bot_sponsor_send($chatID,"💳 پرداخت اسپانسر\n\nمبلغ: <b>".bot_sponsor_money((int)$order['amount'])."</b>\nبعد از پرداخت موفق، آیدی کانال را از شما می‌گیریم.",bot_sponsor_pay_url_keyboard($order['payment_url'])); return true;
        }
        if($cb==='sponsor_pay_card'){
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'کارت‌به‌کارت','show_alert'=>false]);
            if((string)$s['enabled']!=='✅فعال' || (int)$s['price']<=0){ bot_sponsor_send($chatID,'❌ اسپانسر فعلاً فعال یا قیمت‌گذاری نشده است.',bot_sponsor_user_keyboard()); return true; }
            if(!function_exists('bot_simple_shop_card_ready') || !bot_simple_shop_card_ready()){ bot_sponsor_send($chatID,'❌ کارت‌به‌کارت هنوز تنظیم نشده است.',bot_sponsor_user_keyboard()); return true; }
            $order=bot_sponsor_new_order($userID,'card'); bot_sponsor_set_user_step($userID,'sponsor_card_receipt_'.$order['id']);
            bot_sponsor_send($chatID,bot_sponsor_card_text($order),bot_sponsor_user_back_keyboard()); return true;
        }
        if(preg_match('/^sponsor_card_receipt_(sp_[A-Za-z0-9_]+)$/',(string)($step??''),$m)){
            $id=$m[1]; $order=bot_sponsor_order_get($id); if(!$order){ bot_sponsor_set_user_step($userID,'none'); return false; }
            $receipt=$text;
            if(isset($GLOBALS['message']->photo) && is_array($GLOBALS['message']->photo)){ $last=end($GLOBALS['message']->photo); $receipt='photo:'.($last->file_id??''); }
            elseif(isset($GLOBALS['message']->document->file_id)){ $receipt='document:'.$GLOBALS['message']->document->file_id; }
            if(trim((string)$receipt)===''){ bot_sponsor_send($chatID,'❌ رسید معتبر دریافت نشد. عکس رسید یا کد پیگیری را بفرست.',bot_sponsor_user_back_keyboard()); return true; }
            $order['status']='awaiting_card_review'; $order['receipt_value']=(string)$receipt; $order['receipt_at']=time(); bot_sponsor_order_save($order); bot_sponsor_set_user_step($userID,'none');
            bot_sponsor_notify_admins_receipt($order);
            bot_sponsor_send($chatID,'✅ رسید اسپانسر ثبت شد و برای بررسی ادمین ارسال شد. بعد از تأیید، امکان ثبت کانال برای شما باز می‌شود.',$Button_Home); return true;
        }
        if($isAdmin && preg_match('/^sponsor_card_(approve|reject)_(sp_[A-Za-z0-9_]+)$/',$cb,$m)){
            $act=$m[1]; $id=$m[2]; $order=bot_sponsor_order_get($id);
            if(!$order){ if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'سفارش پیدا نشد','show_alert'=>true]); return true; }
            if($act==='reject'){
                $order['status']='rejected'; $order['review_admin']=(string)$userID; $order['reviewed_at']=time(); bot_sponsor_order_save($order);
                if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'رد شد','show_alert'=>false]);
                @bot('sendMessage',['chat_id'=>$order['user_id'],'text'=>'❌ رسید اسپانسر شما رد شد.']);
                bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_sponsor_receipt_review_text($order).'\n\n❌ رد شد.','parse_mode'=>'HTML']); return true;
            }
            $order['status']='paid_waiting_channel'; $order['paid_at']=time(); $order['review_admin']=(string)$userID; $order['reviewed_at']=time(); bot_sponsor_order_save($order);
            if(function_exists('bot_payment_event_log_append')) bot_payment_event_log_append(['source'=>'sponsor_card','id'=>'sponsor_card_'.$id,'user_id'=>$order['user_id'],'amount'=>(int)$order['amount'],'reward_amount'=>0,'description'=>'اسپانسر جوین اجباری','type'=>'sponsor','status'=>'paid','paid_at'=>time(),'raw_payment'=>$order]);
            bot_sponsor_prompt_channel($order);
            if(!empty($data_id)) bot('answercallbackquery',['callback_query_id'=>$data_id,'text'=>'تأیید شد','show_alert'=>false]);
            bot('editMessageText',['chat_id'=>$chatID,'message_id'=>$msg_id,'text'=>bot_sponsor_receipt_review_text($order).'\n\n✅ تأیید شد و کاربر برای ثبت کانال راهنمایی شد.','parse_mode'=>'HTML']); return true;
        }
        if(preg_match('/^sponsor_channel_(sp_[A-Za-z0-9_]+)$/',(string)($step??''),$m) && $text!==''){
            $res=bot_sponsor_register_channel($userID,$m[1],$text);
            if(empty($res['ok'])){
                $err=(string)($res['error']??'unknown');
                $msgErr='❌ کانال ثبت نشد.';
                if($err==='invalid_channel') $msgErr='❌ آیدی/یوزرنیم کانال معتبر نیست. مثال: @mychannel';
                elseif($err==='bot_not_admin') $msgErr='❌ ربات هنوز داخل این کانال ادمین نیست یا دسترسی بررسی عضویت ندارد. اول ربات را ادمین کانال کنید، سپس دوباره آیدی کانال را ارسال کنید.';
                elseif($err==='blocked_channel') $msgErr='❌ این کانال در لیست مسدودی ربات است.';
                bot_sponsor_send($chatID,$msgErr,bot_sponsor_user_back_keyboard()); return true;
            }
            bot_sponsor_send($chatID,"✅ کانال شما با موفقیت به جوین اجباری اسپانسری اضافه شد.\n\n📢 کانال: <code>".bot_sponsor_html($res['ref'])."</code>\n⏰ اعتبار تا: <code>".(function_exists('jdate')?jdate('Y/m/d H:i',(int)$res['expires_at']):date('Y-m-d H:i',(int)$res['expires_at']))."</code>",$Button_Home); return true;
        }
        return false;
    }
}
