<?php
/**
 * iTz Commerce Telegram Admin Console.
 * Runs before the legacy admin dispatcher so Commerce can remain a self-contained module.
 */
if (!function_exists('itz_commerce_admin_dispatch')) {
    function itz_commerce_admin_dispatch(): bool
    {
        global $pdo,$from_id,$datain,$text,$user,$adminrulecheck,$domainhosts;
        if (!($pdo instanceof PDO) || empty($from_id)) return false;
        if (!is_array($adminrulecheck ?? null) || ($adminrulecheck['rule'] ?? '') !== 'administrator') return false;
        require_once REFACTORED_LEGACY_ROOT . '/lib/Commerce/Commerce.php';
        if (!function_exists('telegram')) require_once REFACTORED_LEGACY_ROOT . '/botapi.php';
        try { $commerce=$GLOBALS['itzCommerce']??new \iTz\Commerce\Commerce($pdo,REFACTORED_LEGACY_ROOT); }
        catch(Throwable $e){return false;}

        $cb=(string)($datain??'');$msg=trim((string)($text??''));$stepName=(string)($user['step']??'home');
        $isEntry=($cb==='admin_commerce'||$cb==='commerce_home'||$msg==='🌐 iTz Commerce Hub');
        $belongs=$isEntry||str_starts_with($cb,'commerce_')||str_starts_with($stepName,'commerce_');
        if(!$belongs)return false;

        $send=function(string $body,array $rows=[]) use($from_id){
            $payload=['chat_id'=>$from_id,'text'=>$body,'parse_mode'=>'HTML'];
            if($rows)$payload['reply_markup']=json_encode(['inline_keyboard'=>$rows],JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
            telegram('sendMessage',$payload);
        };
        $setStep=function(string $s) use($from_id,$pdo,&$user){
            if(function_exists('step')){step($s,$from_id);}else{$q=$pdo->prepare('UPDATE user SET step=:s WHERE id=:u');$q->execute([':s'=>$s,':u'=>$from_id]);}
            if(is_array($user))$user['step']=$s;
        };
        $setState=function(array $state) use($from_id,$pdo,&$user){$json=json_encode($state,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);$q=$pdo->prepare('UPDATE user SET Processing_value=:v WHERE id=:u');$q->execute([':v'=>$json,':u'=>$from_id]);if(is_array($user))$user['Processing_value']=$json;};
        $getState=function() use(&$user): array {$raw=(string)($user['Processing_value']??'');$d=json_decode($raw,true);return is_array($d)?$d:[];};
        $home=function() use($commerce,$send,$domainhosts){
            $st=$commerce->stats();$state=$commerce->enabled()?'🟢 فعال':'🔴 غیرفعال';
            $url=trim((string)$domainhosts);$panel=$url!==''?'https://'.preg_replace('#^https?://#','',$url).'/panel/commerce.php':'';
            $txt="🛒 <b>iTz Commerce Hub</b>\n\n".
                 "وضعیت Engine: {$state}\n🌐 سایت‌های فعال: <b>{$st['sites']}</b>\n📦 محصولات فعال: <b>{$st['products']}</b>\n🧾 سفارش‌ها: <b>{$st['orders']}</b>\n✅ پرداخت‌شده: <b>{$st['paid']}</b>\n⏳ در صف: <b>{$st['pending']}</b>\n\n".
                 "سایت اختیاری است؛ اگر سایت وصل نباشد هیچ بخش دیگری از ربات وابسته به این ماژول نیست.";
            $rows=[
                [['text'=>'➕ اتصال سایت','callback_data'=>'commerce_add_site'],['text'=>'🌐 سایت‌ها','callback_data'=>'commerce_sites']],
                [['text'=>'📦 محصولات','callback_data'=>'commerce_products'],['text'=>'🧾 سفارش‌های اخیر','callback_data'=>'commerce_orders']],
                [['text'=>'🔌 راهنمای اتصال','callback_data'=>'commerce_docs'],['text'=>'⚙️ روشن/خاموش','callback_data'=>'commerce_toggle']],
            ];
            if($panel!=='')$rows[]=[['text'=>'🖥 بازکردن Commerce Web Panel','url'=>$panel]];
            $rows[]=[['text'=>'🏠 بازگشت مدیریت','callback_data'=>'admin_back']];
            $send($txt,$rows);
        };

        try{
            if($isEntry){$setStep('home');$home();return true;}
            if($cb==='commerce_toggle'){$commerce->setEnabled(!$commerce->enabled());$home();return true;}
            if($cb==='commerce_add_site'){$setStep('commerce_site_url');$send("🌐 <b>اتصال سایت جدید</b>\n\nآدرس کامل سایت را بفرست؛ مثال:\n<code>https://shop.example.com</code>\n\nبعد از ثبت، API Key و Webhook Secret فقط یک‌بار نمایش داده می‌شوند.",[[['text'=>'↩️ لغو','callback_data'=>'commerce_home']]]);return true;}
            if($stepName==='commerce_site_url' && $msg!==''){
                $site=$commerce->createSite('', $msg);$setStep('home');
                $apiBase=trim((string)$domainhosts);$apiBase=$apiBase!==''?'https://'.preg_replace('#^https?://#','',$apiBase).'/api/commerce.php':'https://BOT-DOMAIN/api/commerce.php';
                $txt="✅ <b>سایت متصل شد</b>\n\n🌐 ".htmlspecialchars($site['base_url'],ENT_QUOTES,'UTF-8')."\n\n".
                    "🔑 <b>API Key — فقط همین بار:</b>\n<code>".htmlspecialchars($site['api_key'],ENT_QUOTES,'UTF-8')."</code>\n\n".
                    "🔐 <b>Webhook Secret — فقط همین بار:</b>\n<code>".htmlspecialchars($site['webhook_secret'],ENT_QUOTES,'UTF-8')."</code>\n\n".
                    "API Endpoint:\n<code>".htmlspecialchars($apiBase,ENT_QUOTES,'UTF-8')."</code>\n\n".
                    "⚠️ برای انجام مطمئن‌تر و سالم‌تر اتصال سایت، در صورت نیاز با پشتیبانی <b>@itzaydin</b> هماهنگ کنید.";
                $send($txt,[[['text'=>'🌐 Commerce Hub','callback_data'=>'commerce_home']]]);return true;
            }
            if($cb==='commerce_sites'){$setStep('home');$setState([]);
                $rows=[];$txt="🌐 <b>Website Connectors</b>\n\n";$sites=$commerce->sites();
                if(!$sites)$txt.="هنوز سایتی متصل نشده.";
                foreach($sites as $s){$txt.="\n• #".(int)$s['id'].' '.htmlspecialchars($s['site_name'],ENT_QUOTES,'UTF-8').' — '.($s['status_name']==='active'?'🟢':'⏸')."\n<code>".htmlspecialchars($s['base_url'],ENT_QUOTES,'UTF-8')."</code>";$rows[]=[['text'=>($s['status_name']==='active'?'⏸ توقف ':'▶️ فعال ').$s['site_name'],'callback_data'=>'commerce_site_toggle_'.(int)$s['id']],['text'=>'🔄 کلید جدید','callback_data'=>'commerce_site_rotate_'.(int)$s['id']]];}
                $rows[]=[['text'=>'➕ سایت جدید','callback_data'=>'commerce_add_site'],['text'=>'↩️ خانه','callback_data'=>'commerce_home']];$send($txt,$rows);return true;
            }
            if(preg_match('/^commerce_site_toggle_(\d+)$/',$cb,$m)){$s=$commerce->site((int)$m[1]);if($s)$commerce->setSiteStatus((int)$m[1],$s['status_name']==='active'?'paused':'active');$datain='commerce_sites';return itz_commerce_admin_dispatch();}
            if(preg_match('/^commerce_site_rotate_(\d+)$/',$cb,$m)){$c=$commerce->rotateSiteCredentials((int)$m[1]);$send("🔄 <b>کلیدهای اتصال عوض شدند</b>\n\nAPI Key:\n<code>".htmlspecialchars($c['api_key'],ENT_QUOTES,'UTF-8')."</code>\n\nWebhook Secret:\n<code>".htmlspecialchars($c['webhook_secret'],ENT_QUOTES,'UTF-8')."</code>\n\nکلیدهای قبلی دیگر معتبر نیستند. این مقادیر فقط همین بار کامل نمایش داده شدند.",[[['text'=>'↩️ سایت‌ها','callback_data'=>'commerce_sites']]]);return true;}
            if($cb==='commerce_products'){$setStep('home');$setState([]);$ps=$commerce->products();$txt="📦 <b>محصولات Commerce</b>\n\n";$rows=[];if(!$ps)$txt.="هنوز محصولی تعریف نشده.";foreach(array_slice($ps,0,20) as $p){$short=function_exists('mb_substr')?mb_substr((string)$p['title'],0,22,'UTF-8'):substr((string)$p['title'],0,22);$txt.="\n• ".htmlspecialchars($p['title'],ENT_QUOTES,'UTF-8')." — ".number_format((float)$p['price']).' '.$p['currency'].' — '.($p['status_name']==='active'?'🟢':'⚫');$rows[]=[['text'=>($p['status_name']==='active'?'⏸ ':'▶️ ').$short,'callback_data'=>'commerce_product_toggle_'.(int)$p['id']],['text'=>'📝 پارامتر','callback_data'=>'commerce_product_param_'.(int)$p['id']]];}$rows[]=[['text'=>'➕ محصول جدید','callback_data'=>'commerce_product_add']];$rows[]=[['text'=>'↩️ Commerce Hub','callback_data'=>'commerce_home']];$send($txt,$rows);return true;}
            if(preg_match('/^commerce_product_toggle_(\d+)$/',$cb,$m)){$p=$commerce->product((int)$m[1]);if($p)$commerce->setProductStatus((int)$m[1],$p['status_name']==='active'?'inactive':'active');$datain='commerce_products';return itz_commerce_admin_dispatch();}
            if($cb==='commerce_product_add'){$setState(['commerce'=>'product_add']);$setStep('commerce_product_title');$send("➕ <b>محصول جدید</b>\n\nنام محصول را بفرست.",[[['text'=>'↩️ لغو','callback_data'=>'commerce_products']]]);return true;}
            if($stepName==='commerce_product_title' && $msg!==''){$setState(['commerce'=>'product_add','title'=>$msg]);$setStep('commerce_product_price');$send("💰 قیمت محصول را به عدد بفرست؛ مثال: <code>150000</code>",[[['text'=>'↩️ لغو','callback_data'=>'commerce_products']]]);return true;}
            if($stepName==='commerce_product_price' && $msg!==''){$price=str_replace([',',' '],'',$msg);if(!is_numeric($price)||((float)$price)<0){$send('❌ قیمت معتبر نیست؛ فقط عدد بفرست.');return true;}$st=$getState();$st['price']=(float)$price;$setState($st);$setStep('commerce_product_type');$send("⚙️ نوع تحویل محصول را انتخاب کن.",[[['text'=>'🧑‍💻 دستی','callback_data'=>'commerce_product_type_manual'],['text'=>'🧩 هسته ربات','callback_data'=>'commerce_product_type_core']],[['text'=>'🔌 API / پنل','callback_data'=>'commerce_product_type_api'],['text'=>'📦 موجودی','callback_data'=>'commerce_product_type_stock']],[['text'=>'🌐 Webhook','callback_data'=>'commerce_product_type_webhook']]]);return true;}
            if(preg_match('/^commerce_product_type_(manual|core|api|stock|webhook)$/',$cb,$m)){$st=$getState();if(($st['commerce']??'')!=='product_add'||empty($st['title'])){$setStep('home');$send('❌ اطلاعات ساخت محصول منقضی شده؛ دوباره شروع کن.');return true;}$id=$commerce->saveProduct(['title'=>$st['title'],'price'=>(float)($st['price']??0),'currency'=>'IRT','fulfillment_type'=>$m[1],'status_name'=>'active']);$setState([]);$setStep('home');$send("✅ محصول ساخته شد.\n\n🆔 <code>{$id}</code>\n📦 ".htmlspecialchars((string)$st['title'],ENT_QUOTES,'UTF-8')."\n\nاگر محصول بعد از خرید اطلاعاتی مثل Username/Domain می‌خواهد، از دکمه پارامتر استفاده کن.",[[['text'=>'📝 افزودن پارامتر','callback_data'=>'commerce_product_param_'.$id]],[['text'=>'📦 محصولات','callback_data'=>'commerce_products']]]);return true;}
            if(preg_match('/^commerce_product_param_(\d+)$/',$cb,$m)){$p=$commerce->product((int)$m[1]);if(!$p){$send('❌ محصول پیدا نشد.');return true;}$setState(['commerce'=>'product_param','product_id'=>(int)$m[1]]);$setStep('commerce_param_line');$send("📝 <b>پارامتر محصول</b>\n\nیک خط با این ساختار بفرست:
<code>username|نام کاربری|after_payment|1|username</code>\n\nPhase: <code>before_payment</code> یا <code>after_payment</code>\nRequired: <code>1</code> یا <code>0</code>\nType: text / username / domain / email / number / textarea",[[['text'=>'↩️ لغو','callback_data'=>'commerce_products']]]);return true;}
            if($stepName==='commerce_param_line' && $msg!==''){$st=$getState();$pid=(int)($st['product_id']??0);$parts=array_map('trim',explode('|',$msg));if($pid<=0||count($parts)<2){$send('❌ قالب پارامتر درست نیست.');return true;}$field=['key'=>$parts[0]??'','label'=>$parts[1]??'','phase'=>$parts[2]??'after_payment','required'=>in_array(strtolower((string)($parts[3]??'1')),['1','true','yes','بله'],true),'type'=>$parts[4]??'text'];$saved=$commerce->addProductParameter($pid,$field);$setState([]);$setStep('home');$send("✅ پارامتر <b>".htmlspecialchars((string)$saved['label'],ENT_QUOTES,'UTF-8')."</b> ذخیره شد.\n\nبعد از خرید، سایت/ربات طبق Phase آن را از مشتری می‌گیرد.",[[['text'=>'➕ پارامتر دیگر','callback_data'=>'commerce_product_param_'.$pid],['text'=>'📦 محصولات','callback_data'=>'commerce_products']]]);return true;}
            if($cb==='commerce_orders'){$setStep('home');$setState([]);$orders=$commerce->recentOrders(8);$txt="🧾 <b>آخرین سفارش‌های سایت</b>\n";$rows=[];foreach($orders as $o){$txt.="\n\n<code>".htmlspecialchars($o['public_id'],ENT_QUOTES,'UTF-8')."</code>\n📦 ".htmlspecialchars($o['product_title'],ENT_QUOTES,'UTF-8')."\n💰 ".number_format((float)$o['total_amount']).' '.$o['currency']."\n📍 ".htmlspecialchars($o['status_name'],ENT_QUOTES,'UTF-8');$rows[]=[['text'=>'🧾 '.$o['public_id'],'callback_data'=>'commerce_order_'.(int)$o['id']]];}if(!$orders)$txt.="\n\nهنوز سفارشی از سایت ثبت نشده.";$rows[]=[['text'=>'↩️ Commerce Hub','callback_data'=>'commerce_home']];$send($txt,$rows);return true;}
            if(preg_match('/^commerce_order_(\d+)$/',$cb,$m)){$o=$commerce->order((int)$m[1]);if(!$o){$send('❌ سفارش پیدا نشد.');return true;}$params=json_decode((string)($o['parameters_json']??'{}'),true);$txt="🧾 <b>سفارش ".htmlspecialchars($o['public_id'],ENT_QUOTES,'UTF-8')."</b>\n\n🌐 ".htmlspecialchars((string)$o['site_name'],ENT_QUOTES,'UTF-8')."\n📦 ".htmlspecialchars($o['product_title'],ENT_QUOTES,'UTF-8')."\n💰 ".number_format((float)$o['total_amount']).' '.$o['currency']."\n💳 ".$o['payment_status']."\n📍 ".$o['status_name'];if(is_array($params)&&$params){$txt.="\n\n📝 <b>پارامترها:</b>";foreach($params as $k=>$v)$txt.="\n".htmlspecialchars((string)$k,ENT_QUOTES,'UTF-8').': <code>'.htmlspecialchars(is_scalar($v)?(string)$v:json_encode($v,JSON_UNESCAPED_UNICODE),ENT_QUOTES,'UTF-8').'</code>';}$send($txt,[[['text'=>'⚙️ درحال پردازش','callback_data'=>'commerce_order_status_'.(int)$o['id'].'_processing'],['text'=>'✅ تکمیل','callback_data'=>'commerce_order_status_'.(int)$o['id'].'_completed']],[['text'=>'❌ لغو','callback_data'=>'commerce_order_status_'.(int)$o['id'].'_cancelled'],['text'=>'↩️ سفارش‌ها','callback_data'=>'commerce_orders']]]);return true;}
            if(preg_match('/^commerce_order_status_(\d+)_(processing|completed|cancelled|failed)$/',$cb,$m)){$commerce->setOrderStatus((int)$m[1],$m[2],'telegram_admin');$datain='commerce_order_'.$m[1];return itz_commerce_admin_dispatch();}
            if($cb==='commerce_docs'){$setStep('home');$setState([]);$api=trim((string)$domainhosts);$api=$api!==''?'https://'.preg_replace('#^https?://#','',$api).'/api/commerce.php':'https://BOT-DOMAIN/api/commerce.php';$send("🔌 <b>راهنمای اتصال سایت</b>\n\nبرای سایت فقط این موارد لازم‌اند:\n\n1️⃣ API Endpoint\n<code>".htmlspecialchars($api,ENT_QUOTES,'UTF-8')."</code>\n2️⃣ API Key\n3️⃣ Webhook Secret\n\nهر Request باید این Headerها را داشته باشد:\n<code>X-iTz-Key\nX-iTz-Timestamp\nX-iTz-Signature</code>\n\nSignature = HMAC-SHA256(timestamp + newline + raw JSON, Webhook Secret)\n\nActionها: <code>catalog</code>، <code>payment.methods</code>، <code>order.create</code>، <code>order.parameters</code>، <code>payment.success</code>، <code>payment.failed</code> و <code>order.status</code>.\n\n⚠️ برای اتصال مطمئن‌تر می‌توانند با <b>@itzaydin</b> هماهنگ کنند.",[[['text'=>'↩️ Commerce Hub','callback_data'=>'commerce_home']]]);return true;}
        }catch(Throwable $e){$setStep('home');$send('❌ خطای Commerce: <code>'.htmlspecialchars($e->getMessage(),ENT_QUOTES,'UTF-8').'</code>',[[['text'=>'↩️ Commerce Hub','callback_data'=>'commerce_home']]]);return true;}
        return false;
    }
}
