# -*- coding: utf-8 -*-
"""
کیبوردهای شیشه‌ای (Inline) بات
نکته: تلگرام رنگ پس‌زمینه دکمه شیشه‌ای رو به ما نمی‌ده تغییر بدیم (به تم کاربر بستگی دارد)،
به همین خاطر برای حس رنگی از ایموجی 🟢 🔵 🔴 استفاده شده.
"""

from telegram import InlineKeyboardButton, InlineKeyboardMarkup

import database as db
from database import CATEGORY_LABELS


def main_menu():
    t = db.get_setting
    buttons = [
        [InlineKeyboardButton(t("btn_order"), callback_data="menu:order"),
         InlineKeyboardButton(t("btn_account"), callback_data="menu:account")],
        [InlineKeyboardButton(t("btn_deposit"), callback_data="menu:deposit"),
         InlineKeyboardButton(t("btn_transfer"), callback_data="menu:transfer")],
        [InlineKeyboardButton(t("btn_rules"), callback_data="menu:rules"),
         InlineKeyboardButton(t("btn_tracking"), callback_data="menu:tracking")],
        [InlineKeyboardButton(t("btn_support"), callback_data="menu:support")],
    ]
    if db.get_setting("reseller_enabled") == "1":
        buttons.append([InlineKeyboardButton("🏪 نمایندگی بگیر", callback_data="menu:reseller")])
    return InlineKeyboardMarkup(buttons)


def services_menu_kb():
    t = db.get_setting
    buttons = [
        [InlineKeyboardButton(t("btn_service_stars"), callback_data="service:stars"),
         InlineKeyboardButton(t("btn_service_premium"), callback_data="service:premium")],
        [InlineKeyboardButton(t("btn_service_gift"), callback_data="service:gift"),
         InlineKeyboardButton("💎 خرید گرام", callback_data="service:gram")],
        [InlineKeyboardButton("🔙 بازگشت به منو", callback_data="menu:back")],
    ]
    return InlineKeyboardMarkup(buttons)


def back_to_menu():
    return InlineKeyboardMarkup([[InlineKeyboardButton("🔙 بازگشت به منو", callback_data="menu:back")]])


def admin_menu():
    buttons = [
        [InlineKeyboardButton("📦 سفارشات در انتظار", callback_data="admin:orders"),
         InlineKeyboardButton("🧾 رسیدهای در انتظار", callback_data="admin:deposits")],
        [InlineKeyboardButton("👥 مدیریت کاربران", callback_data="admin:users"),
         InlineKeyboardButton("🛒 مدیریت محصولات", callback_data="admin:products")],
        [InlineKeyboardButton("🪪 احراز هویت در انتظار", callback_data="admin:kyc_requests"),
         InlineKeyboardButton("🎟 کدهای تخفیف", callback_data="admin:discounts")],
        [InlineKeyboardButton("📊 آمار بات", callback_data="admin:stats"),
         InlineKeyboardButton("📢 پیام همگانی", callback_data="admin:broadcast")],
        [InlineKeyboardButton("🛠 ابزارهای پیشرفته", callback_data="admin:tools")],
        [InlineKeyboardButton("⚙️ تنظیمات", callback_data="admin:settings")],
    ]
    return InlineKeyboardMarkup(buttons)


def advanced_tools_kb():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("👮 دسترسی ادمین‌ها (نقش‌ها)", callback_data="admin:staff")],
        [InlineKeyboardButton("📊 خروجی اکسل", callback_data="admin:export_excel")],
        [InlineKeyboardButton("📦 بکاپ فوری دیتابیس", callback_data="admin:backup_now")],
        [InlineKeyboardButton("🏪 مدیریت نمایندگی‌ها", callback_data="admin:resellers")],
        [InlineKeyboardButton("🔙 بازگشت", callback_data="admin:back")],
    ])


def admin_back():
    return InlineKeyboardMarkup([[InlineKeyboardButton("🔙 بازگشت به پنل ادمین", callback_data="admin:back")]])


def cancel_kb(target="menu:back"):
    return InlineKeyboardMarkup([[InlineKeyboardButton("❌ انصراف", callback_data=target)]])


def rules_gate_kb():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("✅ تایید قوانین", callback_data="rules:accept"),
         InlineKeyboardButton("📖 مطالعه قوانین", callback_data="rules:read")],
    ])


def rules_read_back_kb():
    return InlineKeyboardMarkup([[InlineKeyboardButton("🔙 بازگشت", callback_data="rules:back")]])


def tracking_menu_kb():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("🔍 پیگیری سفارش", callback_data="tracking:orders"),
         InlineKeyboardButton("📄 پیگیری واریزی", callback_data="tracking:deposits")],
        [InlineKeyboardButton("🔙 بازگشت به منو", callback_data="menu:back")],
    ])


def products_keyboard(products):
    buttons = []
    for p in products:
        price_display = db.get_effective_price(p)
        label = f"{p['title']} - {price_display:,} تومان"
        buttons.append([InlineKeyboardButton(label, callback_data=f"order:buy:{p['id']}")])
    if not products:
        buttons.append([InlineKeyboardButton("فعلاً محصولی در این بخش ثبت نشده", callback_data="menu:order")])
    # دکمه تعداد دلخواه فقط برای استارز
    if products and products[0].get("category") == "stars":
        buttons.append([InlineKeyboardButton("✏️ تعداد دلخواه استارز", callback_data="order:custom_stars")])
    buttons.append([InlineKeyboardButton("🔙 بازگشت", callback_data="menu:order")])
    return InlineKeyboardMarkup(buttons)


def recipient_kb(has_username: bool):
    """کیبورد ورود آیدی گیرنده با دکمه «خودم»"""
    buttons = []
    if has_username:
        buttons.append([InlineKeyboardButton("👤 خودم (برای خودم بزن)", callback_data="order:self")])
    buttons.append([InlineKeyboardButton("❌ انصراف", callback_data="menu:order")])
    return InlineKeyboardMarkup(buttons)


def confirm_kb(yes_data, no_data):
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("✅ تایید", callback_data=yes_data),
         InlineKeyboardButton("❌ انصراف", callback_data=no_data)]
    ])


def order_admin_kb(order_id):
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("✅ انجام شد", callback_data=f"admin:order_done:{order_id}"),
         InlineKeyboardButton("❌ رد سفارش", callback_data=f"admin:order_reject:{order_id}")]
    ])


def deposit_admin_kb(deposit_id):
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("✅ تایید رسید", callback_data=f"admin:deposit_ok:{deposit_id}"),
         InlineKeyboardButton("❌ رد رسید", callback_data=f"admin:deposit_no:{deposit_id}")],
        [InlineKeyboardButton("✏️ تایید و افزایش دستی موجودی", callback_data=f"admin:deposit_manual:{deposit_id}")],
    ])


def kyc_admin_kb(request_id):
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("✅ تایید احراز هویت", callback_data=f"admin:kyc_ok:{request_id}"),
         InlineKeyboardButton("❌ رد احراز هویت", callback_data=f"admin:kyc_no:{request_id}")],
    ])


def admin_products_categories_kb():
    buttons = [
        [InlineKeyboardButton("⭐ استارز تلگرام", callback_data="admin:products_cat:stars")],
        [InlineKeyboardButton("🌟 پریمیوم تلگرام", callback_data="admin:products_cat:premium")],
        [InlineKeyboardButton("🎁 گیفت استارزی", callback_data="admin:products_cat:gift")],
        [InlineKeyboardButton("💎 گرام", callback_data="admin:products_cat:gram")],
        [InlineKeyboardButton("🔙 بازگشت", callback_data="admin:back")],
    ]
    return InlineKeyboardMarkup(buttons)


def products_admin_kb(products, category):
    buttons = []
    for p in products:
        status = "🟢" if p["is_active"] else "🔴"
        buttons.append([
            InlineKeyboardButton(
                f"{status} {p['title']} | {p['price']:,} تومان",
                callback_data=f"admin:product_toggle:{p['id']}",
            ),
            InlineKeyboardButton("🗑 حذف", callback_data=f"admin:product_del:{p['id']}"),
        ])
    buttons.append([InlineKeyboardButton("➕ افزودن محصول جدید", callback_data=f"admin:product_add:{category}")])
    buttons.append([InlineKeyboardButton("🔙 بازگشت", callback_data="admin:products")])
    return InlineKeyboardMarkup(buttons)


def settings_menu_kb():
    kyc_status = "🟢 فعال" if db.get_setting("kyc_enabled") == "1" else "🔴 غیرفعال"
    reseller_status = "🟢 فعال" if db.get_setting("reseller_enabled") == "1" else "🔴 غیرفعال"
    buttons = [
        [InlineKeyboardButton("💳 تغییر شماره کارت", callback_data="admin:set_card_number")],
        [InlineKeyboardButton("🪪 تغییر نام صاحب کارت", callback_data="admin:set_card_holder")],
        [InlineKeyboardButton("👋 تغییر متن خوش‌آمدگویی", callback_data="admin:set_welcome")],
        [InlineKeyboardButton("⚖️ تغییر متن قوانین", callback_data="admin:set_rules")],
        [InlineKeyboardButton("⚠️ تغییر متن هشدار شارژ", callback_data="admin:set_deposit_warning")],
        [InlineKeyboardButton("☎️ تغییر متن پشتیبانی", callback_data="admin:set_support_text")],
        [InlineKeyboardButton("✏️ تغییر اسم دکمه‌ها", callback_data="admin:rename_buttons")],
        [InlineKeyboardButton("📣 کانال گزارش فروش", callback_data="admin:set_sales_channel")],
        [InlineKeyboardButton("👥 گروه اطلاع‌رسانی ادمین", callback_data="admin:set_admin_group")],
        [InlineKeyboardButton("🔗 تنظیمات زیرمجموعه‌گیری", callback_data="admin:referral_settings")],
        [InlineKeyboardButton("💱 نرخ دلار به تومان", callback_data="admin:set_usdt_rate")],
        [InlineKeyboardButton("💎 سود گرام (٪)", callback_data="admin:set_gram_profit"),
         InlineKeyboardButton("⭐ قیمت هر استارز", callback_data="admin:set_star_price")],
        [InlineKeyboardButton("💎 حداقل سفارش گرام", callback_data="admin:set_gram_min"),
         InlineKeyboardButton("📝 متن صفحه گرام", callback_data="admin:set_gram_desc")],
        [InlineKeyboardButton("⏱ زمان انتظار پیام پشتیبانی", callback_data="admin:set_support_cooldown")],
        [InlineKeyboardButton("⏰ یادآوری سفارش نیمه‌کاره", callback_data="admin:set_abandoned_minutes")],
        [InlineKeyboardButton("🕐 فاصله بکاپ خودکار", callback_data="admin:set_backup_interval")],
        [InlineKeyboardButton(f"🪪 احراز هویت پس از واریز: {kyc_status}", callback_data="admin:toggle_kyc")],
        [InlineKeyboardButton(f"🏪 سیستم نمایندگی: {reseller_status}", callback_data="admin:toggle_reseller"),
         InlineKeyboardButton("💰 هزینه نمایندگی", callback_data="admin:set_reseller_fee")],
        [InlineKeyboardButton("🔙 بازگشت", callback_data="admin:back")],
    ]
    return InlineKeyboardMarkup(buttons)


def referral_settings_kb():
    rtype = db.get_setting("referral_type")
    rvalue = db.get_setting("referral_value")
    unit = "%" if rtype == "percent" else "تومان"
    return InlineKeyboardMarkup([
        [InlineKeyboardButton(f"نوع پاداش: {'درصدی' if rtype == 'percent' else 'مقدار ثابت'} (تغییر بده)",
                               callback_data="admin:toggle_referral_type")],
        [InlineKeyboardButton(f"مقدار پاداش: {rvalue}{unit} (تغییر بده)", callback_data="admin:set_referral_value")],
        [InlineKeyboardButton("🔙 بازگشت", callback_data="admin:settings")],
    ])


def rename_buttons_kb():
    buttons = []
    for key, desc in db.RENAMEABLE_BUTTONS:
        current = db.get_setting(key)
        buttons.append([InlineKeyboardButton(f"{current}  ✏️", callback_data=f"admin:set_btn:{key}")])
    buttons.append([InlineKeyboardButton("🔙 بازگشت", callback_data="admin:settings")])
    return InlineKeyboardMarkup(buttons)


def user_admin_kb(user_id, is_blocked, is_reseller=False):
    block_label = "🟢 رفع مسدودیت" if is_blocked else "🔴 مسدود کردن"
    reseller_label = "🏪 لغو نمایندگی" if is_reseller else "🏪 تبدیل به نماینده"
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("➕ افزایش موجودی", callback_data=f"admin:balance_add:{user_id}"),
         InlineKeyboardButton("➖ کاهش موجودی", callback_data=f"admin:balance_sub:{user_id}")],
        [InlineKeyboardButton(block_label, callback_data=f"admin:block_toggle:{user_id}"),
         InlineKeyboardButton("✉️ ارسال پیام", callback_data=f"admin:reply_user:{user_id}")],
        [InlineKeyboardButton("📦 آخرین سفارشات", callback_data=f"admin:user_orders:{user_id}"),
         InlineKeyboardButton("🧾 آخرین واریزی‌ها", callback_data=f"admin:user_deposits:{user_id}")],
        [InlineKeyboardButton("🔑 ریست موجودی به صفر", callback_data=f"admin:balance_zero:{user_id}"),
         InlineKeyboardButton(reseller_label, callback_data=f"admin:user_reseller:{user_id}")],
        [InlineKeyboardButton("🔙 جستجوی کاربر دیگر", callback_data="admin:users")],
    ])


def discounts_admin_kb():
    codes = db.list_discount_codes()
    buttons = []
    for c in codes:
        status = "🟢" if c["is_active"] else "🔴"
        usage = f"{c['used_count']}/{c['max_uses']}" if c["max_uses"] else f"{c['used_count']}/∞"
        unit = "%" if c["type"] == "percent" else "تومان"
        buttons.append([
            InlineKeyboardButton(f"{status} {c['code']} | {c['value']}{unit} | {usage}",
                                  callback_data=f"admin:discount_toggle:{c['code']}"),
            InlineKeyboardButton("🗑", callback_data=f"admin:discount_del:{c['code']}"),
        ])
    buttons.append([InlineKeyboardButton("➕ افزودن کد تخفیف", callback_data="admin:discount_add")])
    buttons.append([InlineKeyboardButton("🔙 بازگشت", callback_data="admin:back")])
    return InlineKeyboardMarkup(buttons)


def staff_admin_kb():
    staff = db.list_staff()
    buttons = []
    role_fa = {"full": "کامل", "orders": "سفارش/رسید", "products": "محصولات"}
    for s in staff:
        buttons.append([
            InlineKeyboardButton(f"👤 {s['user_id']} | {role_fa.get(s['role'], s['role'])}",
                                  callback_data=f"admin:staff_view:{s['user_id']}"),
            InlineKeyboardButton("🗑 حذف", callback_data=f"admin:staff_del:{s['user_id']}"),
        ])
    buttons.append([InlineKeyboardButton("➕ افزودن ادمین جدید", callback_data="admin:staff_add")])
    buttons.append([InlineKeyboardButton("🔙 بازگشت", callback_data="admin:tools")])
    return InlineKeyboardMarkup(buttons)


def staff_role_pick_kb(target_id):
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("کامل", callback_data=f"admin:staff_role:{target_id}:full")],
        [InlineKeyboardButton("فقط سفارش/رسید", callback_data=f"admin:staff_role:{target_id}:orders")],
        [InlineKeyboardButton("فقط محصولات", callback_data=f"admin:staff_role:{target_id}:products")],
        [InlineKeyboardButton("🔙 بازگشت", callback_data="admin:staff")],
    ])


def resellers_admin_kb():
    resellers = db.list_resellers()
    buttons = []
    for r in resellers:
        status = "🟢" if r["is_active"] else "🔴"
        buttons.append([
            InlineKeyboardButton(f"{status} @{r['bot_username']} ({r['user_id']})",
                                  callback_data=f"admin:reseller_toggle:{r['user_id']}"),
            InlineKeyboardButton("🗑 حذف", callback_data=f"admin:reseller_del:{r['user_id']}"),
        ])
    if not resellers:
        buttons.append([InlineKeyboardButton("هنوز نمایندگی‌ای ثبت نشده", callback_data="admin:resellers")])
    buttons.append([InlineKeyboardButton("🔙 بازگشت", callback_data="admin:tools")])
    return InlineKeyboardMarkup(buttons)


def rating_kb(order_id):
    return InlineKeyboardMarkup([[
        InlineKeyboardButton(f"{i}⭐", callback_data=f"rate:{order_id}:{i}") for i in range(1, 6)
    ]])


def discount_prompt_kb():
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("🎟 کد تخفیف دارم", callback_data="order:has_code"),
         InlineKeyboardButton("➡️ بدون کد، ادامه بده", callback_data="order:no_code")],
    ])


def reseller_info_kb(already_reseller: bool):
    if already_reseller:
        return InlineKeyboardMarkup([[InlineKeyboardButton("🔙 بازگشت به منو", callback_data="menu:back")]])
    return InlineKeyboardMarkup([
        [InlineKeyboardButton("✅ ثبت‌نام نمایندگی", callback_data="reseller:signup")],
        [InlineKeyboardButton("🔙 بازگشت به منو", callback_data="menu:back")],
    ])
