from aiogram import Router, F 
from aiogram.fsm.context import FSMContext 
from aiogram.types import ( 
    CallbackQuery, 
    InlineKeyboardButton, 
    InlineKeyboardMarkup, 
) 
 
router = Router() 
 
 
# ============================================================ 
# شناسه سرویس‌ها 
# ============================================================ 
 
SERVICE_ECONOMIC_DIRECT = "economic_direct" 
SERVICE_AWS_DIRECT = "aws_direct" 
 
SERVICE_ECONOMIC_TUNNEL = "economic_tunnel" 
SERVICE_AWS_TUNNEL = "aws_tunnel" 
 
SERVICE_GCORE_TUNNEL = "gcore_tunnel" 
SERVICE_KAMATERA_TUNNEL = "kamatera_tunnel" 
SERVICE_VULTR_TUNNEL = "vultr_tunnel" 
 
SERVICE_ECONOMIC_UNLIMITED_DIRECT = "economic_unlimited_direct" 
SERVICE_ECONOMIC_UNLIMITED_TUNNEL = "economic_unlimited_tunnel" 
 
SERVICE_GAMING = "gaming" 
SERVICE_RESIDENTIAL = "residential" 
 
 
# ============================================================ 
# اطلاعات کشورها 
# ============================================================ 
 
COUNTRIES = { 
    "de": { 
        "name": "آلمان", 
        "flag": "🇩🇪", 
    }, 
    "us": { 
        "name": "آمریکا", 
        "flag": "🇺🇸", 
    }, 
    "am": { 
        "name": "ارمنستان", 
        "flag": "🇦🇲", 
    }, 
    "tr": { 
        "name": "ترکیه", 
        "flag": "🇹🇷", 
    }, 
    "ae": { 
        "name": "امارات", 
        "flag": "🇦🇪", 
    }, 
} 
 
 
# ============================================================ 
# ساخت پلن 
# 
# price: 
#     قیمت نهایی / تخفیف‌خورده 
# 
# original_price: 
#     قیمت اصلی قبل از تخفیف 
# ============================================================ 
 
def make_plan( 
    plan_id: str, 
    name: str, 
    price: int | None, 
    original_price: int | None = None, 
): 
    return { 
        "id": plan_id, 
        "name": name, 
        "price": price, 
        "original_price": original_price, 
    } 
 
 
# ============================================================ 
# تعرفه‌ها 
# ============================================================ 
 
PLANS = { 
 
    # ======================================================== 
    # اقتصادی مستقیم 
    # ======================================================== 
 
    SERVICE_ECONOMIC_DIRECT: { 
        "title": "🇩🇪 اقتصادی مستقیم", 
        "provider": "Economic", 
        "connection": "مستقیم", 
        "volume_type": "حجمی", 
 
        "locations": ["de"], 
 
        "description": ( 
            "💰 قیمت اقتصادی\n" 
            "⚡ سرعت: 1Gbps\n" 
            "🌐 کیفیت شبکه: استاندارد\n" 
            "🛡 کیفیت IP: استاندارد" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 5000), 
            make_plan("10", "۱۰ گیگ", 39000, 41000), 
            make_plan("20", "۲۰ گیگ", 70000, 74000), 
            make_plan("25", "۲۵ گیگ", 85000, 89000), 
            make_plan("30", "۳۰ گیگ", 99000, 104000), 
            make_plan("40", "۴۰ گیگ", 126000, 133000), 
            make_plan("50", "۵۰ گیگ", 152000, 160000), 
            make_plan("60", "۶۰ گیگ", 177000, 187000), 
            make_plan("100", "۱۰۰ گیگ", 273000, 288000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # AWS مستقیم 
    # ======================================================== 
 
    SERVICE_AWS_DIRECT: { 
        "title": "☁️ AWS مستقیم", 
        "provider": "AWS", 
        "connection": "مستقیم", 
        "volume_type": "حجمی", 
 
        "locations": ["de", "us"], 
 
        "description": ( 
            "💰 قیمت متعادل\n" 
            "⚡ سرعت: 5Gbps\n" 
            "🌐 کیفیت شبکه: خوب\n" 
            "🛡 کیفیت IP: استثنایی" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 13000), 
            make_plan("10", "۱۰ گیگ", 111000, 117000), 
            make_plan("20", "۲۰ گیگ", 200000, 210000), 
            make_plan("25", "۲۵ گیگ", 241000, 254000), 
            make_plan("30", "۳۰ گیگ", 281000, 296000), 
            make_plan("40", "۴۰ گیگ", 359000, 378000), 
            make_plan("50", "۵۰ گیگ", 434000, 456000), 
            make_plan("60", "۶۰ گیگ", 506000, 533000), 
            make_plan("100", "۱۰۰ گیگ", 780000, 821000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # اقتصادی تانل 
    # ======================================================== 
 
    SERVICE_ECONOMIC_TUNNEL: { 
        "title": "🔒 اقتصادی تانل", 
        "provider": "Economic", 
        "connection": "تانل", 
        "volume_type": "حجمی", 
 
        "locations": ["de"], 
 
        "description": ( 
            "💰 قیمت اقتصادی\n" 
            "⚡ سرعت: 1Gbps\n" 
            "🌐 کیفیت شبکه: استاندارد\n" 
            "🛡 کیفیت IP: استاندارد" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 10000, 11000), 
            make_plan("10", "۱۰ گیگ", 90000, 94000), 
            make_plan("20", "۲۰ گیگ", 161000, 169000), 
            make_plan("25", "۲۵ گیگ", 194000, 204000), 
            make_plan("30", "۳۰ گیگ", 227000, 239000), 
            make_plan("40", "۴۰ گیگ", 289000, 304000), 
            make_plan("50", "۵۰ گیگ", 349000, 368000), 
            make_plan("60", "۶۰ گیگ", 408000, 429000), 
            make_plan("100", "۱۰۰ گیگ", 628000, 661000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # AWS تانل 
    # ======================================================== 
 
    SERVICE_AWS_TUNNEL: { 
        "title": "🚀 AWS تانل", 
        "provider": "AWS", 
        "connection": "تانل", 
        "volume_type": "حجمی", 
 
        "locations": ["de"], 
 
        "description": ( 
            "⭐ پیشنهاد ما\n" 
            "💰 بالاترین رده قیمتی\n" 
            "⚡ سرعت: 5Gbps\n" 
            "🌐 کیفیت شبکه: خوب\n" 
            "🛡 کیفیت IP: استثنایی" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 18000), 
            make_plan("10", "۱۰ گیگ", 155000, 164000), 
            make_plan("20", "۲۰ گیگ", 279000, 294000), 
            make_plan("25", "۲۵ گیگ", 337000, 355000), 
            make_plan("30", "۳۰ گیگ", 394000, 414000), 
            make_plan("40", "۴۰ گیگ", 502000, 529000), 
            make_plan("50", "۵۰ گیگ", 607000, 639000), 
            make_plan("60", "۶۰ گیگ", 708000, 746000), 
            make_plan("100", "۱۰۰ گیگ", 1092000, 1150000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # Gcore تانل 
    # ======================================================== 
 
    SERVICE_GCORE_TUNNEL: { 
        "title": "🇩🇪 اقتصادی Gcore تانل", 
        "provider": "Gcore", 
        "connection": "تانل", 
        "volume_type": "حجمی", 
 
        "locations": ["de"], 
 
        "description": ( 
            "💰 پلن اقتصادی\n" 
            "🔒 اتصال از طریق تانل\n" 
            "🌍 موقعیت سرور: آلمان\n" 
            "📦 بسته‌های حجمی" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", None), 
            make_plan("10", "۱۰ گیگ", None), 
            make_plan("20", "۲۰ گیگ", None), 
            make_plan("25", "۲۵ گیگ", None), 
            make_plan("30", "۳۰ گیگ", None), 
            make_plan("40", "۴۰ گیگ", None), 
            make_plan("50", "۵۰ گیگ", None), 
            make_plan("60", "۶۰ گیگ", None), 
            make_plan("100", "۱۰۰ گیگ", None), 
        ], 
    }, 
 
 
    # ======================================================== 
    # Kamatera تانل 
    # ======================================================== 
 
    SERVICE_KAMATERA_TUNNEL: { 
        "title": "🇩🇪 Kamatera تانل", 
        "provider": "Kamatera", 
        "connection": "تانل", 
        "volume_type": "حجمی", 
 
        "locations": ["de"], 
 
        "description": ( 
            "🔒 اتصال از طریق تانل\n" 
            "🌍 موقعیت سرور: آلمان\n" 
            "📦 بسته‌های حجمی" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 13000, 14000), 
            make_plan("10", "۱۰ گیگ", 117000, 123000), 
            make_plan("20", "۲۰ گیگ", 210000, 221000), 
            make_plan("25", "۲۵ گیگ", 253000, 267000), 
            make_plan("30", "۳۰ گیگ", 295000, 311000), 
            make_plan("40", "۴۰ گیگ", 377000, 397000), 
            make_plan("50", "۵۰ گیگ", 455000, 479000), 
            make_plan("60", "۶۰ گیگ", 531000, 559000), 
            make_plan("100", "۱۰۰ گیگ", 819000, 862000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # Vultr تانل 
    # ======================================================== 
 
    SERVICE_VULTR_TUNNEL: { 
        "title": "🌍 Vultr تانل", 
        "provider": "Vultr", 
        "connection": "تانل", 
        "volume_type": "حجمی", 
 
        "locations": ["de", "us"], 
 
        "description": ( 
            "🔒 اتصال از طریق تانل\n" 
            "🌍 انتخاب موقعیت سرور\n" 
            "📦 بسته‌های حجمی" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 24000, 26000), 
            make_plan("10", "۱۰ گیگ", 217000, 229000), 
            make_plan("20", "۲۰ گیگ", 391000, 411000), 
            make_plan("25", "۲۵ گیگ", 472000, 497000), 
            make_plan("30", "۳۰ گیگ", 551000, 580000), 
            make_plan("40", "۴۰ گیگ", 703000, 740000), 
            make_plan("50", "۵۰ گیگ", 850000, 894000), 
            make_plan("60", "۶۰ گیگ", 992000, 1044000), 
            make_plan("100", "۱۰۰ گیگ", 1529000, 1609000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # اقتصادی نامحدود مستقیم 
    # ======================================================== 
 
    SERVICE_ECONOMIC_UNLIMITED_DIRECT: { 
        "title": "🇩🇪 اقتصادی نامحدود مستقیم", 
        "provider": "Economic", 
        "connection": "مستقیم", 
        "volume_type": "نامحدود", 
 
        "locations": ["de"], 
 
        "description": ( 
            "♾️ ترافیک نامحدود\n" 
            "⚡ سرعت: 1Gbps\n" 
            "🌐 اتصال مستقیم\n" 
            "🌍 موقعیت سرور: آلمان" 
        ), 
 
        "plans": [ 
            make_plan("1user", "تک کاربره", 172000, 182000), 
            make_plan("2user", "دو کاربره", 284000, 298000), 
            make_plan("5user", "پنج کاربره", 558000, 587000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # اقتصادی نامحدود تانل 
    # ======================================================== 
 
    SERVICE_ECONOMIC_UNLIMITED_TUNNEL: { 
        "title": "🔒 اقتصادی نامحدود تانل", 
        "provider": "Economic", 
        "connection": "تانل", 
        "volume_type": "نامحدود", 
 
        "locations": ["de"], 
 
        "description": ( 
            "♾️ ترافیک نامحدود\n" 
            "🔒 اتصال از طریق تانل\n" 
            "🌍 موقعیت سرور: آلمان" 
        ), 
 
        "plans": [ 
            make_plan("1user", "تک کاربره", 396000, 417000), 
            make_plan("2user", "دو کاربره", 652000, 686000), 
            make_plan("5user", "پنج کاربره", 1282000, 1349000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # گیمینگ 
    # 
    # همه کشورها فعلاً تعرفه یکسان دارند. 
    # کشور انتخاب‌شده همراه سفارش ذخیره می‌شود. 
    # ======================================================== 
 
    SERVICE_GAMING: { 
        "title": "🎮 کاهش پینگ - گیمینگ", 
        "provider": "Gaming", 
        "connection": "گیمینگ", 
        "volume_type": "گیمینگ", 
 
        "locations": [ 
            "am", 
            "de", 
            "tr", 
            "ae", 
        ], 
 
        "description": ( 
            "🎮 سرویس مخصوص کاهش پینگ بازی\n" 
            "🌍 انتخاب موقعیت سرور\n" 
            "📍 ارمنستان، آلمان، ترکیه یا امارات" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 18000), 
            make_plan("10", "۱۰ گیگ", 155000, 164000), 
            make_plan("20", "۲۰ گیگ", 279000, 294000), 
            make_plan("25", "۲۵ گیگ", 337000, 355000), 
            make_plan("30", "۳۰ گیگ", 394000, 414000), 
            make_plan("40", "۴۰ گیگ", 502000, 529000), 
            make_plan("50", "۵۰ گیگ", 607000, 639000), 
            make_plan("60", "۶۰ گیگ", 708000, 746000), 
            make_plan("100", "۱۰۰ گیگ", 1092000, 1150000), 
        ], 
    }, 
 
 
    # ======================================================== 
    # آی‌پی رزیدنتال 
    # ======================================================== 
 
    SERVICE_RESIDENTIAL: { 
        "title": "🏠 آی‌پی مسکونی تانل", 
        "provider": "Residential", 
        "connection": "تانل", 
        "volume_type": "مسکونی", 
 
        "locations": ["us"], 
 
        "description": ( 
            "🏠 آی‌پی مسکونی\n" 
            "🇺🇸 موقعیت: آمریکا\n" 
            "⚡ سرعت: 10Gbps\n" 
            "🔒 اتصال از طریق تانل" 
        ), 
 
        "plans": [ 
            make_plan("1", "۱ گیگ", 47000, 50000), 
            make_plan("10", "۱۰ گیگ", 423000, 446000), 
            make_plan("20", "۲۰ گیگ", 762000, 802000), 
            make_plan("25", "۲۵ گیگ", 920000, 969000), 
            make_plan("30", "۳۰ گیگ", 1074000, 1131000), 
            make_plan("40", "۴۰ گیگ", 1371000, 1443000), 
            make_plan("50", "۵۰ گیگ", 1656000, 1743000), 
            make_plan("60", "۶۰ گیگ", 1933000, 2035000), 
            make_plan("100", "۱۰۰ گیگ", 2981000, 3138000), 
        ], 
    }, 
} 
 
 
# ============================================================ 
# ابزارهای عمومی 
# ============================================================ 
 
def format_price(price: int) -> str: 
    """ 
    1092000 
    ↓ 
    ۱٬۰۹۲٬۰۰۰ 
    """ 
 
    return ( 
        f"{price:,}" 
        .translate( 
            str.maketrans( 
                "0123456789", 
                "۰۱۲۳۴۵۶۷۸۹", 
            ) 
        ) 
        .replace(",", "٬") 
    ) 
 
 
def price_text(price: int | None) -> str: 
    if price is None: 
        return "قیمت به‌زودی" 
 
    return f"{format_price(price)} تومان" 
 
 
def discount_percent( 
    price: int | None, 
    original_price: int | None, 
): 
    if ( 
        price is None 
        or original_price is None 
        or original_price <= 0 
        or price >= original_price 
    ): 
        return None 
 
    return round( 
        ((original_price - price) / original_price) * 100 
    ) 
 
 
def plan_price_text(plan: dict) -> str: 
    """ 
    نمایش قیمت به شکل: 
 
    ۱۶۴٬۰۰۰ تومان 
    ۱۵۵٬۰۰۰ تومان 
 
    و در صورت تخفیف: 
    ~۱۶۴٬۰۰۰ تومان~ ۱۵۵٬۰۰۰ تومان 🔥 
    """ 
 
    price = plan.get("price") 
    original_price = plan.get("original_price") 
 
    if price is None: 
        return "قیمت به‌زودی" 
 
    if ( 
        original_price is not None 
        and original_price > price 
    ): 
        discount = discount_percent( 
            price, 
            original_price, 
        ) 
 
        text = ( 
            f"<s>{format_price(original_price)} تومان</s> " 
            f"<b>{format_price(price)} تومان</b>" 
        ) 
 
        if discount is not None: 
            text += f" 🔥 {discount}% تخفیف" 
 
        return text 
 
    return f"<b>{format_price(price)} تومان</b>" 
 
 
def button( 
    text: str, 
    callback_data: str, 
) -> InlineKeyboardButton: 
    return InlineKeyboardButton( 
        text=text, 
        callback_data=callback_data, 
    ) 
 
 
def make_keyboard(rows) -> InlineKeyboardMarkup: 
    return InlineKeyboardMarkup( 
        inline_keyboard=rows 
    ) 
 
 
def back_button( 
    callback_data: str, 
): 
    return [ 
        button( 
            "🔙 بازگشت", 
            callback_data, 
        ) 
    ] 
 
 
# ============================================================ 
# کشور 
# ============================================================ 
 
def country_name( 
    country_code: str, 
) -> str: 
    country = COUNTRIES.get( 
        country_code 
    ) 
 
    if not country: 
        return country_code 
 
    return country["name"] 
 
 
def country_label( 
    country_code: str, 
) -> str: 
    country = COUNTRIES.get( 
        country_code 
    ) 
 
    if not country: 
        return country_code 
 
    return ( 
        f"{country['flag']} " 
        f"{country['name']}" 
    ) 
 
 
# ============================================================ 
# دسته‌بندی سرویس 
# ============================================================ 
 
def service_category_keyboard(): 
    return make_keyboard([ 
        [ 
            button( 
                "🖥 آی‌پی ثابت دیتاسنتر", 
                "category_datacenter", 
            ) 
        ], 
        [ 
            button( 
                "🎮 کاهش پینگ - گیمینگ", 
                "category_gaming", 
            ) 
        ], 
        [ 
            button( 
                "🏠 آی‌پی ثابت مسکونی", 
                "category_residential", 
            ) 
        ], 
        back_button( 
            "main_menu" 
        ), 
    ]) 
 
 
@router.callback_query( 
    F.data == "buy_subscription" 
) 
async def buy_subscription( 
    callback: CallbackQuery, 
): 
    await callback.message.edit_text( 
        "🛒 <b>خرید اشتراک</b>\n\n" 
        "نوع سرویس موردنظر خود را انتخاب کنید:", 
        reply_markup=service_category_keyboard(), 
    ) 
 
    await callback.answer() 
 
 
# ============================================================ 
# دیتاسنتر 
# ============================================================ 
 
def volume_keyboard(): 
    return make_keyboard([ 
        [ 
            button( 
                "📦 حجمی", 
                "volume_metered", 
            ), 
            button( 
                "♾️ نامحدود", 
                "volume_unlimited", 
            ), 
        ], 
        back_button( 
            "buy_subscription" 
        ), 
    ]) 
 
 
@router.callback_query( 
    F.data == "category_datacenter" 
) 
async def category_datacenter( 
    callback: CallbackQuery, 
): 
    await callback.message.edit_text( 
        "🖥 <b>آی‌پی ثابت دیتاسنتر</b>\n\n" 
        "نوع ترافیک موردنظر خود را انتخاب کنید:", 
        reply_markup=volume_keyboard(), 
    ) 
 
    await callback.answer() 
 
 
# ============================================================ 
# انتخاب اتصال 
# ============================================================ 
 
CONNECTION_DESCRIPTION = ( 
    "🔌 <b>نوع اتصال را انتخاب کنید</b>\n\n" 
    "🔒 <b>تانل</b>\n" 
    "اتصال از طریق تانل برقرار می‌شود.\n\n" 
    "🌐 <b>مستقیم</b>\n" 
    "اتصال بدون تانل برقرار می‌شود.\n\n" 
    "یکی از روش‌های اتصال را انتخاب کنید:" 
) 
 
 
@router.callback_query( 
    F.data.in_({ 
        "volume_metered", 
        "volume_unlimited", 
    }) 
) 
async def choose_volume( 
    callback: CallbackQuery, 
): 
    volume = ( 
        "metered" 
        if callback.data == "volume_metered" 
        else "unlimited" 
    ) 
 
    await callback.message.edit_text( 
        CONNECTION_DESCRIPTION, 
        reply_markup=make_keyboard([ 
            [ 
                button( 
                    "🔒 تانل (پیشنهادی)", 
                    f"connection_tunnel_{volume}", 
                ) 
            ], 
            [ 
                button( 
                    "🌐 اتصال مستقیم", 
                    f"connection_direct_{volume}", 
                ) 
            ], 
            back_button( 
                "category_datacenter" 
            ), 
        ]), 
    ) 
 
    await callback.answer() 
 
 
# ============================================================ 
# انتخاب ارائه‌دهنده 
# ============================================================ 
 
def provider_keyboard( 
    volume: str, 
    connection: str, 
): 
    rows = [] 
 
    if ( 
        volume == "metered" 
        and connection == "tunnel" 
    ): 
        rows.extend([ 
            [ 
                button( 
                    "☁️ AWS - آلمان", 
                    "provider_aws_tunnel_de", 
                ) 
            ], 
            [ 
                button( 
                    "🇩🇪 اقتصادی Gcore - آلمان", 
                    "provider_gcore_tunnel_de", 
                ) 
            ], 
            [ 
                button( 
                    "🇩🇪 Kamatera - آلمان", 
                    "provider_kamatera_tunnel_de", 
                ) 
            ], 
            [ 
                button( 
                    "🌍 Vultr", 
                    "provider_vultr_tunnel", 
                ) 
            ], 
        ]) 
 
    elif ( 
        volume == "metered" 
        and connection == "direct" 
    ): 
        rows.extend([ 
            [ 
                button( 
                    "🇩🇪 اقتصادی - آلمان", 
                    "provider_economic_direct_de", 
                ) 
            ], 
            [ 
                button( 
                    "☁️ AWS", 
                    "provider_aws_direct", 
                ) 
            ], 
        ]) 
 
    elif ( 
        volume == "unlimited" 
        and connection == "tunnel" 
    ): 
        rows.append([ 
            button( 
                "🇩🇪 اقتصادی نامحدود تانل - آلمان", 
                "provider_unlimited_tunnel_de", 
            ) 
        ]) 
 
    elif ( 
        volume == "unlimited" 
        and connection == "direct" 
    ): 
        rows.append([ 
            button( 
                "🇩🇪 اقتصادی نامحدود مستقیم - آلمان", 
                "provider_unlimited_direct_de", 
            ) 
        ]) 
 
    rows.append( 
        back_button( 
            "category_datacenter" 
        ) 
    ) 
 
    return make_keyboard(rows) 
 
 
@router.callback_query( 
    F.data.in_({ 
        "connection_tunnel_metered", 
        "connection_direct_metered", 
        "connection_tunnel_unlimited", 
        "connection_direct_unlimited", 
    }) 
) 
async def choose_connection( 
    callback: CallbackQuery, 
): 
    parts = callback.data.split("_") 
 
    connection = parts[1] 
    volume = parts[2] 
 
    await callback.message.edit_text( 
        "🖥 <b>انتخاب سرویس دیتاسنتر</b>\n\n" 
        f"📦 نوع ترافیک: " 
        f"{'حجمی' if volume == 'metered' else 'نامحدود'}\n" 
        f"🔌 نوع اتصال: " 
        f"{'تانل' if connection == 'tunnel' else 'مستقیم'}\n\n" 
        "سرویس موردنظر خود را انتخاب کنید:", 
        reply_markup=provider_keyboard( 
            volume, 
            connection, 
        ), 
    ) 
 
    await callback.answer() 
 
 
# ============================================================ 
# نمایش کشورها 
# ============================================================ 
 
def country_keyboard( 
    service_type: str, 
    back_callback: str, 
): 
    service = PLANS[service_type] 
 
    rows = [] 
    buttons = [] 
 
    for country_code in service.get( 
        "locations", 
        [], 
    ): 
        buttons.append( 
            button( 
                country_label(country_code), 
                f"region_{service_type}_{country_code}", 
            ) 
        ) 
 
    for i in range( 
        0, 
        len(buttons), 
        2, 
    ): 
        rows.append( 
            buttons[i:i + 2] 
        ) 
 
    rows.append( 
        back_button( 
            back_callback 
        ) 
    ) 
 
    return make_keyboard(rows) 
 
 
# ============================================================ 
# نمایش پلن‌ها 
# ============================================================ 
 
def plan_keyboard( 
    service_type: str, 
    region: str | None = None, 
): 
    service = PLANS[service_type] 
 
    rows = [] 
    buttons = [] 
 
    for plan in service["plans"]: 
 
        price = plan.get("price") 
 
        if price is None: 
            text = ( 
                f"{plan['name']} — " 
                "به‌زودی" 
            ) 
        else: 
            original_price = plan.get( 
                "original_price" 
            ) 
 
            if ( 
                original_price is not None 
                and original_price > price 
            ): 
                text = ( 
                    f"{plan['name']} — " 
                    f"{format_price(price)} تومان " 
                    f"🔥" 
                ) 
            else: 
                text = ( 
                    f"{plan['name']} — " 
                    f"{format_price(price)} تومان" 
                ) 
 
        # ---------------------------------------------------- 
        # کشور داخل callback ذخیره می‌شود 
        # 
        # مثال: 
        # buy_gaming_10_am 
        # 
        # یعنی: 
        # gaming 
        # plan = 10GB 
        # country = Armenia 
        # ---------------------------------------------------- 
 
        callback_data = ( 
            f"buy_{service_type}_" 
            f"{plan['id']}_" 
            f"{region or 'none'}" 
        ) 
 
        buttons.append( 
            button( 
                text, 
                callback_data, 
            ) 
        ) 
 
    for i in range( 
        0, 
        len(buttons), 
        2, 
    ): 
        rows.append( 
            buttons[i:i + 2] 
        ) 
 
    if region: 
        rows.append( 
            back_button( 
                f"region_{service_type}_back" 
            ) 
        ) 
    else: 
        rows.append( 
            back_button( 
                "buy_subscription" 
            ) 
        ) 
 
    return make_keyboard(rows) 
 
 
async def show_service_plans( 
    callback: CallbackQuery, 
    service_type: str, 
    region: str | None = None, 
): 
    service = PLANS[service_type] 
 
    selected_country_text = "" 
 
    if ( 
        region 
        and region in COUNTRIES 
    ): 
        selected_country_text = ( 
            f"\n📍 موقعیت انتخاب‌شده: " 
            f"<b>{country_label(region)}</b>\n" 
        ) 
 
    text = ( 
        f"<b>{service['title']}</b>\n\n" 
        f"{service['description']}\n" 
        f"{selected_country_text}\n" 
        "📦 <b>بسته‌های یک‌ماهه</b>\n" 
        "بسته موردنظر خود را انتخاب کنید:" 
    ) 
 
    await callback.message.edit_text( 
        text, 
        reply_markup=plan_keyboard( 
            service_type, 
            region, 
        ), 
    ) 
 
    await callback.answer() 
 
 
async def open_service( 
    callback: CallbackQuery, 
    service_type: str, 
    region: str | None = None, 
): 
    if service_type not in PLANS: 
        await callback.answer( 
            "سرویس پیدا نشد.", 
            show_alert=True, 
        ) 
        return 
 
    await show_service_plans( 
        callback, 
        service_type, 
        region, 
    ) 
 
 
# ============================================================ 
# اقتصادی مستقیم 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_economic_direct_de" 
) 
async def provider_economic_direct( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_ECONOMIC_DIRECT, 
        "de", 
    ) 
 
 
# ============================================================ 
# AWS مستقیم 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_aws_direct" 
) 
async def provider_aws_direct( 
    callback: CallbackQuery, 
): 
    await callback.message.edit_text( 
        "☁️ <b>AWS مستقیم</b>\n\n" 
        "کشور سرور را انتخاب کنید:", 
        reply_markup=make_keyboard([ 
            [ 
                button( 
                    "🇩🇪 آلمان", 
                    "region_aws_direct_de", 
                ), 
                button( 
                    "🇺🇸 آمریکا", 
                    "region_aws_direct_us", 
                ), 
            ], 
            back_button( 
                "connection_direct_metered" 
            ), 
        ]), 
    ) 
 
    await callback.answer() 
 
 
@router.callback_query( 
    F.data.in_({ 
        "region_aws_direct_de", 
        "region_aws_direct_us", 
    }) 
) 
async def aws_direct_country( 
    callback: CallbackQuery, 
): 
    region = callback.data.rsplit( 
        "_", 
        1, 
    )[1] 
 
    await open_service( 
        callback, 
        SERVICE_AWS_DIRECT, 
        region, 
    ) 
 
 
# ============================================================ 
# AWS تانل 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_aws_tunnel_de" 
) 
async def provider_aws_tunnel( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_AWS_TUNNEL, 
        "de", 
    ) 
 
 
# ============================================================ 
# Gcore تانل 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_gcore_tunnel_de" 
) 
async def provider_gcore_tunnel( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_GCORE_TUNNEL, 
        "de", 
    ) 
 
 
# ============================================================ 
# Kamatera تانل 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_kamatera_tunnel_de" 
) 
async def provider_kamatera_tunnel( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_KAMATERA_TUNNEL, 
        "de", 
    ) 
 
 
# ============================================================ 
# Vultr تانل 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_vultr_tunnel" 
) 
async def provider_vultr_tunnel( 
    callback: CallbackQuery, 
): 
    await callback.message.edit_text( 
        "🌍 <b>Vultr تانل</b>\n\n" 
        "کشور سرور را انتخاب کنید:", 
        reply_markup=make_keyboard([ 
            [ 
                button( 
                    "🇩🇪 آلمان", 
                    "region_vultr_tunnel_de", 
                ), 
                button( 
                    "🇺🇸 آمریکا", 
                    "region_vultr_tunnel_us", 
                ), 
            ], 
            back_button( 
                "connection_tunnel_metered" 
            ), 
        ]), 
    ) 
 
    await callback.answer() 
 
 
@router.callback_query( 
    F.data.in_({ 
        "region_vultr_tunnel_de", 
        "region_vultr_tunnel_us", 
    }) 
) 
async def vultr_tunnel_country( 
    callback: CallbackQuery, 
): 
    region = callback.data.rsplit( 
        "_", 
        1, 
    )[1] 
 
    await open_service( 
        callback, 
        SERVICE_VULTR_TUNNEL, 
        region, 
    ) 
 
 
# ============================================================ 
# نامحدود مستقیم 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_unlimited_direct_de" 
) 
async def provider_unlimited_direct( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_ECONOMIC_UNLIMITED_DIRECT, 
        "de", 
    ) 
 
 
# ============================================================ 
# نامحدود تانل 
# ============================================================ 
 
@router.callback_query( 
    F.data == "provider_unlimited_tunnel_de" 
) 
async def provider_unlimited_tunnel( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_ECONOMIC_UNLIMITED_TUNNEL, 
        "de", 
    ) 
 
 
# ============================================================ 
# گیمینگ 
# ============================================================ 
 
@router.callback_query( 
    F.data == "category_gaming" 
) 
async def category_gaming( 
    callback: CallbackQuery, 
): 
    await callback.message.edit_text( 
        "🎮 <b>کاهش پینگ - گیمینگ</b>\n\n" 
        "موقعیت سرور موردنظر خود را انتخاب کنید:", 
        reply_markup=make_keyboard([ 
            [ 
                button( 
                    "🇦🇲 ارمنستان", 
                    "region_gaming_am", 
                ), 
                button( 
                    "🇩🇪 آلمان", 
                    "region_gaming_de", 
                ), 
            ], 
            [ 
                button( 
                    "🇹🇷 ترکیه", 
                    "region_gaming_tr", 
                ), 
                button( 
                    "🇦🇪 امارات", 
                    "region_gaming_ae", 
                ), 
            ], 
            back_button( 
                "buy_subscription" 
            ), 
        ]), 
    ) 
 
    await callback.answer() 
 
 
@router.callback_query( 
    F.data.in_({ 
        "region_gaming_am", 
        "region_gaming_de", 
        "region_gaming_tr", 
        "region_gaming_ae", 
    }) 
) 
async def gaming_location( 
    callback: CallbackQuery, 
): 
    region = callback.data.rsplit( 
        "_", 
        1, 
    )[1] 
 
    await open_service( 
        callback, 
        SERVICE_GAMING, 
        region, 
    ) 
 
 
# ============================================================ 
# رزیدنتال 
# ============================================================ 
 
@router.callback_query( 
    F.data == "category_residential" 
) 
async def category_residential( 
    callback: CallbackQuery, 
): 
    await open_service( 
        callback, 
        SERVICE_RESIDENTIAL, 
        "us", 
    ) 
 
 
# ============================================================ 
# انتخاب بسته 
# 
# buy_<service>_<plan>_<region> 
# 
# مثال: 
# 
# buy_aws_direct_10_de 
# buy_gaming_10_am 
# buy_vultr_tunnel_20_us 
# ============================================================ 
 
@router.callback_query( 
    F.data.startswith("buy_") 
) 
async def select_plan( 
    callback: CallbackQuery, 
): 
    data = callback.data 
 
    parts = data.split("_") 
 
    if len(parts) < 4: 
        await callback.answer( 
            "خطا در انتخاب بسته.", 
            show_alert=True, 
        ) 
        return 
 
    # آخرین بخش = کشور 
    region = parts[-1] 
 
    # یکی مانده به آخر = پلن 
    plan_id = parts[-2] 
 
    # بقیه = سرویس 
    service_type = "_".join( 
        parts[1:-2] 
    ) 
 
    if service_type not in PLANS: 
        await callback.answer( 
            "سرویس پیدا نشد.", 
            show_alert=True, 
        ) 
        return 
 
    service = PLANS[service_type] 
 
    # -------------------------------------------------------- 
    # کشور 
    # -------------------------------------------------------- 
 
    if region == "none": 
        region = None 
 
    if region is not None: 
        if region not in service.get( 
            "locations", 
            [], 
        ): 
            await callback.answer( 
                "موقعیت انتخاب‌شده برای این سرویس معتبر نیست.", 
                show_alert=True, 
            ) 
            return 
 
    # -------------------------------------------------------- 
    # پیدا کردن پلن 
    # -------------------------------------------------------- 
 
    selected_plan = None 
 
    for plan in service["plans"]: 
        if plan["id"] == plan_id: 
            selected_plan = plan 
            break 
 
    if selected_plan is None: 
        await callback.answer( 
            "بسته پیدا نشد.", 
            show_alert=True, 
        ) 
        return 
 
    price = selected_plan.get( 
        "price" 
    ) 
 
    if price is None: 
        await callback.answer( 
            "قیمت این سرویس هنوز مشخص نشده است.", 
            show_alert=True, 
        ) 
        return 
 
    # -------------------------------------------------------- 
    # کشور 
    # -------------------------------------------------------- 
 
    if region: 
        location_text = country_label( 
            region 
        ) 
    else: 
        location_text = "نامشخص" 
 
    # -------------------------------------------------------- 
    # قیمت 
    # -------------------------------------------------------- 
 
    final_price_text = plan_price_text( 
        selected_plan 
    ) 
 
    # -------------------------------------------------------- 
    # تأیید خرید 
    # 
    # region عمداً داخل callback می‌رود. 
    # payment.py باید آن را دریافت کند. 
    # -------------------------------------------------------- 
 
    keyboard = make_keyboard([ 
        [ 
            button( 
                "💳 ادامه خرید", 
                ( 
                    f"confirm_{service_type}_" 
                    f"{plan_id}_" 
                    f"{region or 'none'}" 
                ), 
            ) 
        ], 
        [ 
            button( 
                "🔙 بازگشت به بسته‌ها", 
                ( 
                    f"backplans_" 
                    f"{service_type}_" 
                    f"{region or 'none'}" 
                ), 
            ) 
        ], 
    ]) 
 
    text = ( 
        "🛒 <b>تأیید خرید</b>\n\n" 
        f"📦 سرویس: " 
        f"{service['title']}\n" 
        f"🏢 ارائه‌دهنده: " 
        f"{service['provider']}\n" 
        f"🌍 موقعیت: " 
        f"<b>{location_text}</b>\n" 
        f"🔌 نوع اتصال: " 
        f"{service['connection']}\n" 
        f"💾 بسته: " 
        f"{selected_plan['name']}\n" 
        "⏱ مدت: یک ماه\n" 
        f"💰 قیمت: " 
        f"{final_price_text}\n\n" 
        "برای ادامه روی «ادامه خرید» بزنید." 
    ) 
 
    await callback.message.edit_text( 
        text, 
        reply_markup=keyboard, 
    ) 
 
    await callback.answer() 
 
 
# ============================================================ 
# برگشت به بسته‌ها 
# ============================================================ 
 
@router.callback_query( 
    F.data.startswith("backplans_") 
) 
async def back_to_plans( 
    callback: CallbackQuery, 
): 
    data = callback.data 
 
    parts = data.split("_") 
 
    if len(parts) < 3: 
        await callback.answer( 
            "سرویس پیدا نشد.", 
            show_alert=True, 
        ) 
        return 
 
    region = parts[-1] 
 
    service_type = "_".join( 
        parts[1:-1] 
    ) 
 
    if service_type not in PLANS: 
        await callback.answer( 
            "سرویس پیدا نشد.", 
            show_alert=True, 
        ) 
        return 
 
    if region == "none": 
        region = None 
 
    await show_service_plans( 
        callback, 
        service_type, 
        region, 
    ) 


# ============================================================
# برگشت از صفحه انتخاب کشور
# ============================================================ 
 
@router.callback_query( 
    F.data.endswith("_back") 
) 
async def region_back( 
    callback: CallbackQuery, 
): 
    data = callback.data 
 
    if not data.startswith("region_"): 
        return 
 
    parts = data.split("_") 
 
    service_type = "_".join( 
        parts[1:-1] 
    ) 
 
    if service_type not in PLANS: 
        await callback.answer( 
            "سرویس پیدا نشد.", 
            show_alert=True, 
        ) 
        return 
 
    # برای سرویس‌هایی که قبل از کشور صفحه سرویس دارند، 
    # دوباره همان صفحه پلن را باز می‌کنیم. 
    await show_service_plans( 
        callback, 
        service_type, 
        None, 
    ) 
 
 
# ============================================================
# لیست تعرفه‌ها
# ============================================================

def tariff_category_keyboard():
    return make_keyboard([
        [
            button(
                "🖥 آی‌پی ثابت دیتاسنتر",
                "tariff_category_datacenter",
            )
        ],
        [
            button(
                "🎮 کاهش پینگ - گیمینگ",
                "tariff_category_gaming",
            )
        ],
        [
            button(
                "🏠 آی‌پی ثابت مسکونی",
                "tariff_category_residential",
            )
        ],
        back_button(
            "main_menu"
        ),
    ])


@router.callback_query(
    F.data == "plans_list"
)
async def plans_list(
    callback: CallbackQuery,
):
    await callback.message.edit_text(
        "💰 <b>تعرفه اشتراک‌ها</b>\n\n"
        "نوع سرویس موردنظر خود را انتخاب کنید:",
        reply_markup=tariff_category_keyboard(),
    )

    await callback.answer()


# ============================================================
# تعرفه دیتاسنتر
# ============================================================

def tariff_datacenter_keyboard():
    return make_keyboard([
        [
            button(
                "📦 حجمی",
                "tariff_volume_metered",
            ),
            button(
                "♾️ نامحدود",
                "tariff_volume_unlimited",
            ),
        ],
        back_button(
            "plans_list"
        ),
    ])


@router.callback_query(
    F.data == "tariff_category_datacenter"
)
async def tariff_category_datacenter(
    callback: CallbackQuery,
):
    await callback.message.edit_text(
        "🖥 <b>آی‌پی ثابت دیتاسنتر</b>\n\n"
        "نوع ترافیک موردنظر خود را انتخاب کنید:",
        reply_markup=tariff_datacenter_keyboard(),
    )

    await callback.answer()


# ============================================================
# سرویس‌های دیتاسنتر
# ============================================================

def tariff_provider_keyboard(
    volume: str,
):
    rows = []

    if volume == "metered":
        rows.extend([
            [
                button(
                    "🇩🇪 اقتصادی مستقیم",
                    "tariff_service_economic_direct",
                )
            ],
            [
                button(
                    "☁️ AWS مستقیم",
                    "tariff_service_aws_direct",
                )
            ],
            [
                button(
                    "🔒 اقتصادی تانل",
                    "tariff_service_economic_tunnel",
                )
            ],
            [
                button(
                    "🚀 AWS تانل",
                    "tariff_service_aws_tunnel",
                )
            ],
            [
                button(
                    "🇩🇪 اقتصادی Gcore تانل",
                    "tariff_service_gcore_tunnel",
                )
            ],
            [
                button(
                    "🇩🇪 Kamatera تانل",
                    "tariff_service_kamatera_tunnel",
                )
            ],
            [
                button(
                    "🌍 Vultr تانل",
                    "tariff_service_vultr_tunnel",
                )
            ],
        ])

    elif volume == "unlimited":
        rows.extend([
            [
                button(
                    "🇩🇪 اقتصادی نامحدود مستقیم",
                    "tariff_service_unlimited_direct",
                )
            ],
            [
                button(
                    "🔒 اقتصادی نامحدود تانل",
                    "tariff_service_unlimited_tunnel",
                )
            ],
        ])

    rows.append(
        back_button(
            "tariff_category_datacenter"
        )
    )

    return make_keyboard(rows)


@router.callback_query(
    F.data.in_({
        "tariff_volume_metered",
        "tariff_volume_unlimited",
    })
)
async def tariff_choose_volume(
    callback: CallbackQuery,
):
    volume = (
        "metered"
        if callback.data == "tariff_volume_metered"
        else "unlimited"
    )

    await callback.message.edit_text(
        "🖥 <b>تعرفه سرویس‌های دیتاسنتر</b>\n\n"
        f"📦 نوع ترافیک: "
        f"{'حجمی' if volume == 'metered' else 'نامحدود'}\n\n"
        "سرویس موردنظر را انتخاب کنید:",
        reply_markup=tariff_provider_keyboard(
            volume
        ),
    )

    await callback.answer()


# ============================================================
# نمایش تعرفه یک سرویس
# ============================================================

async def show_tariff_service(
    callback: CallbackQuery,
    service_type: str,
):
    if service_type not in PLANS:
        await callback.answer(
            "سرویس پیدا نشد.",
            show_alert=True,
        )
        return

    service = PLANS[service_type]

    text = (
        f"{service['title']}\n\n"
        f"{service['description']}\n\n"
    )

    # --------------------------------------------------------
    # موقعیت سرور
    # --------------------------------------------------------

    locations = service.get(
        "locations",
        [],
    )

    if locations:
        location_text = "، ".join(
            country_label(country)
            for country in locations
        )

        text += (
            f"🌍 <b>موقعیت:</b> "
            f"{location_text}\n\n"
        )

    # --------------------------------------------------------
    # تعرفه‌ها
    # --------------------------------------------------------

    text += (
        "💰 <b>تعرفه‌ها</b>\n"
        "━━━━━━━━━━━━━━━━━━\n\n"
    )

    for plan in service["plans"]:

        price = plan.get(
            "price"
        )

        original_price = plan.get(
            "original_price"
        )

        text += (
            f"📦 <b>{plan['name']}</b>\n"
        )

        if price is None:

            text += (
                "💰 قیمت: به‌زودی\n\n"
            )

        elif (
            original_price is not None
            and original_price > price
        ):

            discount = discount_percent(
                price,
                original_price,
            )

            text += (
                f"💰 قیمت: "
                f"<s>{format_price(original_price)} تومان</s> "
                f"<b>{format_price(price)} تومان</b>\n"
            )

            if discount is not None:
                text += (
                    f"🔥 تخفیف: "
                    f"{discount}%\n"
                )

            text += "\n"

        else:

            text += (
                f"💰 قیمت: "
                f"<b>{format_price(price)} تومان</b>\n\n"
            )

    text += (
        "⏱ <b>مدت تمام بسته‌ها: یک ماه</b>"
    )

    # --------------------------------------------------------
    # بازگشت
    # --------------------------------------------------------

    if service_type in {
        SERVICE_GAMING,
        SERVICE_RESIDENTIAL,
    }:

        back_callback = "tariff_category_datacenter"

    elif service_type in {
        SERVICE_ECONOMIC_UNLIMITED_DIRECT,
        SERVICE_ECONOMIC_UNLIMITED_TUNNEL,
    }:

        back_callback = "tariff_volume_unlimited"

    else:

        back_callback = "tariff_volume_metered"

    await callback.message.edit_text(
        text,
        reply_markup=make_keyboard([
            back_button(
                back_callback
            )
        ]),
    )

    await callback.answer()


# ============================================================
# تعرفه اقتصادی مستقیم
# ============================================================

@router.callback_query(
    F.data == "tariff_service_economic_direct"
)
async def tariff_economic_direct(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_ECONOMIC_DIRECT,
    )


# ============================================================
# تعرفه AWS مستقیم
# ============================================================

@router.callback_query(
    F.data == "tariff_service_aws_direct"
)
async def tariff_aws_direct(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_AWS_DIRECT,
    )


# ============================================================
# تعرفه اقتصادی تانل
# ============================================================

@router.callback_query(
    F.data == "tariff_service_economic_tunnel"
)
async def tariff_economic_tunnel(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_ECONOMIC_TUNNEL,
    )


# ============================================================
# تعرفه AWS تانل
# ============================================================

@router.callback_query(
    F.data == "tariff_service_aws_tunnel"
)
async def tariff_aws_tunnel(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_AWS_TUNNEL,
    )


# ============================================================
# تعرفه Gcore تانل
# ============================================================

@router.callback_query(
    F.data == "tariff_service_gcore_tunnel"
)
async def tariff_gcore_tunnel(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_GCORE_TUNNEL,
    )


# ============================================================
# تعرفه Kamatera تانل
# ============================================================

@router.callback_query(
    F.data == "tariff_service_kamatera_tunnel"
)
async def tariff_kamatera_tunnel(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_KAMATERA_TUNNEL,
    )


# ============================================================
# تعرفه Vultr تانل
# ============================================================

@router.callback_query(
    F.data == "tariff_service_vultr_tunnel"
)
async def tariff_vultr_tunnel(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_VULTR_TUNNEL,
    )


# ============================================================
# تعرفه نامحدود مستقیم
# ============================================================

@router.callback_query(
    F.data == "tariff_service_unlimited_direct"
)
async def tariff_unlimited_direct(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_ECONOMIC_UNLIMITED_DIRECT,
    )


# ============================================================
# تعرفه نامحدود تانل
# ============================================================

@router.callback_query(
    F.data == "tariff_service_unlimited_tunnel"
)
async def tariff_unlimited_tunnel(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_ECONOMIC_UNLIMITED_TUNNEL,
    )


# ============================================================
# تعرفه گیمینگ
# ============================================================

@router.callback_query(
    F.data == "tariff_category_gaming"
)
async def tariff_category_gaming(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_GAMING,
    )


# ============================================================
# تعرفه رزیدنتال
# ============================================================

@router.callback_query(
    F.data == "tariff_category_residential"
)
async def tariff_category_residential(
    callback: CallbackQuery,
):
    await show_tariff_service(
        callback,
        SERVICE_RESIDENTIAL,
    )