import telebot
from telebot import types
import sqlite3
from datetime import datetime

# ⚠️ اطلاعات اصلی ربات خود را اینجا وارد کنید:
API_TOKEN = '7528292085:AAGq0GM2VKbhne4cbMuRumv-Am2AnxWaJgQ' 
OWNER_ID = 6713676917
CHANNEL_ID = 'drgoc' 

bot = telebot.TeleBot(API_TOKEN)
CARD_NUMBER = "5859831868861401"
CARD_NAME = "جواد حسینی"
REFERRAL_BONUS = 1000

DB_NAME = 'snibase_final_v10.db'
user_states = {}
BOT_SETTINGS = {"locked": False}

MAIN_COMMANDS = [
    "🛒 خرید اشتراک", "🔑 اکانت تست", "🛍️ سرویس های من", "🏦 کیف پول + شارژ", 
    "👥 زیر مجموعه گیری", "🙋‍♀️ درخواست نمایندگی", "☎️ پشتیبانی", "👨‍💼 پنل مدیریت",
    "📦 مخزن", "📊 آمار ربات", "🛠️ مدیریت پیشرفته کاربران", "⚙️ تنظیمات عمومی", 
    "📢 ارسال پیام همگانی", "🏡 بازگشت به منوی اصلی", "🔙 بازگشت به پنل مدیریت",
    "🔑 مدیریت مخزن تست", "✏️ تغییر کارت بانکی", "➕ ساخت دکمه جدید", "❌ حذف دکمه"
]

RULES_TEXT = (
    "<b>ضوابط استفاده از خدمات شبکه</b>\n\n"
    "1. هر اشتراک تنها متعلق به یک کاربر است\n\n"
    "2. امکان عودت وجه یا تعویض سرویس وجود ندارد\n\n"
    "3. ارسال رسید جعلی موجب مسدودیت دائم می‌شود\n\n"
    "4. ورود به ربات به منزله پذیرش ضوابط است"
)

AGENCY_SUCCESS_TEXT = (
    "<b>👑 تاییدیه ارتقای حساب به سطح نمایندگی</b>\n\n"
    "همکار گرامی، حساب شما با موفقیت به سطح <b>نماینده فروش</b> ارتقا یافت.\n\n"
    "<b>🛠️ قابلیت‌های فعال شده برای شما:</b>\n\n"
    "1️⃣ <b>تخفیف دائم 10 درصدی:</b> از این پس تمامی سرویس‌های ربات برای شما با 10% قیمت کمتر محاسبه و کسر می‌شود.\n\n"
    "2️⃣ <b>سهمیه تست روزانه:</b> شما می‌توانید روزانه 1 عدد اکانت تست رایگان جهت ارائه به مشتریان خود از ربات دریافت کنید."
)

def init_db():
    conn = sqlite3.connect(DB_NAME)
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS users 
                      (user_id INTEGER PRIMARY KEY, balance INTEGER DEFAULT 0, is_agent INTEGER DEFAULT 0, 
                       is_banned INTEGER DEFAULT 0, has_accepted_rules INTEGER DEFAULT 0, 
                       referred_by INTEGER DEFAULT 0, last_test_date TEXT, blocked_by_bot INTEGER DEFAULT 0)''')
    cursor.execute('''CREATE TABLE IF NOT EXISTS admins (user_id INTEGER PRIMARY KEY)''')
    cursor.execute("INSERT OR IGNORE INTO admins (user_id) VALUES (?)", (OWNER_ID,))
    cursor.execute('''CREATE TABLE IF NOT EXISTS products (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, price INTEGER)''')
    cursor.execute('''CREATE TABLE IF NOT EXISTS configs (id INTEGER PRIMARY KEY AUTOINCREMENT, product_id INTEGER, type TEXT, content TEXT, is_used INTEGER DEFAULT 0)''')
    cursor.execute('''CREATE TABLE IF NOT EXISTS user_services (id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER, type TEXT, content TEXT, price INTEGER)''')
    conn.commit()
    conn.close()

init_db()

def is_admin(user_id):
    conn = sqlite3.connect(DB_NAME)
    cursor = conn.cursor()
    cursor.execute("SELECT user_id FROM admins WHERE user_id = ?", (user_id,))
    res = cursor.fetchone()
    conn.close()
    return res is not None

def get_user(user_id):
    conn = sqlite3.connect(DB_NAME)
    cursor = conn.cursor()
    cursor.execute("SELECT balance, is_agent, is_banned, has_accepted_rules, referred_by, last_test_date FROM users WHERE user_id = ?", (user_id,))
    row = cursor.fetchone()
    if not row:
        cursor.execute("INSERT OR IGNORE INTO users (user_id, balance, is_agent, is_banned, has_accepted_rules, referred_by, last_test_date) VALUES (?, 0, 0, 0, 0, 0, NULL)", (user_id,))
        conn.commit()
        row = (0, 0, 0, 0, 0, None)
    conn.close()
    return {"balance": row[0], "is_agent": row[1], "is_banned": row[2], "has_accepted_rules": row[3], "referred_by": row[4], "last_test_date": row[5]}

def update_user_balance(user_id, amount):
    conn = sqlite3.connect(DB_NAME)
    cursor = conn.cursor()
    cursor.execute("INSERT OR IGNORE INTO users (user_id, balance) VALUES (?, 0)", (user_id,))
    cursor.execute("UPDATE users SET balance = balance + ? WHERE user_id = ?", (amount, user_id))
    conn.commit()
    conn.close()

def get_products():
    conn = sqlite3.connect(DB_NAME)
    cursor = conn.cursor()
    cursor.execute("SELECT id, name, price FROM products")
    rows = cursor.fetchall()
    conn.close()
    return rows

def check_join(user_id):
    try:
        member = bot.get_chat_member(CHANNEL_ID, user_id)
        return member.status in ['creator', 'administrator', 'member']
    except:
        return True

def get_main_keyboard(user_id):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.row(types.KeyboardButton("🛒 خرید اشتراک"), types.KeyboardButton("🔑 اکانت تست"))
    markup.row(types.KeyboardButton("🛍️ سرویس های من"), types.KeyboardButton("🏦 کیف پول + شارژ"))
    markup.row(types.KeyboardButton("👥 زیر مجموعه گیری"), types.KeyboardButton("🙋‍♀️ درخواست نمایندگی"))
    markup.row(types.KeyboardButton("☎️ پشتیبانی"))
    if is_admin(user_id):
        markup.row(types.KeyboardButton("👨‍💼 پنل مدیریت"))
    return markup

def get_admin_reply_keyboard(user_id):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    markup.row(types.KeyboardButton("📦 مخزن"), types.KeyboardButton("📊 آمار ربات"))
    markup.row(types.KeyboardButton("🛠️ مدیریت پیشرفته کاربران"))
    markup.row(types.KeyboardButton("⚙️ تنظیمات عمومی"), types.KeyboardButton("📢 ارسال پیام همگانی"))
    markup.row(types.KeyboardButton("🏡 بازگشت به منوی اصلی"))
    return markup

def get_advanced_users_inline():
    markup = types.InlineKeyboardMarkup(row_width=2)
    markup.row(types.InlineKeyboardButton("🔍 اطلاعات کاربر", callback_data="cap_1"), types.InlineKeyboardButton("➕ افزایش موجودی", callback_data="cap_2"))
    markup.row(types.InlineKeyboardButton("➖ کسر موجودی", callback_data="cap_3"), types.InlineKeyboardButton("🚫 مسدود کردن", callback_data="cap_4"))
    markup.row(types.InlineKeyboardButton("🟢 رفع مسدودیت", callback_data="cap_5"), types.InlineKeyboardButton("👑 اعطای نمایندگی", callback_data="cap_6"))
    markup.row(types.InlineKeyboardButton("👤 لغو نمایندگی", callback_data="cap_7"), types.InlineKeyboardButton("🎁 شارژ همگانی", callback_data="cap_8"))
    markup.row(types.InlineKeyboardButton("❌ حذف سرویس‌ها", callback_data="cap_9"), types.InlineKeyboardButton("🧹 حذف غیرفعالین", callback_data="cap_10"))
    markup.row(types.InlineKeyboardButton("➕ افزودن ادمین", callback_data="cap_11"), types.InlineKeyboardButton("❌ عزل ادمین", callback_data="cap_12"))
    markup.row(types.InlineKeyboardButton("📊 لیست ادمین‌ها", callback_data="cap_13"), types.InlineKeyboardButton("📉 کسر شارژ همگانی", callback_data="cap_14"))
    markup.row(types.InlineKeyboardButton("🔓 فعالسازی کل کاربران", callback_data="cap_15"), types.InlineKeyboardButton("🔒 قفل موقت ربات", callback_data="cap_16"))
    markup.row(types.InlineKeyboardButton("🔗 تنظیم دستی معرف", callback_data="cap_17"), types.InlineKeyboardButton("📂 خروجی بکاپ متنی", callback_data="cap_19"))
    return markup

def get_receipt_management_keyboard(user_id, action_type, extra_id=0, amount=0):
    markup = types.InlineKeyboardMarkup(row_width=2)
    if action_type == "charge": 
        cb_approve, cb_reject = f"ok_dp_{user_id}_{amount}", f"no_dp_{user_id}"
    elif action_type == "buy": 
        cb_approve, cb_reject = f"ok_by_{user_id}_{extra_id}", f"no_by_{user_id}"
    elif action_type == "agency_req": 
        cb_approve, cb_reject = f"ok_ag_{user_id}", f"no_ag_{user_id}"
        markup.row(types.InlineKeyboardButton("✅ تایید درخواست", callback_data=cb_approve), types.InlineKeyboardButton("❌ رد درخواست", callback_data=cb_reject))
        return markup

    markup.row(types.InlineKeyboardButton("✅ تایید رسید", callback_data=cb_approve), types.InlineKeyboardButton("❌ رد رسید", callback_data=cb_reject))
    markup.row(types.InlineKeyboardButton("🚫 بن کاربری", callback_data=f"adm_ban_{user_id}"), types.InlineKeyboardButton("⚙️ موجودی دستی", callback_data=f"adm_man_{user_id}"))
    return markup

@bot.message_handler(commands=['start'])
def send_welcome(message):
    user_id = message.from_user.id
    user_states[user_id] = None 
    u = get_user(user_id)
    if u["is_banned"] == 1: return
    if BOT_SETTINGS["locked"] and not is_admin(user_id):
        bot.send_message(message.chat.id, "<b>ربات موقتاً در دست تعمیرات است</b>", parse_mode='HTML')
        return

    if u["referred_by"] == 0 and len(message.text.split()) > 1:
        ref_id = message.text.split()[1]
        if ref_id.isdigit() and int(ref_id) != user_id:
            conn = sqlite3.connect(DB_NAME)
            cursor = conn.cursor()
            cursor.execute("UPDATE users SET referred_by = ? WHERE user_id = ?", (int(ref_id), user_id))
            conn.commit()
            conn.close()

    if not check_join(user_id):
        markup = types.InlineKeyboardMarkup()
        markup.add(types.InlineKeyboardButton("📢 عضویت در کانال", url=f"https://t.me/{CHANNEL_ID.replace('@','') }"))
        markup.add(types.InlineKeyboardButton("✅ تایید عضویت مکرر", callback_data="check_membership"))
        bot.send_message(message.chat.id, f"<b>درود بر شما مشترک گرامی</b>\n\nجهت استفاده از خدمات شبکه ابتدا در کانال عضو شوید\n\n{CHANNEL_ID}", reply_markup=markup, parse_mode='HTML')
        return

    if u["has_accepted_rules"] == 0:
        markup = types.InlineKeyboardMarkup()
        markup.add(types.InlineKeyboardButton("✅ ضوابط را می‌پذیرم", callback_data="accept_rules"))
        bot.send_message(message.chat.id, RULES_TEXT, reply_markup=markup, parse_mode='HTML')
        return

    bot.send_message(message.chat.id, "<b>به پرتال جامع خدمات شبکه خوش آمدید</b>\n\nلطفاً گزینه مورد نظر خود را انتخاب فرمایید", reply_markup=get_main_keyboard(user_id), parse_mode='HTML')

@bot.callback_query_handler(func=lambda call: True)
def handle_callbacks(call):
    user_id = call.from_user.id
    u = get_user(user_id)
    if u["is_banned"] == 1: return

    data = call.data

    if data.startswith("ok_dp_") and is_admin(user_id):
        p = data.split("_")
        target, amt = int(p[2]), int(p[3])
        update_user_balance(target, amt)
        bot.edit_message_caption(f"تراکنش مالی تایید شد\n\nموجودی کاربر {target} به مبلغ {amt:,} ارتقا یافت.", call.message.chat.id, call.message.message_id)
        try: bot.send_message(target, f"<b>اطلاعیه واریز وجه</b>\n\nکیف پول شما با موفقیت شارژ شد\n\nمبلغ {amt:,} تومان به حساب شما اضافه گردید\n\nاکنون می‌توانید سرویس مورد نظر خود را تهیه کنید", parse_mode='HTML')
        except: pass

    elif data.startswith("no_dp_") and is_admin(user_id):
        target = int(data.split("_")[2])
        bot.edit_message_caption(f"رسید تراکنش مالی کاربر {target} رد شد.", call.message.chat.id, call.message.message_id)
        try: bot.send_message(target, "<b>اطلاعیه عدم تایید رسید</b>\n\nتراکنش ارسالی شما مورد تایید قرار نگرفت\n\nلطفاً اطلاعات واریزی خود را مجدداً بررسی فرمایید", parse_mode='HTML')
        except: pass

    elif data.startswith("adm_ban_") and is_admin(user_id):
        target = int(data.split("_")[2])
        conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_banned = 1 WHERE user_id = ?", (target,)); conn.commit(); conn.close()
        bot.edit_message_caption(f"کاربر {target} مسدود شد.", call.message.chat.id, call.message.message_id)
        try: bot.send_message(target, "<b>حساب کاربری شما مسدود گردید</b>", parse_mode='HTML')
        except: pass

    elif data.startswith("adm_man_") and is_admin(user_id):
        target = int(data.split("_")[2])
        user_states[user_id] = "p_cap_2"
        bot.send_message(call.message.chat.id, f"جهت افزایش موجودی دستی فرمت زیر را بفرستید\n\n<code>{target} مقدار</code>", parse_mode='HTML')

    elif data.startswith("ok_ag_") and is_admin(user_id):
        target = int(data.split("_")[2])
        conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_agent = 1 WHERE user_id = ?", (target,)); conn.commit(); conn.close()
        bot.edit_message_text(f"سطح کاربری {target} به وضعیت همکاری تغییر یافت.", call.message.chat.id, call.message.message_id)
        try: bot.send_message(target, AGENCY_SUCCESS_TEXT, parse_mode='HTML')
        except: pass

    elif data.startswith("no_ag_") and is_admin(user_id):
        target = int(data.split("_")[2])
        bot.edit_message_text(f"درخواست نمایندگی کاربر {target} رد شد.", call.message.chat.id, call.message.message_id)
        try: bot.send_message(target, "<b>درخواست نمایندگی شما مورد تایید قرار نگرفت</b>", parse_mode='HTML')
        except: pass

    elif data.startswith("ok_by_") and is_admin(user_id):
        p = data.split("_")
        target, prod_id = int(p[2]), int(p[3])
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
        cursor.execute("SELECT id, content FROM configs WHERE product_id = ? AND is_used = 0 LIMIT 1", (prod_id,))
        row = cursor.fetchone()
        if row:
            cursor.execute("SELECT name, price FROM products WHERE id = ?", (prod_id,))
            p_info = cursor.fetchone()
            
            target_user_info = get_user(target)
            final_price = int(p_info[1] * 0.9) if target_user_info["is_agent"] == 1 else p_info[1]

            cursor.execute("UPDATE configs SET is_used = 1 WHERE id = ?", (row[0],))
            cursor.execute("INSERT INTO user_services (user_id, type, content, price) VALUES (?, ?, ?, ?)", (target, p_info[0], row[1], final_price))
            conn.commit()
            bot.edit_message_caption(f"فیش خرید تایید و اشتراک صادر شد.", call.message.chat.id, call.message.message_id)
            
            success_text = (
                f"<b>سرویس شما با موفقیت فعال شد</b>\n\n"
                f"نوع اشتراک: {p_info[0]}\n\n"
                f"کلید اتصال:\n<code>{row[1]}</code>\n\n"
                f"لطفاً کلید فوق را جهت برقراری ارتباط کپی فرمایید"
            )
            try: bot.send_message(target, success_text, parse_mode='HTML')
            except: pass
        else:
            bot.answer_callback_query(call.id, "خطا: مخزن محصول خالی است", show_alert=True)
        conn.close()

    elif data.startswith("no_by_") and is_admin(user_id):
        target = int(data.split("_")[2])
        bot.edit_message_caption(f"فیش خرید کاربر {target} رد شد.", call.message.chat.id, call.message.message_id)
        try: bot.send_message(target, "<b>درخواست خرید شما به دلیل اشکال در رسید رد شد</b>", parse_mode='HTML')
        except: pass

    elif data.startswith("delprod_") and is_admin(user_id):
        p_id = int(data.split("_")[1])
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
        cursor.execute("DELETE FROM products WHERE id = ?", (p_id,))
        cursor.execute("DELETE FROM configs WHERE product_id = ?", (p_id,))
        conn.commit(); conn.close()
        bot.edit_message_text("محصول و کانفیگ‌های مربوطه حذف شدند.", call.message.chat.id, call.message.message_id)

    elif data.startswith("m_add_") and is_admin(user_id):
        p_id = int(data.split("_")[2])
        user_states[user_id] = {"action": "waiting_for_configs_reply", "product_id": p_id}
        bot.send_message(call.message.chat.id, "لطفاً کلیدهای اتصال را ارسال فرمایید (هر خط یک کانفیگ):")

    elif data.startswith("m_rst_") and is_admin(user_id):
        p_id = int(data.split("_")[2])
        user_states[user_id] = {"action": "waiting_for_reset_count", "product_id": p_id}
        bot.send_message(call.message.chat.id, "تعداد کانفیگ‌ها جهت حذف از مخزن را وارد کنید:")

    elif data.startswith("cap_") and is_admin(user_id):
        cap_num = data.split("_")[1]
        user_states[user_id] = f"p_cap_{cap_num}"
        
        if cap_num == "1": bot.send_message(call.message.chat.id, "🔍 آیدی عددی کاربر مورد نظر را وارد نمایید:")
        elif cap_num == "2": bot.send_message(call.message.chat.id, "➕ فرمت افزایش موجودی جاری: آیدی مقدار")
        elif cap_num == "3": bot.send_message(call.message.chat.id, "➖ فرمت کسر موجودی جاری: آیدی مقدار")
        elif cap_num == "4": bot.send_message(call.message.chat.id, "🚫 آیدی کاربر جهت مسدودسازی کامل:")
        elif cap_num == "5": bot.send_message(call.message.chat.id, "🟢 آیدی کاربر جهت رفع مسدودیت دائم:")
        elif cap_num == "6": bot.send_message(call.message.chat.id, "👑 آیدی کاربر جهت اعطای دسترسی نمایندگی:")
        elif cap_num == "7": bot.send_message(call.message.chat.id, "👤 آیدی کاربر جهت لغو دسترسی نمایندگی:")
        elif cap_num == "8": bot.send_message(call.message.chat.id, "🎁 مبلغ اعتبار هدیه عمومی به همه کاربران (تومان):")
        elif cap_num == "9": bot.send_message(call.message.chat.id, "❌ آیدی کاربر جهت سلب کلیه سرویس‌ها:")
        elif cap_num == "11": bot.send_message(call.message.chat.id, "➕ آیدی عددی جهت افزودن ادمین جدید:")
        elif cap_num == "12": bot.send_message(call.message.chat.id, "❌ آیدی ادمین جهت عزل:")
        elif cap_num == "14": bot.send_message(call.message.chat.id, "📉 مبلغ کسر همگانی از همه کاربران (تومان):")
        elif cap_num == "17": bot.send_message(call.message.chat.id, "فرمت تخصیص معرف: آیدی‌کاربر آیدی‌معرف")
        
        elif cap_num == "10":
            user_states[user_id] = None
            conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
            cursor.execute("DELETE FROM users WHERE balance = 0 AND user_id NOT IN (SELECT DISTINCT user_id FROM user_services)")
            c = cursor.rowcount; conn.commit(); conn.close()
            bot.send_message(call.message.chat.id, f"پاکسازی پایان یافت؛ تعداد {c} حساب کاربری غیرفعال حذف شدند.")
        elif cap_num == "13":
            user_states[user_id] = None
            conn = sqlite3.connect(DB_NAME); rows = conn.cursor().execute("SELECT user_id FROM admins").fetchall(); conn.close()
            bot.send_message(call.message.chat.id, "<b>لیست مدیران سیستم</b>\n\n" + "\n".join([f"<code>{r[0]}</code>" for r in rows]), parse_mode='HTML')
        elif cap_num == "15":
            user_states[user_id] = None
            conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_banned = 0"); conn.commit(); conn.close()
            bot.send_message(call.message.chat.id, "کلیه کاربران محدود شده رفع مسدودیت شدند.")
        elif cap_num == "16":
            user_states[user_id] = None
            BOT_SETTINGS["locked"] = not BOT_SETTINGS["locked"]
            status = "قفل" if BOT_SETTINGS["locked"] else "باز"
            bot.send_message(call.message.chat.id, f"وضعیت قفل موقت ربات به: {status} تغییر یافت.")

    elif data == "check_membership":
        if check_join(user_id):
            bot.delete_message(call.message.chat.id, call.message.message_id)
            u = get_user(user_id)
            if u["has_accepted_rules"] == 0:
                markup = types.InlineKeyboardMarkup()
                markup.add(types.InlineKeyboardButton("✅ ضوابط را می‌پذیرم", callback_data="accept_rules"))
                bot.send_message(call.message.chat.id, RULES_TEXT, reply_markup=markup, parse_mode='HTML')
            else: bot.send_message(call.message.chat.id, "سیستم آماده بهره‌برداری است", reply_markup=get_main_keyboard(user_id))
        else: bot.answer_callback_query(call.id, "عضویت شما در کانال تایید نشد", show_alert=True)

    elif data == "accept_rules":
        conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET has_accepted_rules = 1 WHERE user_id = ?", (user_id,)); conn.commit(); conn.close()
        bot.delete_message(call.message.chat.id, call.message.message_id)
        if u["referred_by"] != 0:
            update_user_balance(u["referred_by"], REFERRAL_BONUS)
            try: bot.send_message(u["referred_by"], f"<b>پاداش دعوت کاربر جدید</b>\n\nیک کاربر از طریق لینک شما وارد شد\n\nمبلغ {REFERRAL_BONUS:,} تومان به کیف پول شما افزوده شد", parse_mode='HTML')
            except: pass
        bot.send_message(call.message.chat.id, "ضوابط با موفقیت تایید شد", reply_markup=get_main_keyboard(user_id))

    elif data == "wallet_charge":
        user_states[user_id] = "waiting_for_charge_amount"
        bot.send_message(call.message.chat.id, "<b>بخش افزایش موجودی حساب</b>\n\nلطفاً مبلغ مورد نظر خود را به تومان و به عدد انگلیسی وارد نمایید:", parse_mode='HTML')

    elif data.startswith("buy_prod_"):
        p_id = int(data.split("_")[2])
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor(); cursor.execute("SELECT name, price FROM products WHERE id = ?", (p_id,)); p_info = cursor.fetchone(); conn.close()
        if not p_info: return
        
        # محاسبه نرخ 10% کمتر برای نماینده
        final_price = int(p_info[1] * 0.9) if u["is_agent"] == 1 else p_info[1]
        user_role = "👑 نماینده (10% تخفیف ویژه)" if u["is_agent"] == 1 else "👤 کاربر عادی"

        markup = types.InlineKeyboardMarkup()
        markup.row(types.InlineKeyboardButton("💳 کارت به کارت (ارسال فیش)", callback_data=f"direct_pay_{p_id}"))
        markup.row(types.InlineKeyboardButton("🏦 پرداخت آنلاین از کیف پول", callback_data=f"wallet_pay_{p_id}"))
        
        buy_text = (
            f"<b>پلن انتخابی:</b> {p_info[0]}\n\n"
            f"<b>قیمت اصلی:</b> {p_info[1]:,} تومان\n\n"
            f"<b>قیمت برای شما:</b> {final_price:,} تومان ({user_role})\n\n"
            f"<b>تراز مالی شما:</b> {u['balance']:,} تومان"
        )
        bot.edit_message_text(buy_text, call.message.chat.id, call.message.message_id, reply_markup=markup, parse_mode='HTML')

    elif data.startswith("direct_pay_"):
        p_id = int(data.split("_")[2])
        user_states[user_id] = {"action": "direct_buy_receipt", "product_id": p_id}
        bot.send_message(call.message.chat.id, f"<b>صورت‌حساب واریز مستقیم</b>\n\nلطفاً مبلغ را به حساب زیر واریز نموده و فقط تصویر رسید را بفرستید\n\n¼مارة کارت:\n<code>{CARD_NUMBER}</code>\n\nدارنده حساب: {CARD_NAME}", parse_mode='HTML')

    elif data.startswith("wallet_pay_"):
        p_id = int(data.split("_")[2])
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor(); cursor.execute("SELECT name, price FROM products WHERE id = ?", (p_id,))
        p_info = cursor.fetchone()
        
        if p_info:
            final_price = int(p_info[1] * 0.9) if u["is_agent"] == 1 else p_info[1]
            
            if u["balance"] >= final_price:
                cursor.execute("SELECT id, content FROM configs WHERE product_id = ? AND is_used = 0 LIMIT 1", (p_id,))
                row = cursor.fetchone()
                if row:
                    cursor.execute("UPDATE configs SET is_used = 1 WHERE id = ?", (row[0],))
                    cursor.execute("INSERT INTO user_services (user_id, type, content, price) VALUES (?, ?, ?, ?)", (user_id, p_info[0], row[1], final_price))
                    conn.commit()
                    update_user_balance(user_id, -final_price)
                    
                    success_text = (
                        f"<b>سرویس شما با موفقیت فعال شد</b>\n\n"
                        f"نوع اشتراک: {p_info[0]}\n\n"
                        f"مبلغ کسر شده: {final_price:,} تومان\n\n"
                        f"کلید اتصال:\n<code>{row[1]}</code>"
                    )
                    bot.edit_message_text(success_text, call.message.chat.id, call.message.message_id, parse_mode='HTML')
                else: bot.answer_callback_query(call.id, "مخزن این سرویس موقتاً خالی است", show_alert=True)
            else: bot.answer_callback_query(call.id, "تراز مالی شما برای خرید کافی نیست", show_alert=True)
        conn.close()

    elif data.startswith("view_service_"):
        srv_id = int(data.split("_")[2])
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor(); cursor.execute("SELECT type, content FROM user_services WHERE id = ? AND user_id = ?", (srv_id, user_id)); row = cursor.fetchone(); conn.close()
        if row: bot.send_message(call.message.chat.id, f"<b>اطلاعات فنی سرویس</b>\n\nنوع: {row[0]}\n\nکلید دسترسی:\n<code>{row[1]}</code>", parse_mode='HTML')

@bot.message_handler(func=lambda message: True, content_types=['text'])
def handle_text_messages(message):
    global CARD_NUMBER, CARD_NAME
    user_id = message.from_user.id
    u = get_user(user_id)
    if u["is_banned"] == 1: return
    
    text = message.text
    current_state = user_states.get(user_id)

    if text in MAIN_COMMANDS:
        user_states[user_id] = None
        current_state = None

    if current_state == "p_cap_1" and is_admin(user_id):
        user_states[user_id] = None
        try:
            target = int(text); inf = get_user(target)
            bot.reply_to(message, f"<b>وضعیت حساب کاربری</b>\n\nشناسه عددی: {target}\n\nتراز مالی: {inf['balance']:,} تومان\n\nهمکار/نماینده: {'بله' if inf['is_agent'] else 'خیر'}\n\nوضعیت مسدودیت: {'بله' if inf['is_banned'] else 'خیر'}", parse_mode='HTML')
        except: bot.reply_to(message, "کاربر یافت نشد")
        return

    elif current_state == "p_cap_2" and is_admin(user_id):
        user_states[user_id] = None
        try:
            t, m = text.split(); update_user_balance(int(t), int(m)); bot.reply_to(message, "تراز مالی با موفقیت ارتقا یافت")
            try: bot.send_message(int(t), f"<b>اطلاعیه واریز وجه</b>\n\nمبلغ {int(m):,} تومان به موجودی جاری حساب شما اضافه گردید", parse_mode='HTML')
            except: pass
        except: bot.reply_to(message, "ساختار ورودی نادرست است")
        return

    elif current_state == "p_cap_3" and is_admin(user_id):
        user_states[user_id] = None
        try:
            t, m = text.split(); update_user_balance(int(t), -int(m)); bot.reply_to(message, "کسر تراز با موفقیت اعمال شد")
            try: bot.send_message(int(t), f"<b>اطلاعیه مالی</b>\n\nمبلغ {int(m):,} تومان از حساب کاربری شما کسر گردید", parse_mode='HTML')
            except: pass
        except: bot.reply_to(message, "فرمت ورودی نامعتبر است")
        return

    elif current_state == "p_cap_4" and is_admin(user_id):
        user_states[user_id] = None
        try: conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_banned = 1 WHERE user_id = ?", (int(text),)); conn.commit(); conn.close(); bot.reply_to(message, "کاربر مسدود شد.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_5" and is_admin(user_id):
        user_states[user_id] = None
        try: conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_banned = 0 WHERE user_id = ?", (int(text),)); conn.commit(); conn.close(); bot.reply_to(message, "رفع مسدودیت انجام شد.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_6" and is_admin(user_id):
        user_states[user_id] = None
        try: 
            target = int(text)
            conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_agent = 1 WHERE user_id = ?", (target,)); conn.commit(); conn.close()
            bot.reply_to(message, "حق دسترسی همکاری اعطا شد.")
            try: bot.send_message(target, AGENCY_SUCCESS_TEXT, parse_mode='HTML')
            except: pass
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_7" and is_admin(user_id):
        user_states[user_id] = None
        try: conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET is_agent = 0 WHERE user_id = ?", (int(text),)); conn.commit(); conn.close(); bot.reply_to(message, "حق دسترسی لغو شد.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_8" and is_admin(user_id):
        user_states[user_id] = None
        try:
            amt = int(text); conn = sqlite3.connect(DB_NAME); users = conn.cursor().execute("SELECT user_id FROM users").fetchall()
            for u_row in users: 
                update_user_balance(u_row[0], amt)
                try: bot.send_message(u_row[0], f"<b>اعتبار هدیه عمومی</b>\n\nاعتبار هدیه‌ای به مبلغ {amt:,} تومان به حساب شما واریز شد", parse_mode='HTML')
                except: pass
            conn.close(); bot.reply_to(message, "... واریز عمومی پایان یافت.")
        except: bot.reply_to(message, "ساختار نادرست")
        return

    elif current_state == "p_cap_9" and is_admin(user_id):
        user_states[user_id] = None
        try: conn = sqlite3.connect(DB_NAME); conn.cursor().execute("DELETE FROM user_services WHERE user_id = ?", (int(text),)); conn.commit(); conn.close(); bot.reply_to(message, "کلیه سرویس‌های فعال کاربر ابطال شدند.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_11" and is_admin(user_id):
        user_states[user_id] = None
        try: conn = sqlite3.connect(DB_NAME); conn.cursor().execute("INSERT OR IGNORE INTO admins (user_id) VALUES (?)", (int(text),)); conn.commit(); conn.close(); bot.reply_to(message, f"کاربر {text} به کادر ادمین‌ها ملحق شد.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_12" and is_admin(user_id):
        user_states[user_id] = None
        try:
            t_id = int(text)
            if t_id == OWNER_ID: bot.reply_to(message, "لغو دسترسی مالک اصلی امکان‌پذیر نیست"); return
            conn = sqlite3.connect(DB_NAME); conn.cursor().execute("DELETE FROM admins WHERE user_id = ?", (t_id,)); conn.commit(); conn.close(); bot.reply_to(message, "عزل مدیر با موفقیت انجام شد.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_14" and is_admin(user_id):
        user_states[user_id] = None
        try:
            amt = int(text); conn = sqlite3.connect(DB_NAME); users = conn.cursor().execute("SELECT user_id FROM users").fetchall()
            for u_row in users: update_user_balance(u_row[0], -amt)
            conn.close(); bot.reply_to(message, "عملیات کسر همگانی پایان یافت.")
        except: bot.reply_to(message, "خطا")
        return

    elif current_state == "p_cap_17" and is_admin(user_id):
        user_states[user_id] = None
        try: u_id, r_id = text.split(); conn = sqlite3.connect(DB_NAME); conn.cursor().execute("UPDATE users SET referred_by = ? WHERE user_id = ?", (int(r_id), int(u_id))); conn.commit(); conn.close(); bot.reply_to(message, "وابستگی ارجاع ثبت شد.")
        except: bot.reply_to(message, "خطا در فرمت")
        return

    elif current_state == "waiting_for_new_card" and is_admin(user_id):
        user_states[user_id] = {"action": "waiting_for_new_card_name", "card_num": text}
        bot.reply_to(message, "👤 اکنون نام صاحب حساب جدید را وارد نمایید:")
        return
    elif isinstance(current_state, dict) and current_state.get("action") == "waiting_for_new_card_name" and is_admin(user_id):
        CARD_NUMBER = current_state["card_num"]
        CARD_NAME = text; user_states[user_id] = None
        bot.reply_to(message, "✅ اطلاعات حساب بانکی با موفقیت به‌روزرسانی شد.")
        return

    elif current_state == "waiting_new_btn_name" and is_admin(user_id):
        user_states[user_id] = {"action": "waiting_new_btn_price", "name": text}
        bot.reply_to(message, "💰 بهای محصول جدید را به تومان وارد نمایید:")
        return
    elif isinstance(current_state, dict) and current_state.get("action") == "waiting_new_btn_price" and is_admin(user_id):
        try:
            price = int(text)
            conn = sqlite3.connect(DB_NAME); conn.cursor().execute("INSERT INTO products (name, price) VALUES (?, ?)", (current_state["name"], price)); conn.commit(); conn.close()
            user_states[user_id] = None
            bot.reply_to(message, "✅ محصول جدید با موفقیت اضافه شد.")
        except: bot.reply_to(message, "❌ مقدار ورودی نامعتبر است.")
        return

    elif isinstance(current_state, dict) and current_state.get("action") == "waiting_for_configs_reply":
        p_id = current_state.get("product_id")
        user_states[user_id] = None
        lines = text.split('\n')
        added = 0
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
        cfg_type = 'test' if p_id == 0 else 'unlimited'
        for line in lines:
            if line.strip():
                cursor.execute("INSERT INTO configs (product_id, type, content) VALUES (?, ?, ?)", (p_id, cfg_type, line.strip()))
                added += 1
        conn.commit(); conn.close()
        bot.reply_to(message, f"✅ تعداد {added} اکانت با موفقیت به انبار افزوده شد.")
        return

    elif isinstance(current_state, dict) and current_state.get("action") == "waiting_for_reset_count":
        p_id = current_state.get("product_id")
        user_states[user_id] = None
        try:
            count = int(text)
            conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
            cursor.execute("SELECT id FROM configs WHERE product_id = ? AND is_used = 0 LIMIT ?", (p_id, count))
            rows = cursor.fetchall()
            deleted = 0
            for r in rows:
                cursor.execute("DELETE FROM configs WHERE id = ?", (r[0],))
                deleted += 1
            conn.commit(); conn.close()
            bot.reply_to(message, f"🗑️ تعداد {deleted} کانفیگ از مخزن حذف شد.")
        except: bot.reply_to(message, "کاراکتر ورودی معتبر نیست")
        return

    elif current_state == "waiting_for_charge_amount":
        try:
            amount = int(text)
            user_states[user_id] = {"action": "send_charge_receipt", "amount": amount}
            invoice_text = (
                f"<b>بخش افزایش موجودی حساب</b>\n\n"
                f"لطفاً مبلغ واریزی را به مقدار دقیق {amount:,} تومان کارت به کارت نموده\n\n"
                f"و تصویر رسید فیش خود را در پاسخ به این پیام ارسال فرمایید\n\n"
                f"شماره کارت: <code>{CARD_NUMBER}</code>\n\n"
                f"بنام: {CARD_NAME}"
            )
            bot.send_message(message.chat.id, invoice_text, parse_mode='HTML')
        except: 
            bot.reply_to(message, "لطفاً فقط مبلغ را به عدد انگلیسی وارد کنید")
        return

    elif current_state == "waiting_for_broadcast" and is_admin(user_id):
        user_states[user_id] = None 
        conn = sqlite3.connect(DB_NAME); users = conn.cursor().execute("SELECT user_id FROM users").fetchall(); conn.close()
        s = 0
        for u_row in users:
            try: bot.send_message(u_row[0], f"<b>اطلاعیه جدید مدیریت</b>\n\n{text}", parse_mode='HTML'); s += 1
            except: pass
        bot.send_message(message.chat.id, f"✅ پیام همگانی با موفقیت به {s} کاربر ارسال شد.")
        return

    elif current_state == "waiting_for_support_msg":
        user_states[user_id] = None
        bot.forward_message(OWNER_ID, message.chat.id, message.message_id)
        bot.reply_to(message, "✅ پیام شما دریافت شد و به زودی پاسخگوی شما خواهیم بود.")
        return

    user_states[user_id] = None 

    if text == "🛒 خرید اشتراک":
        prods = get_products()
        markup = types.InlineKeyboardMarkup()
        for p in prods: markup.row(types.InlineKeyboardButton(f"📦 {p[1]} - {p[2]:,} تومان", callback_data=f"buy_prod_{p[0]}"))
        bot.send_message(message.chat.id, "<b>لیست پلن‌های ارتباطی موجود</b>", reply_markup=markup, parse_mode='HTML')

    elif text == "🔑 اکانت تست":
        today_str = datetime.now().strftime("%Y-%m-%d")
        
        if u["is_agent"] == 0:
            if u["last_test_date"] is not None:
                bot.reply_to(message, "<b>شما قبلاً سهمیه تست رایگان خود را دریافت کرده‌اید</b>", parse_mode='HTML')
                return
        else:
            if u["last_test_date"] == today_str:
                bot.reply_to(message, "<b>👑 نماینده گرامی، شما سهمیه امروز خود (1 اکانت تست در روز) را دریافت کرده‌اید. فردا مجدداً تلاش کنید.</b>", parse_mode='HTML')
                return

        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor(); cursor.execute("SELECT id, content FROM configs WHERE product_id = 0 AND is_used = 0 LIMIT 1")
        row = cursor.fetchone()
        if row:
            cursor.execute("UPDATE configs SET is_used = 1 WHERE id = ?", (row[0],))
            cursor.execute("INSERT INTO user_services (user_id, type, content, price) VALUES (?, 'تست رایگان', ?, 0)", (user_id, row[1]))
            cursor.execute("UPDATE users SET last_test_date = ? WHERE user_id = ?", (today_str, user_id))
            conn.commit()
            
            test_text = (
                f"<b>پروفایل اتصال آزمایشی صادر شد</b>\n\n"
                f"<code>{row[1]}</code>"
            )
            bot.reply_to(message, test_text, parse_mode='HTML')
        else: 
            bot.reply_to(message, "در حال حاضر اکانت تستی در مخزن موجود نیست")
        conn.close()

    elif text == "🙋‍♀️ درخواست نمایندگی":
        if u["is_agent"] == 1:
            bot.reply_to(message, "حساب شما روی وضعیت همکاری تنظیم است")
            return
        username = f"@{message.from_user.username}" if message.from_user.username else "فاقد شناسه"
        markup = get_receipt_management_keyboard(user_id, "agency_req")
        bot.send_message(OWNER_ID, f"درخواست نمایندگی\n\nآیدی: {user_id}\n\nیوزرنیم: {username}", reply_markup=markup)
        
        agency_intro = (
            "<b>تقاضای شما جهت ارتقای حساب ثبت شد</b>\n\n"
            "این درخواست جهت بررسی سوابق ارسال گردید\n\n"
            "نتیجه بررسی از طریق همین پیام‌رسان به شما اعلام می‌شود\n\n"
            "از تمایل شما جهت همکاری سپاسگزاریم"
        )
        bot.reply_to(message, agency_intro, parse_mode='HTML')

    elif text == "👨‍💼 پنل مدیریت" and is_admin(user_id):
        bot.send_message(message.chat.id, "🛠️ به میز کار مدیریت خوش آمدید:", reply_markup=get_admin_reply_keyboard(user_id))

    elif text == "📦 مخزن" and is_admin(user_id):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        markup.row(types.KeyboardButton("🔑 مدیریت مخزن تست"))
        prods = get_products()
        for p in prods:
            markup.row(types.KeyboardButton(f"📥 مدیریت مخزن: {p[1]}"))
        markup.row(types.KeyboardButton("🔙 بازگشت به پنل مدیریت"))
        bot.send_message(message.chat.id, "📦 انبار مرکزی؛ سرویس مورد نظر را انتخاب کنید:", reply_markup=markup)

    elif text == "🔑 مدیریت مخزن تست" and is_admin(user_id):
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
        available_count = cursor.execute("SELECT COUNT(*) FROM configs WHERE product_id = 0 AND is_used = 0").fetchone()[0]
        conn.close()
        markup = types.InlineKeyboardMarkup()
        markup.row(
            types.InlineKeyboardButton("➕ افزودن تست", callback_data="m_add_0"),
            types.InlineKeyboardButton("🗑️ پاکسازی تست", callback_data="m_rst_0")
        )
        bot.send_message(message.chat.id, f"🔑 <b>تنظیمات مخزن تست</b>\n\nتعداد موجود: {available_count}\n\nعملیات را انتخاب کنید:", reply_markup=markup, parse_mode='HTML')

    elif text.startswith("📥 مدیریت مخزن: ") and is_admin(user_id):
        p_name = text.replace("📥 مدیریت مخزن: ", "")
        conn = sqlite3.connect(DB_NAME); cursor = conn.cursor()
        p_id = cursor.execute("SELECT id FROM products WHERE name = ?", (p_name,)).fetchone()
        if p_id:
            available_count = cursor.execute("SELECT COUNT(*) FROM configs WHERE product_id = ? AND is_used = 0", (p_id[0],)).fetchone()[0]
            conn.close()
            markup = types.InlineKeyboardMarkup()
            markup.row(
                types.InlineKeyboardButton("➕ افزودن کانفیگ", callback_data=f"m_add_{p_id[0]}"),
                types.InlineKeyboardButton("🗑️ پاکسازی", callback_data=f"m_rst_{p_id[0]}")
            )
            bot.send_message(message.chat.id, f"📦 <b>تنظیمات مخزن پلن:</b> {p_name}\n\nتعداد اکانت‌های موجود: {available_count}\n\nیک عملیات را انتخاب کنید:", reply_markup=markup, parse_mode='HTML')
        else: conn.close()

    elif text == "🛠️ مدیریت پیشرفته کاربران" and is_admin(user_id):
        bot.send_message(message.chat.id, "⚙️ <b>کنسول مدیریت پیشرفته اعضا:</b>", reply_markup=get_advanced_users_inline(), parse_mode='HTML')

    elif text == "📊 آمار ربات" and is_admin(user_id):
        conn = sqlite3.connect(DB_NAME)
        total_users = conn.cursor().execute("SELECT COUNT(*) FROM users").fetchone()[0]
        total_configs = conn.cursor().execute("SELECT COUNT(*) FROM configs WHERE is_used = 0").fetchone()[0]
        total_sales = conn.cursor().execute("SELECT COUNT(*) FROM user_services").fetchone()[0]
        conn.close()
        msg_text = f"📊 آمار اتوماسیون:\n\n👥 کاربران: {total_users}\n\n📦 مخزن: {total_configs}\n\n🛒 سرویس‌ها: {total_sales}"
        bot.send_message(message.chat.id, msg_text)

    elif text == "🏡 بازگشت به منوی اصلی":
        bot.send_message(message.chat.id, "🏡 به منوی اصلی بازگشتید:", reply_markup=get_main_keyboard(user_id))

    elif text == "🏦 کیف پول + شارژ":
        markup = types.InlineKeyboardMarkup()
        markup.row(types.InlineKeyboardButton("➕ افزایش موجودی (کارت به کارت)", callback_data="wallet_charge"))
        
        wallet_text = (
            f"<b>میز کار و مدیریت تراز مالی حساب کاربر</b>\n\n"
            f"موجودى فعلى حساب شما: {u['balance']:,} تومان\n\n"
            f"وضعیت دسترسی: معتبر و فعال\n\n"
            f"جهت افزایش اعتبار از دکمه زیر استفاده فرمایید"
        )
        bot.send_message(message.chat.id, wallet_text, reply_markup=markup, parse_mode='HTML')

    elif text == "🛍️ سرویس های من":
        conn = sqlite3.connect(DB_NAME); rows = conn.cursor().execute("SELECT id, type FROM user_services WHERE user_id = ?", (user_id,)).fetchall(); conn.close()
        if rows:
            markup = types.InlineKeyboardMarkup()
            for r in rows: markup.add(types.InlineKeyboardButton(f"📦 {r[1]}", callback_data=f"view_service_{r[0]}"))
            bot.send_message(message.chat.id, "🛍️ لیست سرویس‌های خریداری شده شما:", reply_markup=markup)
        else: bot.reply_to(message, "همراه گرامی، هیچ سرویس فعالی برای شما یافت نشد.")

    elif text == "👥 زیر مجموعه گیری":
        bot_info = bot.get_me()
        ref_link = f"https://t.me/{bot_info.username}?start={user_id}"
        
        ref_text = (
            f"<b>بخش کسب درآمد و دعوت از دوستان</b>\n\n"
            f"با اشتراک‌گذاری لینک خود دوستانتان را دعوت کنید\n\n"
            f"پاداش مالی هر دعوت موفق: {REFERRAL_BONUS:,} تومان اعتبار آنی\n\n"
            f"لینک دعوت اختصاصی شما:\n{ref_link}"
        )
        bot.send_message(message.chat.id, ref_text, parse_mode='HTML')

    elif text == "⚙️ تنظیمات عمومی" and is_admin(user_id):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        markup.row(types.KeyboardButton("✏️ تغییر کارت بانکی"))
        markup.row(types.KeyboardButton("➕ ساخت دکمه جدید"), types.KeyboardButton("❌ حذف دکمه"))
        markup.row(types.KeyboardButton("🔙 بازگشت به پنل مدیریت"))
        bot.send_message(message.chat.id, "⚙️ کنترلر تنظیمات عمومی:", reply_markup=markup)

    elif text == "✏️ تغییر کارت بانکی" and is_admin(user_id):
        user_states[user_id] = "waiting_for_new_card"
        bot.send_message(message.chat.id, "💳 شماره کارت 16 رقمی مقصد جدید را بفرستید:")
    elif text == "➕ ساخت دکمه جدید" and is_admin(user_id):
        user_states[user_id] = "waiting_new_btn_name"
        bot.send_message(message.chat.id, "✍️ نام پلن جدید را وارد کنید:")
    elif text == "❌ حذف دکمه" and is_admin(user_id):
        prods = get_products()
        markup = types.InlineKeyboardMarkup()
        for p in prods: markup.row(types.InlineKeyboardButton(f"🗑️ حذف: {p[1]}", callback_data=f"delprod_{p[0]}"))
        bot.send_message(message.chat.id, "⚠️ محصولی که قصد حذف آن را دارید انتخاب کنید:", reply_markup=markup)
    elif text == "📢 ارسال پیام همگانی" and is_admin(user_id):
        user_states[user_id] = "waiting_for_broadcast"
        bot.send_message(message.chat.id, "✍️ پیام خود را بنویسید:")
    elif text == "🔙 بازگشت به پنل مدیریت" and is_admin(user_id):
        bot.send_message(message.chat.id, "🛠️ به پنل مدیریت بازگشتید:", reply_markup=get_admin_reply_keyboard(user_id))
    elif text == "☎️ پشتیبانی":
        user_states[user_id] = "waiting_for_support_msg"
        bot.send_message(message.chat.id, "<b>بخش ارتباط با پشتیبانی</b>\n\nلطفاً پیام خود را بنویسید تا در اسرع وقت پاسخگوی شما باشیم", parse_mode='HTML')

@bot.message_handler(content_types=['photo'])
def handle_all_photos(message):
    user_id = message.from_user.id
    state = user_states.get(user_id)
    if not state: return

    if isinstance(state, dict) and state.get("action") == "send_charge_receipt":
        amount = state.get("amount", 0)
        bot.reply_to(message, "تصویر فیش دریافت شد و در صف بررسی قرار گرفت.")
        markup = get_receipt_management_keyboard(user_id, "charge", amount=amount)
        bot.send_photo(OWNER_ID, message.photo[-1].file_id, caption=f"درخواست تایید واریزی\n\nکاربر: {user_id}\n\nمبلغ: {amount:,} تومان", reply_markup=markup)
        user_states[user_id] = None

    elif isinstance(state, dict) and state.get("action") == "direct_buy_receipt":
        prod_id = state.get("product_id")
        bot.reply_to(message, "تصویر فیش خرید دریافت شد و پس از تایید سرویس صادر می‌شود.")
        markup = get_receipt_management_keyboard(user_id, "buy", extra_id=prod_id)
        bot.send_photo(OWNER_ID, message.photo[-1].file_id, caption=f"فیش خرید مستقیم\n\nکاربر: {user_id}\n\nکد محصول: {prod_id}", reply_markup=markup)
        user_states[user_id] = None

print("✅ ربات با اعمال تمامی آپدیت‌های درخواستی و بخش‌های پیشرفته آماده کار است.")
bot.infinity_polling()
