from aiogram import Router, F
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"


# ============================================================
# اطلاعات پلن‌ها
# ============================================================

PLANS = {

    # --------------------------------------------------------
    # اقتصادی مستقیم
    # --------------------------------------------------------
    SERVICE_ECONOMIC_DIRECT: {
        "title": "🇩🇪 اقتصادی مستقیم",
        "description": (
            "⚡ سرعت: <b>1Gbps</b>\n"
            "🌐 کیفیت شبکه: <b>استاندارد</b>\n"
            "🛡 کیفیت IP: <b>استاندارد</b>"
        ),
        "plans": {
            "1": {"name": "۱ گیگ", "price": 4000},
            "10": {"name": "۱۰ گیگ", "price": 28000},
            "20": {"name": "۲۰ گیگ", "price": 48000},
            "30": {"name": "۳۰ گیگ", "price": 67000},
            "40": {"name": "۴۰ گیگ", "price": 84000},
            "50": {"name": "۵۰ گیگ", "price": 101000},
            "60": {"name": "۶۰ گیگ", "price": 119000},
            "100": {"name": "۱۰۰ گیگ", "price": 184000},
        },
    },

    # --------------------------------------------------------
    # AWS مستقیم
    # --------------------------------------------------------
    SERVICE_AWS_DIRECT: {
        "title": "☁️ AWS مستقیم",
        "description": (
            "⚡ سرعت: <b>5Gbps</b>\n"
            "🌐 کیفیت شبکه: <b>خوب</b>\n"
            "🛡 کیفیت IP: <b>استثنایی</b>"
        ),
        "plans": {
            "1": {"name": "۱ گیگ", "price": 6000},
            "5": {"name": "۵ گیگ", "price": 41000},
            "10": {"name": "۱۰ گیگ", "price": 74000},
            "20": {"name": "۲۰ گیگ", "price": 135000},
            "30": {"name": "۳۰ گیگ", "price": 190000},
            "40": {"name": "۴۰ گیگ", "price": 238000},
            "60": {"name": "۶۰ گیگ", "price": 338000},
            "100": {"name": "۱۰۰ گیگ", "price": 525000},
        },
    },

    # --------------------------------------------------------
    # اقتصادی تانل
    # --------------------------------------------------------
    SERVICE_ECONOMIC_TUNNEL: {
        "title": "🔒 اقتصادی تانل",
        "description": (
            "⚡ سرعت: <b>1Gbps</b>\n"
            "🌐 کیفیت شبکه: <b>استاندارد</b>\n"
            "🛡 کیفیت IP: <b>استاندارد</b>"
        ),
        "plans": {
            "1": {"name": "۱ گیگ", "price": 5000},
            "10": {"name": "۱۰ گیگ", "price": 55000},
            "20": {"name": "۲۰ گیگ", "price": 109000},
            "25": {"name": "۲۵ گیگ", "price": 132000},
            "30": {"name": "۳۰ گیگ", "price": 153000},
            "40": {"name": "۴۰ گیگ", "price": 192000},
            "50": {"name": "۵۰ گیگ", "price": 232000},
            "60": {"name": "۶۰ گیگ", "price": 272000},
            "100": {"name": "۱۰۰ گیگ", "price": 423000},
        },
    },

    # --------------------------------------------------------
    # AWS تانل
    # --------------------------------------------------------
    SERVICE_AWS_TUNNEL: {
        "title": "🚀 AWS تانل",
        "description": (
            "⭐ <b>پیشنهاد ما</b>\n\n"
            "⚡ سرعت: <b>5Gbps</b>\n"
            "🌐 کیفیت شبکه: <b>خوب</b>\n"
            "🛡 کیفیت IP: <b>استثنایی</b>"
        ),
        "plans": {
            "1": {"name": "۱ گیگ", "price": 9000},
            "5": {"name": "۵ گیگ", "price": 57000},
            "10": {"name": "۱۰ گیگ", "price": 104000},
            "20": {"name": "۲۰ گیگ", "price": 189000},
            "30": {"name": "۳۰ گیگ", "price": 266000},
            "40": {"name": "۴۰ گیگ", "price": 334000},
            "60": {"name": "۶۰ گیگ", "price": 473000},
            "100": {"name": "۱۰۰ گیگ", "price": 734000},
        },
    },
}


# ============================================================
# فرمت قیمت
# ============================================================

def format_price(price: int) -> str:
    """
    تبدیل 184000 به ۱۸۴,۰۰۰
    """
    return f"{price:,}"


# ============================================================
# منوی انتخاب نوع سرویس
# ============================================================

@router.callback_query(F.data == "buy_subscription")
async def buy_subscription(callback: CallbackQuery):

    keyboard = InlineKeyboardMarkup(
        inline_keyboard=[
            [
                InlineKeyboardButton(
                    text="🇩🇪 اقتصادی مستقیم",
                    callback_data=SERVICE_ECONOMIC_DIRECT
                ),
                InlineKeyboardButton(
                    text="☁️ AWS مستقیم",
                    callback_data=SERVICE_AWS_DIRECT
                ),
            ],
            [
                InlineKeyboardButton(
                    text="🔒 اقتصادی تانل",
                    callback_data=SERVICE_ECONOMIC_TUNNEL
                ),
                InlineKeyboardButton(
                    text="🚀 AWS تانل",
                    callback_data=SERVICE_AWS_TUNNEL
                ),
            ],
            [
                InlineKeyboardButton(
                    text="🔙 بازگشت",
                    callback_data="back_to_main"
                )
            ],
        ]
    )

    await callback.message.edit_text(
        "🛒 <b>خرید اشتراک</b>\n\n"
        "نوع سرویس موردنظر خود را انتخاب کنید:",
        reply_markup=keyboard
    )

    await callback.answer()


# ============================================================
# نمایش پلن‌های یک سرویس
# ============================================================

async def show_service_plans(
    callback: CallbackQuery,
    service_type: str
):

    service = PLANS[service_type]

    keyboard_rows = []

    current_row = []

    for volume, plan in service["plans"].items():

        button = InlineKeyboardButton(
            text=f"{plan['name']} — {format_price(plan['price'])} تومان",
            callback_data=f"plan:{service_type}:{volume}"
        )

        current_row.append(button)

        # دو دکمه در هر ردیف
        if len(current_row) == 2:
            keyboard_rows.append(current_row)
            current_row = []

    # اگر تعداد دکمه‌ها فرد بود
    if current_row:
        keyboard_rows.append(current_row)

    keyboard_rows.append([
        InlineKeyboardButton(
            text="🔙 بازگشت",
            callback_data="buy_subscription"
        )
    ])

    keyboard = InlineKeyboardMarkup(
        inline_keyboard=keyboard_rows
    )

    await callback.message.edit_text(
        f"{service['title']}\n\n"
        f"{service['description']}\n\n"
        "📦 <b>بسته‌های یک‌ماهه</b>\n\n"
        "حجم موردنظر خود را انتخاب کنید:",
        reply_markup=keyboard
    )

    await callback.answer()


# ============================================================
# اقتصادی مستقیم
# ============================================================

@router.callback_query(F.data == SERVICE_ECONOMIC_DIRECT)
async def economic_direct(callback: CallbackQuery):

    await show_service_plans(
        callback,
        SERVICE_ECONOMIC_DIRECT
    )


# ============================================================
# AWS مستقیم
# ============================================================

@router.callback_query(F.data == SERVICE_AWS_DIRECT)
async def aws_direct(callback: CallbackQuery):

    await show_service_plans(
        callback,
        SERVICE_AWS_DIRECT
    )


# ============================================================
# اقتصادی تانل
# ============================================================

@router.callback_query(F.data == SERVICE_ECONOMIC_TUNNEL)
async def economic_tunnel(callback: CallbackQuery):

    await show_service_plans(
        callback,
        SERVICE_ECONOMIC_TUNNEL
    )


# ============================================================
# AWS تانل
# ============================================================

@router.callback_query(F.data == SERVICE_AWS_TUNNEL)
async def aws_tunnel(callback: CallbackQuery):

    await show_service_plans(
        callback,
        SERVICE_AWS_TUNNEL
    )


# ============================================================
# نمایش مشخصات یک پلن
# ============================================================

@router.callback_query(F.data.startswith("plan:"))
async def show_plan(callback: CallbackQuery):

    # مثال:
    # plan:economic_direct:10

    parts = callback.data.split(":")

    if len(parts) != 3:
        await callback.answer(
            "خطا در اطلاعات پلن",
            show_alert=True
        )
        return

    _, service_type, volume = parts

    service = PLANS.get(service_type)

    if not service:
        await callback.answer(
            "سرویس پیدا نشد.",
            show_alert=True
        )
        return

    plan = service["plans"].get(volume)

    if not plan:
        await callback.answer(
            "پلن پیدا نشد.",
            show_alert=True
        )
        return

    price = plan["price"]

    keyboard = InlineKeyboardMarkup(
        inline_keyboard=[
            [
                InlineKeyboardButton(
                    text="🛒 خرید این سرویس",
                    callback_data=f"purchase:{service_type}:{volume}"
                )
            ],
            [
                InlineKeyboardButton(
                    text="🔙 بازگشت به لیست",
                    callback_data=service_type
                )
            ],
        ]
    )

    await callback.message.edit_text(
        f"{service['title']}\n\n"
        f"📦 <b>حجم:</b> {plan['name']}\n"
        f"⏱ <b>مدت:</b> ۱ ماه\n"
        f"⚡ <b>سرعت:</b> "
        f"{'1Gbps' if service_type in [SERVICE_ECONOMIC_DIRECT, SERVICE_ECONOMIC_TUNNEL] else '5Gbps'}\n"
        f"🌐 <b>کیفیت شبکه:</b> "
        f"{'استاندارد' if service_type in [SERVICE_ECONOMIC_DIRECT, SERVICE_ECONOMIC_TUNNEL] else 'خوب'}\n"
        f"🛡 <b>کیفیت IP:</b> "
        f"{'استاندارد' if service_type in [SERVICE_ECONOMIC_DIRECT, SERVICE_ECONOMIC_TUNNEL] else 'استثنایی'}\n\n"
        f"💰 <b>قیمت:</b> {format_price(price)} تومان",
        reply_markup=keyboard
    )

    await callback.answer()


# ============================================================
# شروع خرید
# ============================================================

@router.callback_query(F.data.startswith("purchase:"))
async def purchase_plan(callback: CallbackQuery):

    parts = callback.data.split(":")

    if len(parts) != 3:
        await callback.answer(
            "خطا در اطلاعات خرید.",
            show_alert=True
        )
        return

    _, service_type, volume = parts

    service = PLANS.get(service_type)

    if not service:
        await callback.answer(
            "سرویس پیدا نشد.",
            show_alert=True
        )
        return

    plan = service["plans"].get(volume)

    if not plan:
        await callback.answer(
            "پلن پیدا نشد.",
            show_alert=True
        )
        return

    price = plan["price"]

    # --------------------------------------------------------
    # فعلاً سیستم پرداخت را نساختیم
    # مرحله بعد این قسمت را به:
    #
    # 1. ساخت سفارش
    # 2. نمایش شماره کارت
    # 3. دریافت رسید
    # 4. ارسال رسید به ادمین
    # 5. تأیید / رد سفارش
    # 6. ارسال کانفیگ
    #
    # وصل می‌کنیم.
    # --------------------------------------------------------

    keyboard = InlineKeyboardMarkup(
        inline_keyboard=[
            [
                InlineKeyboardButton(
                    text="💳 ادامه پرداخت",
                    callback_data=f"payment:{service_type}:{volume}"
                )
            ],
            [
                InlineKeyboardButton(
                    text="🔙 بازگشت",
                    callback_data=f"plan:{service_type}:{volume}"
                )
            ],
        ]
    )

    await callback.message.edit_text(
        "🛒 <b>ثبت سفارش</b>\n\n"
        f"📦 سرویس: <b>{service['title']}</b>\n"
        f"💾 حجم: <b>{plan['name']}</b>\n"
        "⏱ مدت: <b>۱ ماه</b>\n"
        f"💰 مبلغ: <b>{format_price(price)} تومان</b>\n\n"
        "برای ادامه پرداخت روی دکمه زیر بزنید.",
        reply_markup=keyboard
    )

    await callback.answer()


# ============================================================
# فعلاً دکمه ادامه پرداخت
# ============================================================

@router.callback_query(F.data.startswith("payment:"))
async def payment_placeholder(callback: CallbackQuery):

    await callback.answer()

    await callback.message.edit_text(
        "💳 <b>پرداخت</b>\n\n"
        "این قسمت در مرحله بعد ساخته می‌شود.\n\n"
        "در مرحله بعد:\n"
        "1️⃣ شماره کارت نمایش داده می‌شود\n"
        "2️⃣ کاربر مبلغ را واریز می‌کند\n"
        "3️⃣ رسید را برای ربات ارسال می‌کند\n"
        "4️⃣ رسید برای ادمین ارسال می‌شود\n"
        "5️⃣ ادمین سفارش را تأیید یا رد می‌کند\n"
        "6️⃣ کانفیگ برای مشتری ارسال می‌شود.",
        reply_markup=InlineKeyboardMarkup(
            inline_keyboard=[
                [
                    InlineKeyboardButton(
                        text="🔙 بازگشت",
                        callback_data="buy_subscription"
                    )
                ]
            ]
        )
    )