<?php
/**
 * پنل مدیریت «خدمات مجازی» — کاملا جدا از پنل ادمین اصلی (namespace: vsadmin*)
 * تا هیچ تداخلی با admin.php اصلی ایجاد نشود.
 */

define('VS_ADMIN_BUTTON_TEXT', '🎛 پنل خدمات مجازی');

$vsAdminKeyboard = json_encode([
    'keyboard' => [
        [['text' => '🧾 سفارش‌های در انتظار']],
        [['text' => '📈 سود و نرخ دلار'], ['text' => '💵 قیمت پایه دلاری']],
        [['text' => '💰 تنظیم قیمت‌ها'], ['text' => '🎁 مدیریت لیست گیفت‌ها']],
        [['text' => '🎨 تنظیم رنگ دکمه‌ها'], ['text' => '🌟 ایموجی پریمیوم دکمه‌ها']],
        [['text' => '📜 تنظیم متن قوانین'], ['text' => '⚙️ فعال/غیرفعال بخش']],
        [['text' => '🧩 فعال/غیرفعال هر محصول']],
        [['text' => '📱 تنظیمات شماره مجازی']],
        [['text' => '📡 خدمات تلگرام/اینستاگرام']],
        [['text' => '🔙 بازگشت به پنل ادمین']],
    ],
    'resize_keyboard' => true,
]);

#-----------------[ فعال/غیرفعال هر محصول (صفحه دوم) ]-------------------#
// این تابع فهرست محصولات قابل‌فعال/غیرفعال‌سازی مستقل را برمی‌گرداند. افزودن یک
// ماژول جدید (مثلا خدمات تلگرام/اینستاگرام) فقط با اضافه‌کردن یک آیتم دیگر به این
// آرایه انجام می‌شود؛ به هیچ‌کدام از آیتم‌های موجود نیازی به تغییر نیست.
function vsAdminToggleableProducts()
{
    $map = [
        'stars'   => ['label' => '⭐️ خرید استارز تلگرام', 'setting' => 'vs_enabled_stars',   'getter' => 'vsSetting', 'setter' => 'vsSetSetting'],
        'premium' => ['label' => '💎 خرید پرمیوم تلگرام',   'setting' => 'vs_enabled_premium', 'getter' => 'vsSetting', 'setter' => 'vsSetSetting'],
        'gift'    => ['label' => '🎁 خرید گیفت',            'setting' => 'vs_enabled_gift',    'getter' => 'vsSetting', 'setter' => 'vsSetSetting'],
        'vnum'    => ['label' => '📱 شماره مجازی',           'setting' => 'vn_enabled',         'getter' => 'vsSetting', 'setter' => 'vsSetSetting'],
    ];
    // ماژول «خدمات تلگرام/اینستاگرام» (smm_services.php) هم اختیاری است؛ اگر هنوز
    // require نشده باشد (مثلا در یک محیط قدیمی‌تر که این آپدیت را ندارد) این دو
    // آیتم اضافه نمی‌شوند و بقیه‌ی صفحه بدون خطا کار می‌کند.
    if (function_exists('smmSetting')) {
        $map['smm_tg'] = ['label' => '📱 خدمات تلگرام (SMM)',   'setting' => 'smm_enabled_telegram',  'getter' => 'vsSetting', 'setter' => 'vsSetSetting'];
        $map['smm_ig'] = ['label' => '📸 خدمات اینستاگرام (SMM)', 'setting' => 'smm_enabled_instagram', 'getter' => 'vsSetting', 'setter' => 'vsSetSetting'];
    }
    return $map;
}

function vsAdminProductToggleText()
{
    $text = "🧩 <b>فعال/غیرفعال هر محصول</b>\n\nروی هر دکمه بزنید تا وضعیت همان محصول (فعال ✅ / غیرفعال ❌) عوض شود. کاربران فقط زمانی می‌توانند از محصول غیرفعال خرید کنند که دوباره فعالش کنید.\n\nوضعیت فعلی:";
    foreach (vsAdminToggleableProducts() as $item) {
        $state = vsSetting($item['setting'], '1') === '1' ? 'فعال ✅' : 'غیرفعال ❌';
        $text .= "\n" . $item['label'] . ': ' . $state;
    }
    return $text;
}

function vsAdminProductToggleKeyboard()
{
    $rows = [];
    foreach (vsAdminToggleableProducts() as $key => $item) {
        $state = vsSetting($item['setting'], '1') === '1' ? '✅' : '❌';
        $rows[] = [['text' => $state . ' ' . $item['label'], 'callback_data' => 'vsadmintoggleproduct_' . $key]];
    }
    return json_encode(['inline_keyboard' => $rows], JSON_UNESCAPED_UNICODE);
}

function vsAdminShouldHandle()
{
    global $text, $datain, $user, $admin_ids, $from_id;
    if (!in_array($from_id, $admin_ids ?? [])) return false;
    if ($text === VS_ADMIN_BUTTON_TEXT) return true;
    if (is_string($datain) && strpos($datain, 'vsadmin') === 0) return true;
    $step = $user['step'] ?? '';
    if (is_string($step) && strpos($step, 'vsadmin_') === 0) return true;
    if (in_array($text, ['🧾 سفارش‌های در انتظار', '📈 سود و نرخ دلار', '💵 قیمت پایه دلاری', '💰 تنظیم قیمت‌ها', '🎁 مدیریت لیست گیفت‌ها', '🎨 تنظیم رنگ دکمه‌ها', '🌟 ایموجی پریمیوم دکمه‌ها', '📜 تنظیم متن قوانین', '⚙️ فعال/غیرفعال بخش', '🧩 فعال/غیرفعال هر محصول', '🔙 بازگشت به پنل ادمین'])) return true;
    return false;
}

function vsAdminDispatch()
{
    global $text, $datain, $from_id, $message_id, $user, $keyboardadmin, $vsAdminKeyboard, $pdo;

    vsEnsureTables();

    if ($text === VS_ADMIN_BUTTON_TEXT) {
        sendmessage($from_id, "🎛 <b>پنل مدیریت خدمات مجازی</b>\n\nاین بخش کاملا مستقل از پنل اصلی ربات (VPN) است.", $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }

    if ($text === '🔙 بازگشت به پنل ادمین') {
        sendmessage($from_id, '🔙 بازگشت به پنل ادمین اصلی.', $keyboardadmin, 'HTML');
        step('home', $from_id);
        return;
    }

    #--------------- سفارش‌های در انتظار ---------------#
    if ($text === '🧾 سفارش‌های در انتظار') {
        $rows = $pdo->query("SELECT * FROM virtual_orders WHERE status='pending' ORDER BY id DESC LIMIT 20")->fetchAll();
        if (!$rows) {
            sendmessage($from_id, 'هیچ سفارش در انتظاری وجود ندارد.', $vsAdminKeyboard, 'HTML');
            return;
        }
        foreach ($rows as $row) {
            $msg = "🆔 سفارش #{$row['id']}\n👤 کاربر: <a href=\"tg://user?id={$row['user_id']}\">{$row['user_id']}</a>\n📦 {$row['item_name']}\n🎯 گیرنده: " . htmlspecialchars($row['recipient']) . "\n💰 " . number_format($row['price']) . " تومان";
            $kb = json_encode(['inline_keyboard' => [[
                ['text' => '✅ تایید و انجام شد', 'callback_data' => 'vsadmindone_' . $row['id'], 'style' => 'success'],
                ['text' => '❌ رد و بازگشت وجه', 'callback_data' => 'vsadminreject_' . $row['id'], 'style' => 'danger'],
            ]]], JSON_UNESCAPED_UNICODE);
            sendmessage($from_id, $msg, $kb, 'HTML');
        }
        return;
    }
    if (preg_match('/^vsadmindone_(\d+)$/', $datain, $m)) {
        $id = intval($m[1]);
        $order = $pdo->prepare("SELECT * FROM virtual_orders WHERE id=?");
        $order->execute([$id]);
        $order = $order->fetch();
        if (!$order || $order['status'] !== 'pending') { return; }
        $pdo->prepare("UPDATE virtual_orders SET status='done', updated_at=NOW() WHERE id=?")->execute([$id]);
        sendmessage($order['user_id'], "✅ سفارش شما (#{$id} - {$order['item_name']}) با موفقیت انجام و ارسال شد.", null, 'HTML');

        // فقط از همین‌جا (بعد از تکمیل واقعی سفارش توسط ادمین) به کانال گزارشات
        // عمومی اطلاع داده می‌شود — نه در لحظه‌ی ثبت سفارش/کسر وجه.
        if (function_exists('sendMemberOrderReportChannel')) {
            $timejalali = function_exists('jdate') ? jdate('Y/m/d H:i') : date('Y-m-d H:i');
            sendMemberOrderReportChannel(
                $order['item_name'],
                (string) $order['quantity'],
                '-',
                number_format($order['price']) . ' تومان',
                $timejalali,
                $order['user_id'],
                'خدمات مجازی'
            );
        }

        Editmessagetext($from_id, $message_id, "✅ سفارش #{$id} تایید و به کاربر اطلاع داده شد.", json_encode(['inline_keyboard' => []]));
        return;
    }
    if (preg_match('/^vsadminreject_(\d+)$/', $datain, $m)) {
        $id = intval($m[1]);
        $order = $pdo->prepare("SELECT * FROM virtual_orders WHERE id=?");
        $order->execute([$id]);
        $order = $order->fetch();
        if (!$order || $order['status'] !== 'pending') { return; }
        $balance = intval(select("user", "Balance", "id", $order['user_id'])['Balance'] ?? 0);
        update("user", "Balance", (string) ($balance + $order['price']), "id", $order['user_id']);
        $pdo->prepare("UPDATE virtual_orders SET status='rejected', updated_at=NOW() WHERE id=?")->execute([$id]);
        sendmessage($order['user_id'], "❌ سفارش شما (#{$id} - {$order['item_name']}) رد شد و مبلغ " . number_format($order['price']) . " تومان به کیف پول شما بازگشت داده شد.", null, 'HTML');
        Editmessagetext($from_id, $message_id, "❌ سفارش #{$id} رد و مبلغ به کاربر بازگردانده شد.", json_encode(['inline_keyboard' => []]));
        return;
    }

    #--------------- فعال/غیرفعال ---------------#
    if ($text === '⚙️ فعال/غیرفعال بخش') {
        $cur = vsSetting('vs_enabled', '1');
        $new = $cur === '1' ? '0' : '1';
        vsSetSetting('vs_enabled', $new);
        $stateText = $new === '1' ? 'فعال ✅' : 'غیرفعال ❌';
        sendmessage($from_id, "وضعیت فعلی بخش خدمات مجازی: {$stateText}", $vsAdminKeyboard, 'HTML');
        return;
    }

    #--------------- فعال/غیرفعال هر محصول به‌صورت جداگانه ---------------#
    // فهرست محصولات صفحه دوم که هرکدام سوییچ فعال/غیرفعال مستقل خودشان را دارند.
    // «شماره مجازی» تنظیم مستقل قبلی خودش (vn_enabled) را دارد و اینجا هم نمایش داده
    // می‌شود تا همه‌ی محصولات در یک صفحه مدیریت شوند؛ در تنظیمات (vn_*) دست‌نخورده می‌ماند.
    if ($text === '🧩 فعال/غیرفعال هر محصول') {
        sendmessage($from_id, vsAdminProductToggleText(), vsAdminProductToggleKeyboard(), 'HTML');
        return;
    }
    if (preg_match('/^vsadmintoggleproduct_([a-z_]+)$/', $datain, $m)) {
        $key = $m[1];
        $map = vsAdminToggleableProducts();
        if (!isset($map[$key])) { return; }
        $settingKey = $map[$key]['setting'];
        $cur = function_exists($map[$key]['getter']) ? call_user_func($map[$key]['getter'], $settingKey, '1') : vsSetting($settingKey, '1');
        $new = $cur === '1' ? '0' : '1';
        call_user_func($map[$key]['setter'], $settingKey, $new);
        Editmessagetext($from_id, $message_id, vsAdminProductToggleText(), vsAdminProductToggleKeyboard());
        return;
    }

    #--------------- تنظیم قیمت‌ها (فقط موارد غیرمرتبط با قیمت‌گذاری لحظه‌ای) ---------------#
    if ($text === '💰 تنظیم قیمت‌ها') {
        $kb = json_encode(['inline_keyboard' => [
            [['text' => '📉 حداقل تعداد استارز قابل خرید', 'callback_data' => 'vsadminprice_vs_star_min']],
        ]], JSON_UNESCAPED_UNICODE);
        sendmessage($from_id, "قیمت‌های Premium/Stars/Gift دیگر دستی تنظیم نمی‌شوند و به‌صورت لحظه‌ای محاسبه می‌شوند.\nبرای تنظیم درصد سود و نرخ دلار از «📈 سود و نرخ دلار» و برای تغییر قیمت پایه دلاری از «💵 قیمت پایه دلاری» استفاده کنید.\n\nمقادیر دیگر:", $kb, 'HTML');
        return;
    }
    if (preg_match('/^vsadminprice_(vs_[a-z0-9_]+)$/', $datain, $m)) {
        update("user", "Processing_value", $m[1], "id", $from_id);
        $cur = vsSetting($m[1]);
        Editmessagetext($from_id, $message_id, "مقدار فعلی: " . number_format(intval($cur)) . "\n\nمقدار جدید را فقط به‌صورت عدد ارسال کنید:", json_encode(['inline_keyboard' => []]));
        step('vsadmin_setprice', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_setprice') {
        $val = intval(preg_replace('/[^0-9]/', '', $text));
        if ($val <= 0) {
            sendmessage($from_id, 'عدد نامعتبر است. دوباره ارسال کنید:', null, 'HTML');
            return;
        }
        vsSetSetting($user['Processing_value'], (string) $val);
        sendmessage($from_id, '✅ مقدار با موفقیت به‌روزرسانی شد.', $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }

    #--------------- سود و نرخ دلار (قیمت‌گذاری لحظه‌ای) ---------------#
    if ($text === '📈 سود و نرخ دلار') {
        $profitPremium = vsSetting('vs_profit_premium', 10);
        $profitStars   = vsSetting('vs_profit_stars', 10);
        $profitGift    = vsSetting('vs_profit_gift', 10);
        $manualRate    = vsSetting('vs_usd_manual_rate', 0);
        $apiUrl        = vsSetting('vs_rate_api_url', '');
        $liveRate      = vsGetUsdIrtRate();

        $info = "📈 <b>سود و نرخ دلار</b>\n\n"
            . "سود Premium: <b>{$profitPremium}%</b>\n"
            . "سود Stars: <b>{$profitStars}%</b>\n"
            . "سود Gift: <b>{$profitGift}%</b>\n"
            . "نرخ دستی دلار: <b>" . number_format($manualRate) . "</b> تومان\n"
            . "API نرخ دلار: <b>" . ($apiUrl !== '' ? 'تنظیم شده' : 'تنظیم نشده (از نرخ دستی استفاده می‌شود)') . "</b>\n"
            . "نرخ فعلی مورد استفاده: <b>" . ($liveRate > 0 ? number_format($liveRate) . ' تومان' : 'نامشخص — لطفا نرخ دستی را تنظیم کنید') . "</b>\n\n"
            . "هر مقدار دلخواه را برای تغییر انتخاب کنید:";

        $kb = json_encode(['inline_keyboard' => [
            [['text' => '💎 درصد سود Premium', 'callback_data' => 'vsadminfloat_vs_profit_premium']],
            [['text' => '⭐️ درصد سود Stars', 'callback_data' => 'vsadminfloat_vs_profit_stars']],
            [['text' => '🎁 درصد سود Gift', 'callback_data' => 'vsadminfloat_vs_profit_gift']],
            [['text' => '💵 نرخ دستی دلار (تومان)', 'callback_data' => 'vsadminfloat_vs_usd_manual_rate']],
            [['text' => '📡 آدرس API نرخ دلار', 'callback_data' => 'vsadmintext_vs_rate_api_url']],
            [['text' => '🔑 API Key نرخ دلار (اختیاری)', 'callback_data' => 'vsadmintext_vs_rate_api_key']],
            [['text' => '📛 نام هدر Key (پیش‌فرض x-api-key)', 'callback_data' => 'vsadmintext_vs_rate_api_header']],
            [['text' => '🔑 کلید JSON نرخ در پاسخ API', 'callback_data' => 'vsadmintext_vs_rate_json_key']],
            [['text' => '🧪 تست نرخ دلار زنده (عیب‌یابی)', 'callback_data' => 'vsadmin_testrate']],
        ]], JSON_UNESCAPED_UNICODE);
        sendmessage($from_id, $info, $kb, 'HTML');
        return;
    }
    if ($datain === 'vsadmin_testrate') {
        $d = vsDebugUsdRateFetch();
        $lines = [];
        $lines[] = "🧪 <b>نتیجه‌ی تست نرخ دلار</b>";
        $lines[] = "آدرس: <code>" . htmlspecialchars($d['url'] ?: '(خالی)') . "</code>";
        $lines[] = "کلید API ثبت شده: " . ($d['has_key'] ? '✅ بله' : '❌ خیر');
        $lines[] = "نام هدر: <code>" . htmlspecialchars($d['header_name']) . "</code>";
        $lines[] = "مسیر JSON: <code>" . htmlspecialchars($d['json_path']) . "</code>";
        $lines[] = "curl فعال: " . ($d['curl_available'] ? '✅ بله' : '❌ خیر — php-curl را روی هاست نصب کنید');
        if ($d['http_code'] !== null) $lines[] = "کد HTTP پاسخ: <b>{$d['http_code']}</b>" . ($d['http_code'] == 401 || $d['http_code'] == 403 ? ' (یعنی کلید/هدر اشتباه است)' : '');
        if ($d['curl_error']) $lines[] = "خطای curl: <code>" . htmlspecialchars($d['curl_error']) . "</code>";
        if ($d['raw_snippet']) $lines[] = "نمونه پاسخ خام:\n<code>" . htmlspecialchars($d['raw_snippet']) . "</code>";
        $lines[] = "مقدار استخراج‌شده از JSON: " . var_export($d['extracted_value'], true);
        $lines[] = "نرخ نهایی که سیستم الان استفاده می‌کند: <b>" . number_format((float) $d['final_rate']) . "</b> تومان";
        Editmessagetext($from_id, $message_id, implode("\n", $lines), json_encode(['inline_keyboard' => [[['text' => '🔄 تست دوباره', 'callback_data' => 'vsadmin_testrate']]]]), 'HTML');
        return;
    }

    // ست‌کردن مقادیر اعشاری (درصد سود / نرخ دستی دلار / قیمت پایه دلاری)
    if (preg_match('/^vsadminfloat_(vs_[a-z0-9_]+)$/', $datain, $m)) {
        update("user", "Processing_value", $m[1], "id", $from_id);
        $cur = vsSetting($m[1]);
        Editmessagetext($from_id, $message_id, "مقدار فعلی: <b>{$cur}</b>\n\nمقدار جدید را ارسال کنید (اعشار هم مجاز است، مثلا 10 یا 12.5):", json_encode(['inline_keyboard' => []]), 'HTML');
        step('vsadmin_setfloat', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_setfloat') {
        $clean = preg_replace('/[^0-9.]/', '', str_replace(',', '.', $text));
        $val = floatval($clean);
        if ($clean === '' || $val < 0) {
            sendmessage($from_id, 'عدد نامعتبر است. دوباره ارسال کنید:', null, 'HTML');
            return;
        }
        vsSetSetting($user['Processing_value'], (string) $val);
        // با تغییر نرخ دستی، کش نرخ فعلی هم پاک شود تا بلافاصله اعمال شود
        if ($user['Processing_value'] === 'vs_usd_manual_rate') {
            vsSetSetting('vs_rate_cache_value', '0');
            vsSetSetting('vs_rate_cache_time', '0');
        }
        sendmessage($from_id, '✅ مقدار با موفقیت به‌روزرسانی شد.', $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }

    // ست‌کردن مقادیر متنی (آدرس API / کلید JSON)
    if (preg_match('/^vsadmintext_(vs_[a-z0-9_]+)$/', $datain, $m)) {
        update("user", "Processing_value", $m[1], "id", $from_id);
        $cur = vsSetting($m[1], '');
        Editmessagetext($from_id, $message_id, "مقدار فعلی: <code>" . htmlspecialchars($cur ?: '(خالی)') . "</code>\n\nمقدار جدید را ارسال کنید (برای خالی‌کردن، تک‌کاراکتر - بفرستید):", json_encode(['inline_keyboard' => []]), 'HTML');
        step('vsadmin_settext', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_settext') {
        $val = trim($text);
        if ($val === '-') $val = '';
        vsSetSetting($user['Processing_value'], $val);
        if (in_array($user['Processing_value'], ['vs_rate_api_url', 'vs_rate_api_key', 'vs_rate_api_header', 'vs_rate_json_key'], true)) {
            vsSetSetting('vs_rate_cache_value', '0');
            vsSetSetting('vs_rate_cache_time', '0');
        }
        sendmessage($from_id, '✅ مقدار با موفقیت به‌روزرسانی شد.', $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }

    #--------------- قیمت پایه دلاری (Premium/Stars) ---------------#
    if ($text === '💵 قیمت پایه دلاری') {
        $b3  = vsSetting('vs_base_usd_premium_3');
        $b6  = vsSetting('vs_base_usd_premium_6');
        $b12 = vsSetting('vs_base_usd_premium_12');
        $bStar = vsSetting('vs_base_usd_star');
        $kb = json_encode(['inline_keyboard' => [
            [['text' => "💎 پرمیوم ۳ ماهه (فعلی: {$b3}$)", 'callback_data' => 'vsadminfloat_vs_base_usd_premium_3']],
            [['text' => "💎 پرمیوم ۶ ماهه (فعلی: {$b6}$)", 'callback_data' => 'vsadminfloat_vs_base_usd_premium_6']],
            [['text' => "💎 پرمیوم ۱۲ ماهه (فعلی: {$b12}$)", 'callback_data' => 'vsadminfloat_vs_base_usd_premium_12']],
            [['text' => "⭐️ هر Star (فعلی: {$bStar}$)", 'callback_data' => 'vsadminfloat_vs_base_usd_star']],
        ]], JSON_UNESCAPED_UNICODE);
        sendmessage($from_id, "💵 <b>قیمت پایه دلاری (مرجع Fragment)</b>\n\nاین اعداد «پایه»‌اند و قیمت نهایی از (پایه × نرخ دلار × (۱+درصد سود)) محاسبه می‌شود. فقط در صورتی که قیمت واقعی Fragment تغییر کرد این‌ها را ویرایش کنید.", $kb, 'HTML');
        return;
    }

    #--------------- مدیریت لیست گیفت‌ها ---------------#
    if ($text === '🎁 مدیریت لیست گیفت‌ها') {
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        if (!$gifts) {
            sendmessage($from_id, 'لیست گیفت‌ها خالی است.', $vsAdminKeyboard, 'HTML');
        }
        foreach ($gifts as $i => $g) {
            $livePrice = vsPriceForGift($g);
            $priceLabel = $livePrice === null ? 'نامشخص (نرخ دلار تنظیم نشده)' : (number_format($livePrice) . ' تومان (لحظه‌ای)');
            $starsLabel = isset($g['stars']) ? intval($g['stars']) . ' Star' : 'قدیمی/دستی';
            $msg = ($i + 1) . ") {$g['name']} — {$starsLabel} — {$priceLabel}" . (!empty($g['icon']) ? "\n🌟 ایموجی پریمیوم اختصاصی دارد" : '');
            $kbRow = [
                ['text' => '✏️ تغییر تعداد استارز', 'callback_data' => 'vsgiftedit_' . $i],
                ['text' => '🌟 تنظیم ایموجی', 'callback_data' => 'vsgiftseticon_' . $i],
            ];
            $kbRow2 = [['text' => '🗑 حذف این گیفت', 'callback_data' => 'vsgiftdel_' . $i, 'style' => 'danger']];
            if (!empty($g['icon'])) {
                $kbRow2[] = ['text' => '❌ حذف ایموجی', 'callback_data' => 'vsgiftdelicon_' . $i];
            }
            $kb = json_encode(['inline_keyboard' => [$kbRow, $kbRow2]], JSON_UNESCAPED_UNICODE);
            sendmessage($from_id, $msg, $kb, 'HTML');
        }
        sendmessage($from_id, "➕ برای افزودن گیفت جدید، پیام را به این فرمت ارسال کنید:\n<code>نام گیفت | تعداد استارز</code>\nمثال: <code>🧸 خرس تدی | 15</code>\n\nقیمت تومانی این گیفت از این به بعد همیشه به‌صورت لحظه‌ای از (تعداد استارز × قیمت هر استارز + سود گروه Gift) محاسبه می‌شود؛ نیازی به وارد کردن قیمت تومانی دستی نیست.", null, 'HTML');
        step('vsadmin_addgift', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_addgift') {
        if (strpos($text, '|') === false) {
            sendmessage($from_id, 'فرمت اشتباه است. دوباره تلاش کنید: نام | تعداد استارز', $vsAdminKeyboard, 'HTML');
            step('home', $from_id);
            return;
        }
        [$name, $stars] = array_map('trim', explode('|', $text, 2));
        $stars = intval(preg_replace('/[^0-9]/', '', $stars));
        if ($stars <= 0) {
            sendmessage($from_id, 'تعداد استارز نامعتبر است. دوباره تلاش کنید: نام | تعداد استارز', $vsAdminKeyboard, 'HTML');
            step('home', $from_id);
            return;
        }
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        $gifts[] = ['name' => $name, 'stars' => $stars, 'icon' => null];
        vsSetSetting('vs_gifts', json_encode($gifts, JSON_UNESCAPED_UNICODE));
        sendmessage($from_id, '✅ گیفت جدید اضافه شد. قیمتش از همین حالا لحظه‌ای محاسبه می‌شود.', $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }
    // تغییر تعداد استارز یک گیفت مشخص
    if (preg_match('/^vsgiftedit_(\d+)$/', $datain, $m)) {
        $idx = intval($m[1]);
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        if (!isset($gifts[$idx])) return;
        update("user", "Processing_value", (string) $idx, "id", $from_id);
        $curStars = isset($gifts[$idx]['stars']) ? intval($gifts[$idx]['stars']) : 0;
        sendmessage($from_id, "تعداد استارز فعلی «{$gifts[$idx]['name']}»: {$curStars}\n\nتعداد استارز جدید را فقط به‌صورت عدد ارسال کنید (قیمت تومانی خودش لحظه‌ای محاسبه می‌شود):", null, 'HTML');
        step('vsadmin_editgiftprice', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_editgiftprice') {
        $idx = intval($user['Processing_value']);
        $newStars = intval(preg_replace('/[^0-9]/', '', $text));
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        if ($newStars <= 0 || !isset($gifts[$idx])) {
            sendmessage($from_id, 'عدد نامعتبر است.', $vsAdminKeyboard, 'HTML');
            step('home', $from_id);
            return;
        }
        $gifts[$idx]['stars'] = $newStars;
        unset($gifts[$idx]['price']); // از این به بعد قیمت همیشه از تعداد استارز محاسبه می‌شود
        vsSetSetting('vs_gifts', json_encode($gifts, JSON_UNESCAPED_UNICODE));
        sendmessage($from_id, "✅ تعداد استارز «{$gifts[$idx]['name']}» به {$newStars} تغییر کرد.", $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }
    // حذف یک گیفت مشخص
    if (preg_match('/^vsgiftdel_(\d+)$/', $datain, $m)) {
        $idx = intval($m[1]);
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        if (!isset($gifts[$idx])) return;
        $name = $gifts[$idx]['name'];
        array_splice($gifts, $idx, 1);
        vsSetSetting('vs_gifts', json_encode(array_values($gifts), JSON_UNESCAPED_UNICODE));
        Editmessagetext($from_id, $message_id, "🗑 گیفت «{$name}» حذف شد.", json_encode(['inline_keyboard' => []]));
        return;
    }
    // تنظیم ایموجی پریمیوم برای یک گیفت مشخص
    if (preg_match('/^vsgiftseticon_(\d+)$/', $datain, $m)) {
        $idx = intval($m[1]);
        update("user", "Processing_value", (string) $idx, "id", $from_id);
        Editmessagetext($from_id, $message_id, "🌟 یک پیام حاوی «ایموجی پریمیوم تلگرام» (از پنل ایموجی اختصاصی پرمیوم) برای این گیفت ارسال کنید.\nتوجه: باید ایموجی واقعی پریمیوم باشد، ایموجی معمولی قبول نمی‌شود.", json_encode(['inline_keyboard' => []]));
        step('vsadmin_setgifticon', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_setgifticon') {
        global $update;
        $idx = intval($user['Processing_value']);
        $iconId = extractCustomEmojiIdFromMessage($update['message'] ?? null);
        if ($iconId === null) {
            sendmessage($from_id, '❌ پیام شما شامل ایموجی پریمیوم واقعی نبود. دوباره تلاش کنید یا /panel را بزنید.', null, 'HTML');
            return;
        }
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        if (!isset($gifts[$idx])) { step('home', $from_id); return; }
        $gifts[$idx]['icon'] = $iconId;
        vsSetSetting('vs_gifts', json_encode($gifts, JSON_UNESCAPED_UNICODE));
        sendmessage($from_id, "✅ ایموجی پریمیوم برای «{$gifts[$idx]['name']}» ثبت شد.", $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }
    // حذف ایموجی یک گیفت مشخص
    if (preg_match('/^vsgiftdelicon_(\d+)$/', $datain, $m)) {
        $idx = intval($m[1]);
        $gifts = json_decode(vsSetting('vs_gifts'), true) ?: [];
        if (!isset($gifts[$idx])) return;
        $gifts[$idx]['icon'] = null;
        vsSetSetting('vs_gifts', json_encode($gifts, JSON_UNESCAPED_UNICODE));
        Editmessagetext($from_id, $message_id, "❌ ایموجی پریمیوم «{$gifts[$idx]['name']}» حذف شد.", json_encode(['inline_keyboard' => []]));
        return;
    }

    #--------------- ایموجی پریمیوم دکمه‌های اصلی (استارز/پرمیوم/گیفت/شماره مجازی/تلگرام و اینستاگرام) ---------------#
    if ($text === '🌟 ایموجی پریمیوم دکمه‌ها') {
        $kb = [
            [['text' => '⭐️ ایموجی دکمه استارز', 'callback_data' => 'vsadminicon_vs_icon_stars']],
            [['text' => '💎 ایموجی دکمه پرمیوم', 'callback_data' => 'vsadminicon_vs_icon_premium']],
            [['text' => '🎁 ایموجی دکمه گیفت', 'callback_data' => 'vsadminicon_vs_icon_gift']],
            [['text' => '📱 ایموجی دکمه شماره مجازی', 'callback_data' => 'vsadminicon_vs_icon_vnum']],
        ];
        if (function_exists('smmSetting')) {
            $kb[] = [['text' => '📱 ایموجی دکمه خدمات تلگرام', 'callback_data' => 'vsadminicon_smm_icon_telegram']];
            $kb[] = [['text' => '📸 ایموجی دکمه خدمات اینستاگرام', 'callback_data' => 'vsadminicon_smm_icon_instagram']];
        }
        sendmessage($from_id, 'ایموجی پریمیوم کدام دکمه را می‌خواهید تنظیم یا حذف کنید؟', json_encode(['inline_keyboard' => $kb], JSON_UNESCAPED_UNICODE), 'HTML');
        return;
    }
    if (preg_match('/^vsadminicon_((?:vs|smm)_icon_[a-z]+)$/', $datain, $m)) {
        $key = $m[1];
        update("user", "Processing_value", $key, "id", $from_id);
        $cur = vsSetting($key);
        $kb = [];
        if (!empty($cur)) {
            $kb[] = [['text' => '❌ حذف ایموجی فعلی', 'callback_data' => 'vsadminremoveicon_' . $key, 'style' => 'danger']];
        }
        Editmessagetext($from_id, $message_id, "🌟 یک پیام حاوی «ایموجی پریمیوم تلگرام» ارسال کنید تا روی این دکمه تنظیم شود.", json_encode(['inline_keyboard' => $kb], JSON_UNESCAPED_UNICODE));
        step('vsadmin_setbtnicon', $from_id);
        return;
    }
    if (preg_match('/^vsadminremoveicon_((?:vs|smm)_icon_[a-z]+)$/', $datain, $m)) {
        vsSetSetting($m[1], '');
        Editmessagetext($from_id, $message_id, '✅ ایموجی این دکمه حذف شد.', json_encode(['inline_keyboard' => []]));
        step('home', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_setbtnicon') {
        global $update;
        $iconId = extractCustomEmojiIdFromMessage($update['message'] ?? null);
        if ($iconId === null) {
            sendmessage($from_id, '❌ پیام شما شامل ایموجی پریمیوم واقعی نبود. دوباره تلاش کنید.', null, 'HTML');
            return;
        }
        vsSetSetting($user['Processing_value'], $iconId);
        sendmessage($from_id, '✅ ایموجی پریمیوم دکمه با موفقیت ثبت شد.', $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }

    #--------------- تنظیم متن قوانین ---------------#
    if ($text === '📜 تنظیم متن قوانین') {
        $cur = vsSetting('vs_terms_text');
        sendmessage($from_id, "📜 متن فعلی قوانین:\n\n{$cur}\n\nمتن جدید قوانین را ارسال کنید (کل متن جایگزین می‌شود):", null, 'HTML');
        step('vsadmin_setterms', $from_id);
        return;
    }
    if ($datain === '' && ($user['step'] ?? '') === 'vsadmin_setterms') {
        $newText = trim($text);
        if ($newText === '') {
            sendmessage($from_id, 'متن نمی‌تواند خالی باشد.', $vsAdminKeyboard, 'HTML');
            step('home', $from_id);
            return;
        }
        vsSetSetting('vs_terms_text', $newText);
        sendmessage($from_id, '✅ متن قوانین به‌روزرسانی شد.', $vsAdminKeyboard, 'HTML');
        step('home', $from_id);
        return;
    }

    #--------------- رنگ دکمه‌ها ---------------#
    if ($text === '🎨 تنظیم رنگ دکمه‌ها') {
        $kb = [
            [['text' => '⭐️ رنگ دکمه استارز', 'callback_data' => 'vsadmincolor_vs_style_stars']],
            [['text' => '💎 رنگ دکمه پرمیوم', 'callback_data' => 'vsadmincolor_vs_style_premium']],
            [['text' => '🎁 رنگ دکمه گیفت', 'callback_data' => 'vsadmincolor_vs_style_gift']],
            [['text' => '🙋 رنگ دکمه «خرید برای خودم»', 'callback_data' => 'vsadmincolor_vs_style_self']],
            [['text' => '📱 رنگ دکمه شماره مجازی', 'callback_data' => 'vsadmincolor_vs_style_vnum']],
        ];
        if (function_exists('smmSetting')) {
            $kb[] = [['text' => '📱 رنگ دکمه خدمات تلگرام', 'callback_data' => 'vsadmincolor_smm_style_telegram']];
            $kb[] = [['text' => '📸 رنگ دکمه خدمات اینستاگرام', 'callback_data' => 'vsadmincolor_smm_style_instagram']];
        }
        sendmessage($from_id, 'رنگ کدام دکمه را می‌خواهید تغییر دهید؟', json_encode(['inline_keyboard' => $kb], JSON_UNESCAPED_UNICODE), 'HTML');
        return;
    }
    if (preg_match('/^vsadmincolor_((?:vs|smm)_style_[a-z]+)$/', $datain, $m)) {
        $key = $m[1];
        $kb = json_encode(['inline_keyboard' => [[
            ['text' => '🔵 آبی (primary)', 'callback_data' => 'vsadminsetcolor_' . $key . '_primary'],
            ['text' => '🟢 سبز (success)', 'callback_data' => 'vsadminsetcolor_' . $key . '_success'],
            ['text' => '🔴 قرمز (danger)', 'callback_data' => 'vsadminsetcolor_' . $key . '_danger'],
        ]]], JSON_UNESCAPED_UNICODE);
        Editmessagetext($from_id, $message_id, 'یکی از رنگ‌های زیر را انتخاب کنید:', $kb);
        return;
    }
    if (preg_match('/^vsadminsetcolor_((?:vs|smm)_style_[a-z]+)_(primary|success|danger)$/', $datain, $m)) {
        vsSetSetting($m[1], $m[2]);
        Editmessagetext($from_id, $message_id, '✅ رنگ دکمه با موفقیت تغییر کرد.', json_encode(['inline_keyboard' => []]));
        return;
    }
}
