<?php
declare(strict_types=1);
require_once __DIR__ . '/lib/v7_bootstrap.php';
require_once dirname(__DIR__) . '/lib/Commerce/Commerce.php';
$commerce = $GLOBALS['itzCommerce'] ?? new \iTz\Commerce\Commerce($pdo, dirname(__DIR__));
$flash='';$flashType='ok';$credentials=null;

function commerce_param_lines(string $raw): array {
    $out=[];
    foreach(preg_split('/\R/u',$raw)?:[] as $line){
        $line=trim($line); if($line==='')continue;
        $p=array_map('trim',explode('|',$line));
        $key=preg_replace('/[^a-zA-Z0-9_\-]/','_',(string)($p[0]??'')); if($key==='')continue;
        $phase=in_array(($p[2]??'after_payment'),['before_payment','after_payment'],true)?$p[2]:'after_payment';
        $type=in_array(($p[4]??'text'),['text','number','email','username','domain','textarea'],true)?$p[4]:'text';
        $out[]=['key'=>$key,'label'=>(string)($p[1]??$key),'phase'=>$phase,'required'=>in_array(strtolower((string)($p[3]??'1')),['1','yes','true','required','بله'],true),'type'=>$type];
    }
    return $out;
}

if($_SERVER['REQUEST_METHOD']==='POST'){
    itz_v7_csrf($csrf);
    $action=(string)($_POST['_action']??'');
    try{
        if($action==='toggle_module'){$commerce->setEnabled(!empty($_POST['enabled']));$flash='وضعیت Commerce Engine ذخیره شد.';}
        elseif($action==='site_create'){$credentials=$commerce->createSite((string)($_POST['site_name']??''),(string)($_POST['base_url']??''));$flash='Connector ساخته شد؛ کلیدها فقط همین بار کامل نمایش داده می‌شوند.';}
        elseif($action==='site_status'){$commerce->setSiteStatus((int)($_POST['site_id']??0),(string)($_POST['status_name']??'paused'));$flash='وضعیت سایت تغییر کرد.';}
        elseif($action==='site_rotate'){$credentials=$commerce->rotateSiteCredentials((int)($_POST['site_id']??0));$flash='کلیدهای جدید ساخته شدند؛ قبلی‌ها از همین لحظه باطل‌اند.';}
        elseif($action==='site_delete'){$commerce->deleteSite((int)($_POST['site_id']??0));$flash='اتصال سایت حذف شد.';}
        elseif($action==='product_save'){
            $schema=commerce_param_lines((string)($_POST['parameter_lines']??''));
            $id=(int)($_POST['product_id']??0);
            $commerce->saveProduct([
                'title'=>$_POST['title']??'','slug'=>$_POST['slug']??'','description_text'=>$_POST['description_text']??'',
                'price'=>$_POST['price']??0,'currency'=>$_POST['currency']??'IRT','status_name'=>$_POST['status_name']??'active',
                'fulfillment_type'=>$_POST['fulfillment_type']??'manual','core_product_code'=>$_POST['core_product_code']??null,
                'backend_type'=>$_POST['backend_type']??null,'backend_ref'=>$_POST['backend_ref']??null,'parameter_schema'=>$schema,
                'stock_count'=>$_POST['stock_count']??-1,'sort_order'=>$_POST['sort_order']??100,
                'fulfillment_config'=>['note'=>(string)($_POST['fulfillment_note']??''),'pg_role_id'=>(int)($_POST['pg_role_id']??0),'pg_data_limit'=>(int)($_POST['pg_data_limit']??0),'password_length'=>(int)($_POST['password_length']??18)],
            ],$id?:null);$flash=$id?'محصول بروزرسانی شد.':'محصول جدید ساخته شد.';
        }
        elseif($action==='product_status'){$commerce->setProductStatus((int)($_POST['product_id']??0),(string)($_POST['status_name']??'inactive'));$flash='وضعیت محصول تغییر کرد.';}
        elseif($action==='order_status'){$commerce->setOrderStatus((int)($_POST['order_id']??0),(string)($_POST['status_name']??'processing'),'web_admin');$flash='وضعیت سفارش بروزرسانی و در صورت امکان برای سایت Sync شد.';}
        elseif($action==='job_retry'){$commerce->retryJob((int)($_POST['job_id']??0));$flash='Job دوباره وارد صف شد.';}
        if(function_exists('itz_audit'))itz_audit('commerce',$action,null,['ok'=>true]);
    }catch(Throwable $e){$flash=$e->getMessage();$flashType='err';}
}

$editProduct=null;if(isset($_GET['edit_product']))$editProduct=$commerce->product((int)$_GET['edit_product']);
$stats=$commerce->stats();$sites=$commerce->sites();$products=$commerce->products();$orders=$commerce->recentOrders(80);$jobs=$commerce->recentJobs(80);$gateways=$commerce->gatewaySnapshot();
function h($v){return htmlspecialchars((string)$v,ENT_QUOTES,'UTF-8');}
function param_lines_from_product(?array $p):string{if(!$p)return '';$a=json_decode((string)($p['parameter_schema_json']??'[]'),true);if(!is_array($a))return '';$lines=[];foreach($a as $f){$lines[]=implode('|',[(string)($f['key']??''),(string)($f['label']??''),(string)($f['phase']??'after_payment'),!empty($f['required'])?'1':'0',(string)($f['type']??'text')]);}return implode("\n",$lines);}
?>
<!doctype html><html lang="fa" dir="rtl"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"><title>iTz Commerce Hub | iTzAYDiN-BOT</title><link rel="stylesheet" href="css/theme.css"><link rel="stylesheet" href="css/admin-extra.css"><link rel="stylesheet" href="css/ay-controls.css"><link rel="stylesheet" href="css/v7-architect.css"><style>
.commerce-hero{padding:22px;border:1px solid var(--border-soft);border-radius:24px;background:linear-gradient(145deg,color-mix(in srgb,var(--accent) 13%,var(--surface-2)),var(--surface-2));margin-bottom:16px}.commerce-kicker{font:800 10px monospace;letter-spacing:1.8px;color:var(--accent)}.commerce-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}.commerce-stat{padding:16px;border:1px solid var(--border-soft);border-radius:18px;background:var(--surface-2)}.commerce-stat b{display:block;font-size:25px;margin-top:5px}.tabs{display:flex;gap:8px;flex-wrap:wrap;margin:15px 0}.tabs button{border:1px solid var(--border-soft);background:var(--surface-2);color:var(--text);padding:9px 13px;border-radius:13px;cursor:pointer}.tabs button.active{border-color:var(--accent);color:var(--accent)}.tab-pane{display:none}.tab-pane.active{display:block}.secret-box{direction:ltr;text-align:left;overflow-wrap:anywhere;padding:13px;border-radius:14px;background:#080a11;border:1px dashed var(--accent);font-family:monospace}.row-actions{display:flex;gap:6px;flex-wrap:wrap}.table-wrap{overflow:auto}.table-wrap table{min-width:900px}.badge-ok{color:#34d399}.badge-off{color:#fb7185}.help{font-size:12px;color:var(--text-muted);line-height:1.9}.notice-support{padding:13px;border-radius:14px;background:color-mix(in srgb,var(--accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--accent) 25%,transparent)}
</style></head><body><section id="container"><?php include 'header.php';?><section id="main-content"><div class="wrapper">
<div class="commerce-hero"><div class="commerce-kicker">ITZ COMMERCE ENGINE • V8</div><h1 style="margin:6px 0 8px">فروشگاه وب + ربات، یک هسته مشترک</h1><p style="margin:0;color:var(--text-muted)">سایت اختیاری است. سفارش و پرداخت تاییدشده سایت وارد Order Engine می‌شود، داخل تلگرام به ادمین گزارش می‌شود و پارامترهای محصول/فعال‌سازی از همین مرکز مدیریت می‌شوند.</p></div>
<?php if($flash):?><div class="alert <?php echo $flashType==='err'?'alert-danger':'alert-success';?>"><?php echo h($flash);?></div><?php endif;?>
<?php if($credentials):?><div class="card" style="border-color:var(--accent)"><h3>🔐 اطلاعات اتصال — فقط همین بار</h3><p class="help">این اطلاعات دوباره به‌صورت کامل نمایش داده نمی‌شوند. سمت سایت در Environment امن ذخیره‌شان کنید.</p><?php if(isset($credentials['site_name'])):?><div><b>Site:</b> <?php echo h($credentials['site_name']);?> — <?php echo h($credentials['base_url']);?></div><?php endif;?><p>API Key</p><div class="secret-box"><?php echo h($credentials['api_key']);?></div><p>Webhook Secret</p><div class="secret-box"><?php echo h($credentials['webhook_secret']);?></div></div><?php endif;?>
<div class="commerce-grid"><?php foreach(['sites'=>'سایت فعال','products'=>'محصول فعال','orders'=>'کل سفارش','paid'=>'پرداخت‌شده','pending'=>'در صف'] as $k=>$label):?><div class="commerce-stat"><small><?php echo h($label);?></small><b><?php echo number_format((int)$stats[$k]);?></b></div><?php endforeach;?></div>
<div class="tabs"><button class="active" data-tab="sites">🌐 سایت‌ها</button><button data-tab="products">📦 محصولات</button><button data-tab="orders">🧾 سفارش‌ها</button><button data-tab="jobs">⚙️ Fulfillment Queue</button><button data-tab="payments">💳 Payment Bridge</button><button data-tab="docs">🔌 راهنمای اتصال</button></div>
<section class="tab-pane active" id="tab-sites"><div class="card"><div class="page-head"><div><div class="page-head__title">Website Connectors</div><div class="page-head__sub">برای هر سایت کلید مستقل ساخته می‌شود؛ هیچ دامنه شخصی داخل سورس نیست.</div></div><form method="post"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="toggle_module"><label><input type="checkbox" name="enabled" value="1" <?php echo $commerce->enabled()?'checked':'';?>> Commerce فعال</label><button class="btn btn-outline btn-sm">ذخیره</button></form></div><form method="post" class="form-grid"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="site_create"><div class="form-group"><label>نام سایت</label><input class="form-control" name="site_name" placeholder="فروشگاه اصلی"></div><div class="form-group"><label>آدرس سایت</label><input class="form-control" name="base_url" placeholder="https://shop.example.com" required></div><div class="form-group" style="align-self:end"><button class="btn btn-primary">+ ساخت اتصال امن</button></div></form><div class="notice-support"><b>⚠️ نکته مهم</b><br>برای انجام مطمئن‌تر و سالم‌تر اتصال سایت به ربات، در صورت نیاز با پشتیبانی <b>@itzaydin</b> هماهنگ کنید.</div></div>
<div class="card table-wrap"><table class="table"><thead><tr><th>سایت</th><th>URL</th><th>Key Prefix</th><th>آخرین اتصال</th><th>وضعیت</th><th>عملیات</th></tr></thead><tbody><?php foreach($sites as $s):?><tr><td><?php echo h($s['site_name']);?></td><td dir="ltr"><?php echo h($s['base_url']);?></td><td><code><?php echo h($s['api_key_prefix']);?>…</code></td><td><?php echo (int)$s['last_seen_at']?date('Y-m-d H:i',(int)$s['last_seen_at']):'—';?></td><td><?php echo $s['status_name']==='active'?'<span class="badge-ok">فعال</span>':'<span class="badge-off">متوقف</span>';?></td><td><div class="row-actions"><form method="post"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="site_status"><input type="hidden" name="site_id" value="<?php echo (int)$s['id'];?>"><input type="hidden" name="status_name" value="<?php echo $s['status_name']==='active'?'paused':'active';?>"><button class="btn btn-outline btn-sm"><?php echo $s['status_name']==='active'?'Pause':'Activate';?></button></form><form method="post" onsubmit="return confirm('کلیدهای قبلی فوراً باطل شوند؟')"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="site_rotate"><input type="hidden" name="site_id" value="<?php echo (int)$s['id'];?>"><button class="btn btn-outline btn-sm">Rotate Keys</button></form><form method="post" onsubmit="return confirm('اتصال سایت حذف شود؟ سفارش‌های قبلی باقی می‌مانند.')"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="site_delete"><input type="hidden" name="site_id" value="<?php echo (int)$s['id'];?>"><button class="btn btn-danger btn-sm">حذف</button></form></div></td></tr><?php endforeach;?></tbody></table></div></section>
<section class="tab-pane" id="tab-products"><div class="card"><h3><?php echo $editProduct?'✏️ ویرایش محصول':'➕ محصول جدید';?></h3><form method="post"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="product_save"><input type="hidden" name="product_id" value="<?php echo (int)($editProduct['id']??0);?>"><div class="form-grid"><div class="form-group"><label>نام محصول</label><input class="form-control" name="title" required value="<?php echo h($editProduct['title']??'');?>"></div><div class="form-group"><label>Slug</label><input class="form-control" name="slug" dir="ltr" value="<?php echo h($editProduct['slug']??'');?>"></div><div class="form-group"><label>قیمت</label><input class="form-control" name="price" type="number" step="0.01" min="0" value="<?php echo h($editProduct['price']??0);?>"></div><div class="form-group"><label>ارز</label><select class="form-control" name="currency"><?php foreach(['IRT','IRR','USD','EUR'] as $c):?><option <?php echo (($editProduct['currency']??'IRT')===$c)?'selected':'';?>><?php echo $c;?></option><?php endforeach;?></select></div><div class="form-group"><label>نوع تحویل</label><select class="form-control" name="fulfillment_type"><?php foreach(['manual'=>'دستی','core'=>'محصول اصلی ربات','api'=>'API/پنل','webhook'=>'Webhook','stock'=>'موجودی'] as $v=>$l):?><option value="<?php echo $v;?>" <?php echo (($editProduct['fulfillment_type']??'manual')===$v)?'selected':'';?>><?php echo h($l);?></option><?php endforeach;?></select></div><div class="form-group"><label>کد محصول اصلی ربات (اختیاری)</label><input class="form-control" name="core_product_code" value="<?php echo h($editProduct['core_product_code']??'');?>"></div><div class="form-group"><label>Backend Type</label><input class="form-control" name="backend_type" placeholder="pasarguard / rebecca / x-ui_single" value="<?php echo h($editProduct['backend_type']??'');?>"></div><div class="form-group"><label>Backend Ref</label><input class="form-control" name="backend_ref" value="<?php echo h($editProduct['backend_ref']??'');?>"></div><div class="form-group"><label>موجودی (-1 نامحدود)</label><input class="form-control" name="stock_count" type="number" value="<?php echo h($editProduct['stock_count']??-1);?>"></div><div class="form-group"><label>ترتیب</label><input class="form-control" name="sort_order" type="number" value="<?php echo h($editProduct['sort_order']??100);?>"></div><div class="form-group"><label>وضعیت</label><select class="form-control" name="status_name"><option value="active">فعال</option><option value="inactive" <?php echo (($editProduct['status_name']??'active')==='inactive')?'selected':'';?>>غیرفعال</option></select></div></div><div class="form-group"><label>توضیحات</label><textarea class="form-control" name="description_text" rows="3"><?php echo h($editProduct['description_text']??'');?></textarea></div><div class="form-group"><label>پارامترهای مشتری</label><textarea class="form-control" name="parameter_lines" rows="6" dir="ltr" placeholder="username|نام کاربری|after_payment|1|username&#10;domain|دامنه|after_payment|1|domain"><?php echo h(param_lines_from_product($editProduct));?></textarea><div class="help">هر خط: <code>key | عنوان | before_payment/after_payment | required(1/0) | type</code>. این همان سیستم پارامتر دلخواه برای محصولات متفرقه و نمایندگی‌هاست.</div></div><?php $fc=$editProduct?json_decode((string)($editProduct['fulfillment_config_json']??'{}'),true):[]; if(!is_array($fc))$fc=[]; ?>
<div class="form-grid"><div class="form-group"><label>PasarGuard Role ID (اختیاری)</label><input class="form-control" name="pg_role_id" type="number" min="0" value="<?php echo h($fc['pg_role_id']??0);?>"><div class="help">برای محصول API با Backend Type = <code>pasarguard_reseller</code>.</div></div><div class="form-group"><label>Traffic Limit نمایندگی (bytes / 0 نامحدود)</label><input class="form-control" name="pg_data_limit" type="number" min="0" value="<?php echo h($fc['pg_data_limit']??0);?>"></div><div class="form-group"><label>طول رمز خودکار</label><input class="form-control" name="password_length" type="number" min="12" max="64" value="<?php echo h($fc['password_length']??18);?>"</div></div>
<div class="form-group"><label>یادداشت فعال‌سازی</label><input class="form-control" name="fulfillment_note" value="<?php echo h($fc['note']??'');?>" placeholder="مثلاً بعد از پرداخت Username گرفته شود و نمایندگی ساخته شود"></div><button class="btn btn-primary">ذخیره محصول</button></form></div><div class="card table-wrap"><table class="table"><thead><tr><th>محصول</th><th>قیمت</th><th>نوع</th><th>Backend</th><th>وضعیت</th><th></th></tr></thead><tbody><?php foreach($products as $p):?><tr><td><b><?php echo h($p['title']);?></b><br><small><?php echo h($p['slug']);?></small></td><td><?php echo number_format((float)$p['price']);?> <?php echo h($p['currency']);?></td><td><?php echo h($p['fulfillment_type']);?></td><td><?php echo h(trim(($p['backend_type']??'').' '.($p['backend_ref']??'')));?></td><td><?php echo h($p['status_name']);?></td><td><div class="row-actions"><a class="btn btn-outline btn-sm" href="?edit_product=<?php echo (int)$p['id'];?>#tab-products">ویرایش</a><form method="post"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="product_status"><input type="hidden" name="product_id" value="<?php echo (int)$p['id'];?>"><input type="hidden" name="status_name" value="<?php echo $p['status_name']==='active'?'inactive':'active';?>"><button class="btn btn-outline btn-sm"><?php echo $p['status_name']==='active'?'خاموش':'فعال';?></button></form></div></td></tr><?php endforeach;?></tbody></table></div></section>
<section class="tab-pane" id="tab-orders"><div class="card table-wrap"><table class="table"><thead><tr><th>سفارش</th><th>سایت</th><th>مشتری</th><th>محصول</th><th>مبلغ</th><th>پرداخت</th><th>وضعیت</th><th>عملیات</th></tr></thead><tbody><?php foreach($orders as $o):?><tr><td><code><?php echo h($o['public_id']);?></code><br><small><?php echo date('m/d H:i',(int)$o['created_at']);?></small></td><td><?php echo h($o['site_name']);?></td><td><?php echo h($o['telegram_username']?'@'.ltrim($o['telegram_username'],'@'):($o['telegram_id']?:$o['full_name']));?></td><td><?php echo h($o['product_title']);?></td><td><?php echo number_format((float)$o['total_amount']);?> <?php echo h($o['currency']);?></td><td><?php echo h($o['payment_status']);?></td><td><?php echo h($o['status_name']);?></td><td><form method="post" class="row-actions"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="order_status"><input type="hidden" name="order_id" value="<?php echo (int)$o['id'];?>"><select class="form-control" name="status_name" style="min-width:135px"><?php foreach(['processing','completed','cancelled','refunded','failed'] as $st):?><option value="<?php echo $st;?>" <?php echo $o['status_name']===$st?'selected':'';?>><?php echo $st;?></option><?php endforeach;?></select><button class="btn btn-outline btn-sm">ثبت</button></form></td></tr><?php endforeach;?></tbody></table></div></section>
<section class="tab-pane" id="tab-jobs"><div class="card"><h3>⚙️ Fulfillment Queue</h3><p class="help">پردازش Async سفارش‌ها. نمایندگی PasarGuard با نوع <code>api</code> و Backend Type = <code>pasarguard_reseller</code> قابل تحویل خودکار است؛ مواردی که Adapter اختصاصی ندارند به‌جای اجرای خطرناک در حالت <code>manual_pending</code> می‌مانند.</p></div><div class="card table-wrap"><table class="table"><thead><tr><th>Job</th><th>سفارش</th><th>محصول</th><th>نوع</th><th>وضعیت</th><th>تلاش</th><th>خطا</th><th></th></tr></thead><tbody><?php foreach($jobs as $j):?><tr><td>#<?php echo (int)$j['id'];?></td><td><code><?php echo h($j['public_id']);?></code></td><td><?php echo h($j['product_title']);?></td><td><?php echo h($j['job_type']);?></td><td><?php echo h($j['status_name']);?></td><td><?php echo (int)$j['attempts'];?></td><td style="max-width:320px;white-space:normal"><?php echo h($j['last_error']??'');?></td><td><?php if(in_array($j['status_name'],['failed','manual_pending'],true)):?><form method="post"><input type="hidden" name="_csrf" value="<?php echo h($csrf);?>"><input type="hidden" name="_action" value="job_retry"><input type="hidden" name="job_id" value="<?php echo (int)$j['id'];?>"><button class="btn btn-outline btn-sm">Retry</button></form><?php endif;?></td></tr><?php endforeach;?></tbody></table></div></section>
<section class="tab-pane" id="tab-payments"><div class="card"><h3>Payment Bridge</h3><p class="help">Commerce فقط وضعیت امن درگاه‌های فعال ربات را به سایت می‌دهد و هیچ Merchant/API Key را برنمی‌گرداند. سایت پس از Verify واقعی درگاه خودش، رویداد <code>payment.success</code> را با امضای HMAC به ربات می‌فرستد.</p><div class="commerce-grid"><?php foreach($gateways as $g):?><div class="commerce-stat"><small><?php echo h($g['label']);?></small><b style="font-size:16px" class="<?php echo $g['enabled']?'badge-ok':'badge-off';?>"><?php echo $g['enabled']?'فعال':'غیرفعال';?></b></div><?php endforeach;?></div></div></section>
<section class="tab-pane" id="tab-docs"><div class="card"><h3>🔌 موارد لازم برای اتصال سالم سایت به ربات</h3><p class="help">مشتری‌ای که سایت ندارد هیچ کاری لازم نیست انجام دهد. اگر سایت دارد فقط Connector بسازد و این سه مقدار را در Environment سایت خودش قرار دهد:</p><pre class="secret-box">ITZ_COMMERCE_API=https://BOT-DOMAIN/api/commerce.php
ITZ_COMMERCE_KEY=itz_site_xxx
ITZ_COMMERCE_SECRET=itz_wh_xxx</pre><p class="help">برای هر درخواست: <code>X-iTz-Key</code>، <code>X-iTz-Timestamp</code> و <code>X-iTz-Signature</code> لازم است. Signature برابر HMAC-SHA256 روی <code>timestamp + "\n" + raw_json_body</code> است.</p><p>Actionهای آماده:</p><pre class="secret-box">health
catalog
payment.methods
order.create
order.parameters
payment.success
payment.failed
order.status</pre><p class="help">برای Sync برگشتی، ربات در صورت تغییر وضعیت سفارش به <code>https://SITE/itz-commerce-webhook</code> POST امضاشده می‌فرستد.</p><div class="notice-support"><b>⚠️ نصب سایت اجباری نیست.</b><br>اگر خریدار قصد اتصال سایت دارد، برای انجام مطمئن‌تر و سالم‌تر این کار می‌تواند به پشتیبانی <b>@itzaydin</b> پیام دهد.</div></div></section>
</div></section></section><script>document.querySelectorAll('[data-tab]').forEach(b=>b.addEventListener('click',()=>{document.querySelectorAll('[data-tab]').forEach(x=>x.classList.remove('active'));document.querySelectorAll('.tab-pane').forEach(x=>x.classList.remove('active'));b.classList.add('active');document.getElementById('tab-'+b.dataset.tab).classList.add('active');location.hash='tab-'+b.dataset.tab;}));if(location.hash){const id=location.hash.slice(1);const p=document.getElementById(id);if(p){document.querySelectorAll('.tab-pane').forEach(x=>x.classList.remove('active'));p.classList.add('active');const b=document.querySelector('[data-tab="'+id.replace('tab-','')+'"]');if(b){document.querySelectorAll('[data-tab]').forEach(x=>x.classList.remove('active'));b.classList.add('active');}}}</script></body></html>
