import telebot
import random
import string
import sqlite3
import time
from datetime import datetime

TOKEN = "8795781410:AAGPnmH4XoDHGru4r1iMCE4C4jC_q3vGIo4"
BOT_USERNAME = "chekerprofilbot"
ADMIN_ID = 6268481597
WALLET_ADDRESS = "UQA5tjCJuOPyYATJL7sknnUjpi40dkM4tV6zGCCdzXEOhfTv"
PRICE_1_MONTH = "1 TON"
PRICE_3_MONTH = "2 TON"
INVITE_COUNT = 5
FREE_DAYS = 14
TEAM_NAME = "🔍 CypherCore Security"

bot = telebot.TeleBot(TOKEN)

def get_db():
    return sqlite3.connect('bot_database.db')

def init_db():
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('''CREATE TABLE IF NOT EXISTS users (
        user_id INTEGER PRIMARY KEY,
        username TEXT,
        first_name TEXT,
        first_visit TEXT,
        invited_count INTEGER DEFAULT 0,
        subscription_days INTEGER DEFAULT 0,
        ref_code TEXT
    )''')
    cursor.execute('''CREATE TABLE IF NOT EXISTS referrals (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        referrer_id INTEGER,
        invited_id INTEGER,
        invited_at TEXT
    )''')
    cursor.execute('''CREATE TABLE IF NOT EXISTS fake_views (
        user_id INTEGER PRIMARY KEY,
        view_count INTEGER
    )''')
    conn.commit()
    conn.close()

init_db()

def add_user(user_id, username, first_name):
    conn = get_db()
    cursor = conn.cursor()
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    cursor.execute('INSERT OR IGNORE INTO users (user_id, username, first_name, first_visit) VALUES (?,?,?,?)',
                   (user_id, username, first_name, now))
    conn.commit()
    conn.close()

def get_user(user_id):
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM users WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
    conn.close()
    return result

def set_ref_code(user_id, code):
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('UPDATE users SET ref_code = ? WHERE user_id = ?', (code, user_id))
    conn.commit()
    conn.close()

def get_user_by_ref(code):
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('SELECT user_id FROM users WHERE ref_code = ?', (code,))
    result = cursor.fetchone()
    conn.close()
    return result[0] if result else None

def add_referral(referrer_id, invited_id):
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('INSERT INTO referrals (referrer_id, invited_id, invited_at) VALUES (?,?,?)',
                   (referrer_id, invited_id, datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
    conn.commit()
    conn.close()

def count_invites(user_id):
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('SELECT COUNT(*) FROM referrals WHERE referrer_id = ?', (user_id,))
    result = cursor.fetchone()[0]
    conn.close()
    return result

def get_fake_views(user_id):
    conn = get_db()
    cursor = conn.cursor()
    cursor.execute('SELECT view_count FROM fake_views WHERE user_id = ?', (user_id,))
    result = cursor.fetchone()
    if result:
        conn.close()
        return result[0]
    count = random.randint(3, 9)
    cursor.execute('INSERT INTO fake_views (user_id, view_count) VALUES (?,?)', (user_id, count))
    conn.commit()
    conn.close()
    return count

def generate_ref_code():
    return ''.join(random.choices(string.ascii_letters + string.digits, k=6))

def get_stats():
    return random.randint(20, 88), 765, random.randint(1550, 2100)

def main_menu():
    kb = telebot.types.InlineKeyboardMarkup(row_width=1)
    kb.add(
        telebot.types.InlineKeyboardButton("👁‍🗨 کی پروفایلمو چک کرده؟", callback_data="check"),
        telebot.types.InlineKeyboardButton("ℹ️ درباره ربات و آموزش", callback_data="about"),
        telebot.types.InlineKeyboardButton("💎 خرید اشتراک", callback_data="buy"),
        telebot.types.InlineKeyboardButton("📊 وضعیت حسابم", callback_data="status")
    )
    return kb

def back_menu():
    kb = telebot.types.InlineKeyboardMarkup()
    kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
    return kb

def buy_menu():
    kb = telebot.types.InlineKeyboardMarkup(row_width=2)
    kb.add(
        telebot.types.InlineKeyboardButton("📦 ۱ ماهه - ۱ TON", callback_data="buy1"),
        telebot.types.InlineKeyboardButton("📦 ۳ ماهه - ۲ TON", callback_data="buy3")
    )
    kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
    return kb

@bot.message_handler(commands=['start'])
def start(msg):
    uid = msg.from_user.id
    uname = msg.from_user.username or "ندارد"
    fname = msg.from_user.first_name or "کاربر"
    
    add_user(uid, uname, fname)
    
    if len(msg.text.split()) > 1:
        ref = msg.text.split()[1]
        inviter = get_user_by_ref(ref)
        if inviter and inviter != uid:
            add_referral(inviter, uid)
            bot.send_message(inviter, f"🎉 یه نفر جدید با لینک شما اومد! تعداد دعوت‌ها: {count_invites(inviter)}")
    
    user = get_user(uid)
    if not user[6]:
        new_code = generate_ref_code()
        set_ref_code(uid, new_code)
    
    fake_views = get_fake_views(uid)
    first_visit = user[3] if user else "امروز"
    online, subs, views = get_stats()
    
    bot.send_chat_action(uid, 'typing')
    time.sleep(0.5)
    msg1 = bot.send_message(uid, "⏳ در حال اسکن پروفایل...\n█▒▒▒▒▒▒▒▒▒▒ ۱۰%", parse_mode='Markdown')
    time.sleep(0.7)
    bot.edit_message_text("⏳ در حال شناسایی بازدیدکنندگان...\n█████▒▒▒▒▒▒ ۵۰%", uid, msg1.message_id, parse_mode='Markdown')
    time.sleep(0.7)
    bot.edit_message_text("⏳ تحلیل داده‌های امنیتی...\n██████████▒▒ ۹۰%", uid, msg1.message_id, parse_mode='Markdown')
    time.sleep(0.5)
    bot.edit_message_text(f"✅ عملیات کامل شد!\n🕵️‍♂️ **{fake_views}** بازدیدکننده شناسایی شد.", uid, msg1.message_id, parse_mode='Markdown')
    time.sleep(0.5)
    
    text = f"""🕵️‍♂️ **کی پروفایلمو چک کرده؟**
━━━━━━━━━━━━━━━━━━━

👤 {fname}
🆔 `{uid}`
📅 عضو از: {first_visit}

🔍 در هفته اخیر **{fake_views}** نفر پروفایل شما رو دیدن

━━━━━━━━━━━━━━━━━━━
📊 آمار لحظه‌ای
👥 آنلاین: {online} نفر
🛡 اشتراک‌داران: {subs} نفر
👁 بازدید امروز: {views} بار
━━━━━━━━━━━━━━━━━━━

⚡ {TEAM_NAME}
🔥 برای دیدن لیست کامل، اشتراک تهیه کن!
"""
    bot.send_message(uid, text, parse_mode='Markdown', reply_markup=main_menu())

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
    uid = call.from_user.id
    user = get_user(uid)
    
    if call.data == "menu":
        fake_views = get_fake_views(uid)
        first_visit = user[3] if user else "امروز"
        online, subs, views = get_stats()
        text = f"""🕵️‍♂️ **کی پروفایلمو چک کرده؟**
━━━━━━━━━━━━━━━━━━━
👤 {call.from_user.first_name}
🆔 `{uid}`
📅 عضو از: {first_visit}
🔍 در هفته اخیر **{fake_views}** نفر پروفایل شما رو دیدن
━━━━━━━━━━━━━━━━━━━
📊 آمار لحظه‌ای
👥 آنلاین: {online} نفر
🛡 اشتراک‌داران: {subs} نفر
👁 بازدید امروز: {views} بار
━━━━━━━━━━━━━━━━━━━
⚡ {TEAM_NAME}
🔥 برای دیدن لیست کامل، اشتراک تهیه کن!"""
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=main_menu())
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "check":
        if not user or user[5] == 0:
            text = f"""⛔ **دسترسی محدود**

شما اشتراک فعال ندارید!

برای مشاهده لیست افرادی که پروفایل شما رو چک کردن، لطفاً یکی از گزینه‌های زیر رو انتخاب کن:

━━━━━━━━━━━━━━━━━━━
💎 خرید اشتراک ویژه
🎁 دعوت از دوستان ({FREE_DAYS} روز رایگان)"""
            kb = telebot.types.InlineKeyboardMarkup()
            kb.add(telebot.types.InlineKeyboardButton("💎 خرید اشتراک", callback_data="buy"))
            kb.add(telebot.types.InlineKeyboardButton("🔗 ساخت لینک دعوت", callback_data="invite"))
            kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
            bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=kb)
        else:
            fake_views = get_fake_views(uid)
            text = f"""👁‍🗨 **لیست مشاهده‌کنندگان**

در هفته اخیر **{fake_views}** نفر پروفایل شما رو مشاهده کردن.

✅ برای مشاهده جزئیات بیشتر، اشتراک خود را فعال کنید.

━━━━━━━━━━━━━━━━━━━
🕵️ {TEAM_NAME}"""
            bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=back_menu())
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "about":
        text = f"""🔍 **درباره ربات**

این ربات توسط تیم امنیتی **{TEAM_NAME}** طراحی شده تا بتونی بفهمی چه کسانی پروفایل تلگرامتو مشاهده کردن.

━━━━━━━━━━━━━━━━━━━
📖 **آموزش استفاده:**

✅ خرید اشتراک ماهانه یا ۳ ماهه
✅ یا دعوت از {INVITE_COUNT} نفر برای {FREE_DAYS} روز استفاده رایگان

🔹 هرکی پروفایلتو ببینه، با آیدی بهت اعلام میشه
🔹 امنیت و حریم خصوصی کامل
🔹 کاملاً خودکار و لحظه‌ای

🎁 اگر نمیخوای بخری، {INVITE_COUNT} نفر رو دعوت کن تا {FREE_DAYS} روز رایگان از ربات استفاده کنی!

━━━━━━━━━━━━━━━━━━━
🔥 همین الان اقدام کن!"""
        kb = telebot.types.InlineKeyboardMarkup()
        kb.add(telebot.types.InlineKeyboardButton("💎 خرید اشتراک", callback_data="buy"))
        kb.add(telebot.types.InlineKeyboardButton("🔗 ساخت لینک دعوت", callback_data="invite"))
        kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=kb)
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "buy":
        text = f"""💎 **خرید اشتراک ویژه**

━━━━━━━━━━━━━━━━━━━
📦 ۱ ماهه — {PRICE_1_MONTH}
📦 ۳ ماهه — {PRICE_3_MONTH}
━━━━━━━━━━━━━━━━━━━

🔥 با تهیه اشتراک میتونی:
✅ بفهمی چه کسی پروفایلت رو چک کرده
✅ لیست کامل مشاهده‌کنندگان رو ببینی
✅ به‌صورت لحظه‌ای اعلامیه بگیری

💳 پس از انتخاب، آدرس کیف پول برات ارسال میشه."""
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=buy_menu())
        bot.answer_callback_query(call.id)
        return
    
    if call.data in ["buy1", "buy3"]:
        price = PRICE_1_MONTH if call.data == "buy1" else PRICE_3_MONTH
        text = f"""💳 **مراحل واریز**

━━━━━━━━━━━━━━━━━━━
۱️⃣ مبلغ **{price}** رو به آدرس زیر واریز کن:

`{WALLET_ADDRESS}`

۲️⃣ مبلغ رو به شبکه **TON** واریز کن (بدون کامنت!)

۳️⃣ پس از واریز، هش تراکنش رو برامون بفرست

━━━━━━━━━━━━━━━━━━━
⏳ پس از تایید، اشتراک شما فعال میشه!"""
        kb = telebot.types.InlineKeyboardMarkup()
        kb.add(telebot.types.InlineKeyboardButton("✅ واریز کردم، ارسال هش", callback_data="hash"))
        kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=kb)
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "hash":
        text = f"""⏳ **در حال بررسی...**

هش شما در شبکه موجود نیست!

🕵️ در دست بررسی توسط تیم امنیتی **{TEAM_NAME}** قرار گرفت

⏱ زمان تقریبی: کمتر از ۲۴ ساعت

━━━━━━━━━━━━━━━━━━━
پس از تایید، اشتراک شما فعال خواهد شد ✅"""
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=back_menu())
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "invite":
        user = get_user(uid)
        if not user[6]:
            ref_code = generate_ref_code()
            set_ref_code(uid, ref_code)
        else:
            ref_code = user[6]
        link = f"https://t.me/{BOT_USERNAME}?start={ref_code}"
        text = f"""🔗 **لینک دعوت شما ساخته شد!**

━━━━━━━━━━━━━━━━━━━
📤 متن دعوت (برای فوروارد یا کپی):
```

من با استفاده از این ربات تونستم بفهمم کیا پروفایلمو چک کردن، توام امتحان کن 👇
{link}

```

🔗 لینک:
`{link}`

━━━━━━━━━━━━━━━━━━━
🎁 تا {FREE_DAYS} روز رایگان استفاده کن!"""
        kb = telebot.types.InlineKeyboardMarkup()
        kb.add(telebot.types.InlineKeyboardButton("📋 کپی لینک", callback_data="copy"))
        kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=kb)
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "copy":
        user = get_user(uid)
        if not user[6]:
            ref_code = generate_ref_code()
            set_ref_code(uid, ref_code)
        else:
            ref_code = user[6]
        link = f"https://t.me/{BOT_USERNAME}?start={ref_code}"
        text = f"""✅ **لینک کپی شد!**

`{link}`

📤 میتونی متن زیر رو فوروارد کنی:
```

من با استفاده از این ربات تونستم بفهمم کیا پروفایلمو چک کردن، توام امتحان کن 👇
{link}

```"""
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=back_menu())
        bot.answer_callback_query(call.id)
        return
    
    if call.data == "status":
        if not user:
            bot.edit_message_text("❌ کاربر یافت نشد!", call.message.chat.id, call.message.message_id, reply_markup=back_menu())
            bot.answer_callback_query(call.id)
            return
        invited_count = count_invites(uid)
        subscription_days = user[5] if len(user) > 5 else 0
        text = f"""📊 **وضعیت حساب شما**

━━━━━━━━━━━━━━━━━━━

📅 روزهای اشتراک باقیمانده: {subscription_days} روز

👥 تعداد دعوت‌های موفق: {invited_count} از {INVITE_COUNT} نفر

━━━━━━━━━━━━━━━━━━━

💡 برای استفاده از ربات:
🔹 خرید اشتراک ویژه
🔹 یا دعوت از {INVITE_COUNT} دوست برای {FREE_DAYS} روز رایگان

🔥 همین الان اقدام کن!"""
        kb = telebot.types.InlineKeyboardMarkup()
        kb.add(telebot.types.InlineKeyboardButton("💎 خرید اشتراک", callback_data="buy"))
        kb.add(telebot.types.InlineKeyboardButton("🔗 ساخت لینک دعوت", callback_data="invite"))
        kb.add(telebot.types.InlineKeyboardButton("🔙 بازگشت به منو اصلی", callback_data="menu"))
        bot.edit_message_text(text, call.message.chat.id, call.message.message_id, parse_mode='Markdown', reply_markup=kb)
        bot.answer_callback_query(call.id)
        return

@bot.message_handler(commands=['stats'])
def stats(msg):
    if msg.from_user.id != ADMIN_ID:
        bot.reply_to(msg, "⛔ شما دسترسی به این بخش ندارید!")
        return
    conn = get_db()
    cursor = conn.cursor()
    users = cursor.execute('SELECT COUNT(*) FROM users').fetchone()[0]
    refs = cursor.execute('SELECT COUNT(*) FROM referrals').fetchone()[0]
    conn.close()
    text = f"""📊 آمار کلی ربات
━━━━━━━━━━━━━━━━━━━
👥 کل کاربران: {users} نفر
🔄 دعوت‌ها: {refs} مورد
━━━━━━━━━━━━━━━━━━━
🕵️ {TEAM_NAME}"""
    bot.reply_to(msg, text, parse_mode='Markdown')

print("🤖 ربات روشن شد!")
bot.infinity_polling()