import sqlite3, requests, asyncio, json, datetime, random, string
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes, MessageHandler, filters, CallbackQueryHandler
from telegram.error import BadRequest, TimedOut

# --- CONFIGURATION ---
BOT_TOKEN = "8641006785:AAEt4_q3kbq74sElvm3oEBxL0Ps9GJ8ic14"
ADMIN_ID = 5434979638 
ADMIN_USER = "@amitkushwaha_06"
CHANNEL_ID = "@aposint06"
CHANNEL_LINK = "https://t.me/aposint06"

# --- DATABASE SETUP ---
conn = sqlite3.connect('amit_system.db', check_same_thread=False)
cursor = conn.cursor()
# 'IF NOT EXISTS' ensure karta hai ki purana data delete na ho
cursor.execute('''CREATE TABLE IF NOT EXISTS users 
                  (user_id INTEGER PRIMARY KEY, credits INTEGER DEFAULT 5, 
                   username TEXT, last_seen TEXT)''')
cursor.execute('''CREATE TABLE IF NOT EXISTS giftcards 
                  (code TEXT PRIMARY KEY, amount INTEGER)''')
conn.commit()

# --- HELPER: AUTO DELETE MESSAGE ---
async def auto_delete(message, delay=20):
    await asyncio.sleep(delay)
    try:
        await message.delete()
    except:
        pass

# --- MEMBERSHIP CHECK ---
async def is_member(update: Update, context: ContextTypes.DEFAULT_TYPE):
    uid = update.effective_user.id
    if uid == ADMIN_ID: return True
    try:
        member = await context.bot.get_chat_member(chat_id=CHANNEL_ID, user_id=uid)
        return member.status in ['member', 'administrator', 'creator']
    except: return False

# --- START COMMAND ---
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    uid = update.effective_user.id
    uname = update.effective_user.first_name
    username = update.effective_user.username or "No_Username"
    now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
    
    # Check if user already exists
    cursor.execute("SELECT credits FROM users WHERE user_id = ?", (uid,))
    existing_user = cursor.fetchone()
    
    if not existing_user:
        # Naya user add karein
        cursor.execute("INSERT INTO users (user_id, credits, username, last_seen) VALUES (?, 5, ?, ?)", (uid, username, now))
    else:
        # Purane user ka sirf time aur username update karein
        cursor.execute("UPDATE users SET last_seen = ?, username = ? WHERE user_id = ?", (now, username, uid))
    conn.commit()

    cursor.execute("SELECT COUNT(*) FROM users")
    total_users = cursor.fetchone()[0]
    
    cursor.execute("SELECT credits FROM users WHERE user_id = ?", (uid,))
    current_credits = cursor.fetchone()[0]

    if not await is_member(update, context):
        msg = await update.message.reply_text(f"⚠️ Join {CHANNEL_LINK} to access.", parse_mode="HTML")
        asyncio.create_task(auto_delete(msg))
        return

    keyboard = [
        [InlineKeyboardButton("📱 Phone Number", callback_data='phone_search'), InlineKeyboardButton("🚗 Vehicle Info", callback_data='soon')],
        [InlineKeyboardButton("🆔 Aadhaar Family", callback_data='soon'), InlineKeyboardButton("ℹ️ Aadhaar Info", callback_data='soon')],
        [InlineKeyboardButton("📊 Telegram ID", callback_data='soon'), InlineKeyboardButton("💰 PAN Card Info", callback_data='soon')],
        [InlineKeyboardButton("🌐 IP Information", callback_data='soon'), InlineKeyboardButton("🇵🇰 Pakistan Number", callback_data='soon')],
        [InlineKeyboardButton("👤 My Account", callback_data='my_account'), InlineKeyboardButton("🎁 Redeem Code", callback_data='redeem_start')],
        [InlineKeyboardButton("❓ Help", url=f"https://t.me/{ADMIN_USER.replace('@','')}")],
        [InlineKeyboardButton("👥 Add to Group", url=f"https://t.me/{context.bot.username}?startgroup=true")]
    ]
    
    welcome_text = (
        "🔥 <b>Welcome to — ONLINE</b> 🔥\n"
        "━━━━━━━━━━━━━━━━━━\n"
        f"👤 <b>Agent:</b> {uname}\n"
        f"🆔 <b>UID:</b> <code>{uid}</code>\n"
        f"🎁 <b>Your Credits:</b> {current_credits}\n"
        f"👥 <b>Total Users:</b> {total_users}\n"
        "━━━━━━━━━━━━━━━━━━\n"
        f"<b>Developer ➜</b> {ADMIN_USER}"
    )
    sent_msg = await update.message.reply_text(welcome_text, reply_markup=InlineKeyboardMarkup(keyboard), parse_mode="HTML")
    # Start message ko delete nahi kar rahe taaki user bot use kar sake, 
    # par agar aap chahte hain toh niche wali line uncomment kar dein:
    # asyncio.create_task(auto_delete(sent_msg))

# --- INTERACTION HANDLER ---
async def handle_interaction(update: Update, context: ContextTypes.DEFAULT_TYPE):
    uid = update.effective_user.id
    
    if update.callback_query:
        query = update.callback_query
        await query.answer()
        if query.data == 'phone_search':
            msg = await query.message.reply_text("🎯 <b>Number Search Active:</b>\nMobile number bhejein details ke liye.", parse_mode="HTML")
            asyncio.create_task(auto_delete(msg))
        elif query.data == 'my_account':
            cursor.execute("SELECT credits FROM users WHERE user_id=?", (uid,))
            res = cursor.fetchone()
            msg = await query.message.reply_text(f"📁 🆔 <b>UID:</b> <code>{uid}</code>\n💎 <b>Credits:</b> {res[0] if res else 0}", parse_mode="HTML")
            asyncio.create_task(auto_delete(msg))
        return

    text = update.message.text.strip()

    # --- SEARCH LOGIC WITH NEW API ---
    if text.isdigit() and len(text) >= 10:
        cursor.execute("SELECT credits FROM users WHERE user_id=?", (uid,))
        user_data = cursor.fetchone()
        
        if not user_data or user_data[0] <= 0:
            msg = await update.message.reply_text("🚫 No Credits left!")
            asyncio.create_task(auto_delete(msg))
            return

        load = await update.message.reply_text("💉 <b>FETCHING DATA FROM NEW SERVER...</b>", parse_mode="HTML")
        
        try:
            # NEW API INTEGRATION
            new_api_url = f"https://ashuapi.ashupanel.online/api/gateway.php?key=amit&number={text}"
            response = requests.get(new_api_url, timeout=25)
            
            if response.status_code == 200:
                data = response.json()
                # Check status from new API response
                if data.get("status") == "success":
                    cursor.execute("UPDATE users SET credits = credits - 1 WHERE user_id=?", (uid,))
                    conn.commit()
                    
                    res_data = data.get("data", {})
                    final_msg = (
                        "🎯 <b>DATA EXTRACTED:</b>\n\n"
                        f"👤 <b>Name:</b> {res_data.get('name')}\n"
                        f"👨‍🍼 <b>Father:</b> {res_data.get('father_name')}\n"
                        f"🏠 <b>Address:</b> {res_data.get('address')}\n"
                        f"📞 <b>Number:</b> {res_data.get('mobile')}\n"
                        f"🆔 <b>Aadhaar:</b> <code>{res_data.get('aadhaar')}</code>\n"
                        "━━━━━━━━━━━━━━━"
                    )
                    await load.edit_text(final_msg, parse_mode="HTML")
                else:
                    await load.edit_text("❌ No records found in AshuPanel.")
            else:
                await load.edit_text("❌ API Server Response Error.")
        except Exception as e:
            await load.edit_text(f"⚠️ Connection Timeout.")
        
        # Data dikhane ke 20 sec baad delete
        asyncio.create_task(auto_delete(load, 20))

# --- BAAKI ADMIN COMMANDS SAME RAHENGE ---
# (Stats, AddCredits, GenCode functions ko waisa hi rehne dein)

if __name__ == '__main__':
    app = ApplicationBuilder().token(BOT_TOKEN).build()
    app.add_handler(CommandHandler("start", start))
    # ... (Add other handlers here)
    app.add_handler(CallbackQueryHandler(handle_interaction))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_interaction))
    print("✅ System Online with New API & Auto-Delete")
    app.run_polling()