import telebot
from telebot.types import InlineKeyboardMarkup, InlineKeyboardButton
import sqlite3
import json
import random
import time
import threading
import logging
import os
from datetime import datetime

# ==================== تنظیمات اولیه ====================
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

TOKEN = "8544454480:AAELxQxNICrQT_nl5CRWJGCJRAYHYvXB0Tk"
ADMIN_ID = 7288118092
BOT_USERNAME = "@naseri_war_bot"

# آدرس وب‌هوک (در سی‌پنل این را به آدرس واقعی تغییر دهید)
WEBHOOK_URL = "https://rasekhmm.pingbaz.site/telegram_bot/webhook"

bot = telebot.TeleBot(TOKEN)
bot.remove_webhook()
time.sleep(1)

# ==================== مسیر دیتابیس ====================
DB_PATH = os.path.join(os.path.dirname(__file__), 'war_bot.db')
lock = threading.Lock()

# ==================== تنظیمات بازی ====================
DEFAULT_DISTANCE = 1000  # کیلومتر
MAX_ATTACK_DISTANCE = 2000

# ==================== ناوها ====================
WARSHIPS = {
    "ford": {"name": "جرارلد فورد", "country": "آمریکا", "speed": 63, "power": 1000000, "hp": 63000, "fighter_capacity": 35, "defense_capacity": 4, "cost_toob": 500000, "daily_uranium": 100},
    "bush": {"name": "جورج بوش", "country": "آمریکا", "speed": 60, "power": 900000, "hp": 60000, "fighter_capacity": 32, "defense_capacity": 4, "cost_toob": 450000, "daily_uranium": 90},
    "lincoln": {"name": "ابراهام لینکن", "country": "آمریکا", "speed": 59, "power": 850000, "hp": 59000, "fighter_capacity": 30, "defense_capacity": 3, "cost_toob": 400000, "daily_uranium": 80},
    "nimitz": {"name": "کلس نیمیتز", "country": "آمریکا", "speed": 58, "power": 800000, "hp": 58000, "fighter_capacity": 28, "defense_capacity": 3, "cost_toob": 350000, "daily_uranium": 70},
    "queen": {"name": "کلس کوئین الیزابت", "country": "بریتانیا", "speed": 55, "power": 750000, "hp": 55000, "fighter_capacity": 25, "defense_capacity": 3, "cost_toob": 300000, "daily_uranium": 60},
    "fujian": {"name": "فوجیان", "country": "چین", "speed": 53, "power": 700000, "hp": 53000, "fighter_capacity": 22, "defense_capacity": 2, "cost_toob": 250000, "daily_uranium": 50},
    "liaoning": {"name": "لیائونینگ", "country": "چین", "speed": 52, "power": 650000, "hp": 52000, "fighter_capacity": 20, "defense_capacity": 2, "cost_toob": 200000, "daily_uranium": 40}
}

# ==================== پدافندها ====================
DEFENSES = {
    "fim92": {"name": "اف ای ام ۹۲", "power": 450000, "cost_toob": 100000, "missile_capacity": 6, "hp": 5000},
    "k333": {"name": "۹ کی ۳۳۳", "power": 300000, "cost_toob": 70000, "missile_capacity": 6, "hp": 4500},
    "starstreak": {"name": "استار استریک", "power": 200000, "cost_toob": 50000, "missile_capacity": 6, "hp": 4000},
    "piorun": {"name": "پیرون", "power": 150000, "cost_toob": 40000, "missile_capacity": 6, "hp": 3500},
    "mistral": {"name": "میسترال", "power": 100000, "cost_toob": 30000, "missile_capacity": 6, "hp": 3000},
    "rbs70": {"name": "ار بی اس ۷۰ ان جی", "power": 75000, "cost_toob": 20000, "missile_capacity": 6, "hp": 2500}
}

# ==================== جنگنده‌ها ====================
FIGHTERS = {
    "f35": {"name": "F-35", "speed": 1930, "power": 500, "hp": 300, "cost_toob": 20000, "daily_cost": 1000},
    "f22": {"name": "F-22", "speed": 2410, "power": 550, "hp": 350, "cost_toob": 25000, "daily_cost": 1200},
    "su57": {"name": "Su-57", "speed": 2140, "power": 520, "hp": 320, "cost_toob": 22000, "daily_cost": 1100},
    "j20": {"name": "J-20", "speed": 2120, "power": 480, "hp": 300, "cost_toob": 18000, "daily_cost": 900},
    "rafale": {"name": "Rafale", "speed": 1910, "power": 450, "hp": 280, "cost_toob": 16000, "daily_cost": 800},
    "eurofighter": {"name": "Eurofighter", "speed": 2495, "power": 500, "hp": 310, "cost_toob": 21000, "daily_cost": 1050}
}

# ==================== موشک‌ها ====================
MISSILES = {
    "nuke": {"name": "بمب اتم", "power": 100000, "speed": 8000, "cost_uranium": 100, "cost_diamond": 120, "success_rate": 100},
    "rs28": {"name": "آر اس ۲۸ سرمت", "power": 70000, "speed": 7500, "cost_toob": 50000, "success_rate": 85},
    "lgm35": {"name": "ال جی ام ۳۵", "power": 50000, "speed": 7000, "cost_toob": 35000, "success_rate": 80},
    "sonic": {"name": "سونیک", "power": 45000, "speed": 6500, "cost_toob": 30000, "success_rate": 75},
    "sajil": {"name": "سجیل", "power": 30000, "speed": 5000, "cost_toob": 20000, "success_rate": 70},
    "r29": {"name": "آر ۲۹ آر ام", "power": 20000, "speed": 4000, "cost_toob": 15000, "success_rate": 65}
}

# ==================== جمع‌کننده ====================
COLLECTOR_LEVELS = {
    1: {"toob": 1500, "oil": 1000, "diamond": 10, "max_toob": 10000, "max_oil": 5000, "max_diamond": 50, "upgrade_cost_toob": 0, "upgrade_cost_oil": 0},
    2: {"toob": 3000, "oil": 1500, "diamond": 20, "max_toob": 20000, "max_oil": 10000, "max_diamond": 100, "upgrade_cost_toob": 10000, "upgrade_cost_oil": 5000},
    3: {"toob": 4000, "oil": 3000, "diamond": 30, "max_toob": 40000, "max_oil": 20000, "max_diamond": 200, "upgrade_cost_toob": 20000, "upgrade_cost_oil": 10000}
}

# ==================== پالایشگاه ====================
REFINERY_LEVELS = {
    1: {"rate": 50, "upgrade_cost_toob": 0, "upgrade_cost_oil": 0},
    2: {"rate": 100, "upgrade_cost_toob": 50000, "upgrade_cost_oil": 20000},
    3: {"rate": 150, "upgrade_cost_toob": 100000, "upgrade_cost_oil": 40000},
    4: {"rate": 200, "upgrade_cost_toob": 200000, "upgrade_cost_oil": 80000},
    5: {"rate": 250, "upgrade_cost_toob": 400000, "upgrade_cost_oil": 160000}
}

# ==================== پتروشیمی ====================
PETROCHEM_LEVELS = {
    1: {"rate": 500, "upgrade_cost_toob": 0, "upgrade_cost_oil": 0},
    2: {"rate": 1000, "upgrade_cost_toob": 30000, "upgrade_cost_oil": 10000},
    3: {"rate": 2000, "upgrade_cost_toob": 60000, "upgrade_cost_oil": 20000},
    4: {"rate": 3500, "upgrade_cost_toob": 120000, "upgrade_cost_oil": 40000},
    5: {"rate": 5000, "upgrade_cost_toob": 240000, "upgrade_cost_oil": 80000}
}

# ==================== دیتابیس ====================
def init_db():
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    
    c.execute('''CREATE TABLE IF NOT EXISTS users (
        user_id INTEGER PRIMARY KEY,
        username TEXT,
        first_name TEXT,
        country_name TEXT,
        registered_at INTEGER,
        score INTEGER DEFAULT 1000,
        toob INTEGER DEFAULT 10000,
        oil INTEGER DEFAULT 5000,
        diamond INTEGER DEFAULT 20,
        uranium_raw INTEGER DEFAULT 100,
        uranium_enriched INTEGER DEFAULT 10,
        atom INTEGER DEFAULT 0,
        collector_level INTEGER DEFAULT 1,
        collector_toob INTEGER DEFAULT 0,
        collector_oil INTEGER DEFAULT 0,
        collector_diamond INTEGER DEFAULT 0,
        last_collect_time INTEGER,
        refinery_level INTEGER DEFAULT 1,
        petrochem_level INTEGER DEFAULT 1,
        last_daily_time INTEGER,
        wins INTEGER DEFAULT 0,
        losses INTEGER DEFAULT 0
    )''')
    
    c.execute('''CREATE TABLE IF NOT EXISTS warships (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER,
        ship_key TEXT,
        name TEXT,
        hp INTEGER,
        current_hp INTEGER,
        speed INTEGER,
        power INTEGER,
        fighter_capacity INTEGER,
        defense_capacity INTEGER,
        fighters TEXT DEFAULT '[]',
        defenses TEXT DEFAULT '[]',
        status TEXT DEFAULT 'stationed',
        target_user_id INTEGER,
        arrival_time INTEGER
    )''')
    
    c.execute('''CREATE TABLE IF NOT EXISTS fighters (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER,
        fighter_key TEXT,
        name TEXT,
        speed INTEGER,
        power INTEGER,
        hp INTEGER,
        current_hp INTEGER,
        daily_cost INTEGER,
        warship_id INTEGER DEFAULT 0,
        status TEXT DEFAULT 'active'
    )''')
    
    c.execute('''CREATE TABLE IF NOT EXISTS defenses (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user_id INTEGER,
        defense_key TEXT,
        name TEXT,
        power INTEGER,
        hp INTEGER,
        current_hp INTEGER,
        missile_capacity INTEGER,
        current_missiles INTEGER DEFAULT 0,
        warship_id INTEGER DEFAULT 0
    )''')
    
    c.execute('''CREATE TABLE IF NOT EXISTS missiles (
        user_id INTEGER,
        missile_key TEXT,
        count INTEGER DEFAULT 0,
        PRIMARY KEY (user_id, missile_key)
    )''')
    
    c.execute('''CREATE TABLE IF NOT EXISTS ceasefire (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        user1_id INTEGER,
        user2_id INTEGER,
        end_time INTEGER,
        proposer_id INTEGER,
        status TEXT DEFAULT 'active'
    )''')
    
    c.execute('''CREATE TABLE IF NOT EXISTS battle_logs (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        attacker_id INTEGER,
        defender_id INTEGER,
        result TEXT,
        destruction_percent REAL,
        loot_toob INTEGER,
        loot_oil INTEGER,
        loot_diamond INTEGER,
        loot_uranium INTEGER,
        attacker_losses TEXT,
        defender_losses TEXT,
        timestamp INTEGER
    )''')
    
    conn.commit()
    conn.close()
    logger.info("✅ دیتابیس آماده شد")

def get_user(user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT * FROM users WHERE user_id = ?", (user_id,))
    user = c.fetchone()
    conn.close()
    return user

def get_all_users():
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT user_id, username, first_name, country_name FROM users WHERE country_name IS NOT NULL")
    users = c.fetchall()
    conn.close()
    return users

def create_user(user_id, username, first_name, country_name):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("SELECT user_id FROM users WHERE user_id = ?", (user_id,))
        if c.fetchone():
            conn.close()
            return
        now = int(time.time())
        c.execute('''INSERT INTO users 
            (user_id, username, first_name, country_name, registered_at, last_collect_time, last_daily_time)
            VALUES (?, ?, ?, ?, ?, ?, ?)''',
            (user_id, username or "بدون نام", first_name or "کاربر", country_name, now, now, now))
        conn.commit()
        conn.close()
        logger.info(f"✅ کاربر جدید: {user_id} - {country_name}")

def get_resources(user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT toob, oil, diamond, uranium_raw, uranium_enriched, atom FROM users WHERE user_id = ?", (user_id,))
    res = c.fetchone()
    conn.close()
    if res:
        return {"toob": res[0], "oil": res[1], "diamond": res[2], "uranium_raw": res[3], "uranium_enriched": res[4], "atom": res[5]}
    return None

def update_resources(user_id, toob=0, oil=0, diamond=0, uranium_raw=0, uranium_enriched=0, atom=0):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute('''UPDATE users SET 
            toob = toob + ?, oil = oil + ?, diamond = diamond + ?, 
            uranium_raw = uranium_raw + ?, uranium_enriched = uranium_enriched + ?, atom = atom + ? 
            WHERE user_id = ?''',
            (toob, oil, diamond, uranium_raw, uranium_enriched, atom, user_id))
        conn.commit()
        conn.close()

def update_score(user_id, score_change):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE users SET score = score + ? WHERE user_id = ?", (score_change, user_id))
        conn.commit()
        conn.close()

def update_wins_losses(attacker_id, defender_id, attacker_won):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        if attacker_won:
            c.execute("UPDATE users SET wins = wins + 1, score = score + 50 WHERE user_id = ?", (attacker_id,))
            c.execute("UPDATE users SET losses = losses + 1, score = score - 20 WHERE user_id = ?", (defender_id,))
        else:
            c.execute("UPDATE users SET losses = losses + 1, score = score - 30 WHERE user_id = ?", (attacker_id,))
            c.execute("UPDATE users SET wins = wins + 1, score = score + 30 WHERE user_id = ?", (defender_id,))
        conn.commit()
        conn.close()

def get_collector(user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT collector_level, collector_toob, collector_oil, collector_diamond FROM users WHERE user_id = ?", (user_id,))
    res = c.fetchone()
    conn.close()
    if res:
        return {"level": res[0], "toob": res[1], "oil": res[2], "diamond": res[3]}
    return None

def transfer_collector_to_storage(user_id):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("SELECT collector_toob, collector_oil, collector_diamond FROM users WHERE user_id = ?", (user_id,))
        res = c.fetchone()
        if not res or (res[0] == 0 and res[1] == 0 and res[2] == 0):
            conn.close()
            return "❌ جمع‌کننده خالی است"
        c.execute('''UPDATE users SET 
            toob = toob + ?, oil = oil + ?, diamond = diamond + ?,
            collector_toob = 0, collector_oil = 0, collector_diamond = 0 
            WHERE user_id = ?''', (res[0], res[1], res[2], user_id))
        conn.commit()
        conn.close()
        return f"✅ {res[0]} اجر، {res[1]} نفت، {res[2]} الماس به انبار منتقل شد"

def upgrade_collector(user_id):
    col = get_collector(user_id)
    if not col or col["level"] >= 3:
        return False, "❌ حداکثر سطح!"
    next_level = col["level"] + 1
    cost = COLLECTOR_LEVELS[next_level]
    r = get_resources(user_id)
    if r["toob"] >= cost["upgrade_cost_toob"] and r["oil"] >= cost["upgrade_cost_oil"]:
        with lock:
            conn = sqlite3.connect(DB_PATH, timeout=30)
            c = conn.cursor()
            c.execute("UPDATE users SET collector_level = ?, toob = toob - ?, oil = oil - ? WHERE user_id = ?",
                      (next_level, cost["upgrade_cost_toob"], cost["upgrade_cost_oil"], user_id))
            conn.commit()
            conn.close()
        return True, f"✅ جمع‌کننده به سطح {next_level} ارتقا یافت!"
    return False, "❌ منابع کافی نیست!"

def get_warships(user_id, only_alive=True):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    if only_alive:
        c.execute("SELECT * FROM warships WHERE user_id = ? AND status != 'destroyed'", (user_id,))
    else:
        c.execute("SELECT * FROM warships WHERE user_id = ?", (user_id,))
    ships = c.fetchall()
    conn.close()
    return ships

def get_warship_by_id(warship_id, user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT * FROM warships WHERE id = ? AND user_id = ?", (warship_id, user_id))
    ship = c.fetchone()
    conn.close()
    return ship

def get_all_fighters(user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT * FROM fighters WHERE user_id = ? AND status = 'active'", (user_id,))
    fighters = c.fetchall()
    conn.close()
    return fighters

def get_fighters_on_warship(warship_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT * FROM fighters WHERE warship_id = ? AND status = 'active'", (warship_id,))
    fighters = c.fetchall()
    conn.close()
    return fighters

def get_all_defenses(user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT * FROM defenses WHERE user_id = ?", (user_id,))
    defenses = c.fetchall()
    conn.close()
    return defenses

def get_missiles(user_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT missile_key, count FROM missiles WHERE user_id = ?", (user_id,))
    missiles = {row[0]: row[1] for row in c.fetchall()}
    conn.close()
    return missiles

def use_missile(user_id, missile_key):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE missiles SET count = count - 1 WHERE user_id = ? AND missile_key = ? AND count > 0", (user_id, missile_key))
        conn.commit()
        conn.close()

def build_warship(user_id, ship_key):
    if ship_key not in WARSHIPS:
        return False, "❌ ناو نامعتبر است"
    ship = WARSHIPS[ship_key]
    r = get_resources(user_id)
    if r["toob"] < ship["cost_toob"]:
        return False, f"❌ اجر کافی نیست! نیاز به {ship['cost_toob']:,} اجر"
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE users SET toob = toob - ? WHERE user_id = ?", (ship["cost_toob"], user_id))
        c.execute('''INSERT INTO warships 
            (user_id, ship_key, name, hp, current_hp, speed, power, fighter_capacity, defense_capacity, status)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
            (user_id, ship_key, ship["name"], ship["hp"], ship["hp"], ship["speed"], 
             ship["power"], ship["fighter_capacity"], ship["defense_capacity"], "stationed"))
        conn.commit()
        conn.close()
    return True, f"✅ ناو {ship['name']} ساخته شد!"

def build_fighter(user_id, fighter_key):
    if fighter_key not in FIGHTERS:
        return False, "❌ جنگنده نامعتبر است"
    fighter = FIGHTERS[fighter_key]
    r = get_resources(user_id)
    if r["toob"] < fighter["cost_toob"]:
        return False, f"❌ اجر کافی نیست! نیاز به {fighter['cost_toob']:,} اجر"
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE users SET toob = toob - ? WHERE user_id = ?", (fighter["cost_toob"], user_id))
        c.execute('''INSERT INTO fighters 
            (user_id, fighter_key, name, speed, power, hp, current_hp, daily_cost, status)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)''',
            (user_id, fighter_key, fighter["name"], fighter["speed"], fighter["power"],
             fighter["hp"], fighter["hp"], fighter["daily_cost"], "active"))
        conn.commit()
        conn.close()
    return True, f"✅ جنگنده {fighter['name']} ساخته شد!"

def build_defense(user_id, defense_key):
    if defense_key not in DEFENSES:
        return False, "❌ پدافند نامعتبر است"
    defense = DEFENSES[defense_key]
    r = get_resources(user_id)
    if r["toob"] < defense["cost_toob"]:
        return False, f"❌ اجر کافی نیست! نیاز به {defense['cost_toob']:,} اجر"
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE users SET toob = toob - ? WHERE user_id = ?", (defense["cost_toob"], user_id))
        c.execute('''INSERT INTO defenses 
            (user_id, defense_key, name, power, hp, current_hp, missile_capacity, current_missiles)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)''',
            (user_id, defense_key, defense["name"], defense["power"], defense["hp"],
             defense["hp"], defense["missile_capacity"], defense["missile_capacity"]))
        conn.commit()
        conn.close()
    return True, f"✅ پدافند {defense['name']} ساخته شد!"

def assign_fighter_to_warship(fighter_id, warship_id, user_id):
    warship = get_warship_by_id(warship_id, user_id)
    if not warship:
        return False, "❌ ناو یافت نشد"
    fighters_on_ship = json.loads(warship[10]) if warship[10] else []
    if len(fighters_on_ship) >= warship[8]:
        return False, f"❌ ظرفیت ناو پر است (حداکثر {warship[8]} جنگنده)"
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    c.execute("SELECT * FROM fighters WHERE id = ? AND user_id = ? AND status = 'active'", (fighter_id, user_id))
    fighter = c.fetchone()
    if not fighter:
        conn.close()
        return False, "❌ جنگنده یافت نشد"
    if fighter[9] != 0:
        conn.close()
        return False, "❌ جنگنده قبلاً روی ناو دیگر است"
    with lock:
        fighters_on_ship.append(fighter_id)
        c.execute("UPDATE warships SET fighters = ? WHERE id = ?", (json.dumps(fighters_on_ship), warship_id))
        c.execute("UPDATE fighters SET warship_id = ? WHERE id = ?", (warship_id, fighter_id))
        conn.commit()
        conn.close()
    return True, f"✅ جنگنده {fighter[3]} به ناو منتقل شد"

def move_warship(warship_id, user_id, target_user_id):
    warship = get_warship_by_id(warship_id, user_id)
    if not warship:
        return False, "❌ ناو یافت نشد"
    if warship[12] != "stationed":
        return False, "❌ ناو در حال حرکت یا درگیر است"
    travel_hours = DEFAULT_DISTANCE / warship[6]
    arrival_time = int(time.time()) + (travel_hours * 3600)
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE warships SET status = 'moving', target_user_id = ?, arrival_time = ? WHERE id = ?",
                  (target_user_id, arrival_time, warship_id))
        conn.commit()
        conn.close()
    return True, f"✅ ناو به مقصد حرکت کرد\n⏱ زمان رسیدن: {travel_hours:.1f} ساعت"

def cancel_move(warship_id, user_id):
    warship = get_warship_by_id(warship_id, user_id)
    if not warship:
        return False, "❌ ناو یافت نشد"
    if warship[12] != "moving":
        return False, "❌ ناو در حال حرکت نیست"
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("UPDATE warships SET status = 'stationed', target_user_id = NULL, arrival_time = NULL WHERE id = ?", (warship_id,))
        conn.commit()
        conn.close()
    return True, "✅ حرکت ناو لغو شد"

def calculate_travel_time(speed):
    hours = DEFAULT_DISTANCE / speed
    if hours < 1:
        minutes = int(hours * 60)
        return f"{minutes} دقیقه"
    return f"{hours:.1f} ساعت"

def calculate_attack_power(attacker_id, attack_type, amount, target_id=None):
    total_power = 0
    if attack_type == "warship":
        ships = get_warships(attacker_id)
        for i, ship in enumerate(ships[:amount]):
            ship_power = ship[7] * 10
            fighters_on_ship = get_fighters_on_warship(ship[0])
            fighter_power = sum(f[5] for f in fighters_on_ship)
            total_power += ship_power + fighter_power
    elif attack_type == "fighter":
        fighters = get_all_fighters(attacker_id)
        for i, fighter in enumerate(fighters[:amount]):
            total_power += fighter[5]
    elif attack_type == "missile":
        missiles = get_missiles(attacker_id)
        for key, count in missiles.items():
            if key in MISSILES:
                total_power += MISSILES[key]["power"] * min(count, amount)
    return total_power

def calculate_defense_power(defender_id):
    defenses = get_all_defenses(defender_id)
    defense_power = sum(d[4] * (d[8] or 0) for d in defenses)
    fighters = get_all_fighters(defender_id)
    fighter_power = sum(f[5] for f in fighters)
    ships = get_warships(defender_id)
    ship_power = sum(s[7] * 5 for s in ships)
    return defense_power + fighter_power + ship_power

def execute_attack(attacker_id, defender_id, attack_type, target_type, amount):
    attacker_power = calculate_attack_power(attacker_id, attack_type, amount)
    defender_power = calculate_defense_power(defender_id)
    
    if defender_power == 0:
        success_chance = 95
    else:
        ratio = attacker_power / defender_power
        success_chance = min(95, max(5, int(ratio * 50)))
    
    # اعمال شانس موفقیت خاص برای بمب اتم
    if attack_type == "missile":
        missiles = get_missiles(attacker_id)
        if missiles.get("nuke", 0) >= amount:
            success_chance = 100
    
    success = random.randint(1, 100) <= success_chance
    
    if success:
        destruction_percent = random.randint(40, 90)
    else:
        destruction_percent = random.randint(5, 35)
    
    defender_res = get_resources(defender_id)
    loot_toob = int(defender_res["toob"] * (destruction_percent / 100) * 0.5)
    loot_oil = int(defender_res["oil"] * (destruction_percent / 100) * 0.5)
    loot_diamond = int(defender_res["diamond"] * (destruction_percent / 100) * 0.5)
    loot_uranium = int(defender_res["uranium_raw"] * (destruction_percent / 100) * 0.5)
    
    attacker_losses = []
    defender_losses = []
    
    # تلفات مهاجم
    loss_chance = min(70, max(5, int((defender_power / max(1, attacker_power)) * 30)))
    
    if attack_type == "fighter":
        fighters = get_all_fighters(attacker_id)
        for fighter in fighters[:amount]:
            if random.randint(1, 100) <= loss_chance:
                attacker_losses.append(fighter[3])
                with lock:
                    conn = sqlite3.connect(DB_PATH, timeout=30)
                    c = conn.cursor()
                    c.execute("UPDATE fighters SET status = 'destroyed' WHERE id = ?", (fighter[0],))
                    conn.commit()
                    conn.close()
    
    elif attack_type == "warship":
        ships = get_warships(attacker_id)
        for ship in ships[:amount]:
            if random.randint(1, 100) <= loss_chance:
                attacker_losses.append(ship[3])
                with lock:
                    conn = sqlite3.connect(DB_PATH, timeout=30)
                    c = conn.cursor()
                    c.execute("UPDATE warships SET status = 'destroyed' WHERE id = ?", (ship[0],))
                    conn.commit()
                    conn.close()
    
    elif attack_type == "missile":
        missiles = get_missiles(attacker_id)
        for key, count in list(missiles.items()):
            to_use = min(count, amount)
            for _ in range(to_use):
                use_missile(attacker_id, key)
    
    # تلفات مدافع
    defender_loss_chance = min(80, max(10, int((attacker_power / max(1, defender_power)) * 40)))
    
    defenses = get_all_defenses(defender_id)
    for defense in defenses:
        if random.randint(1, 100) <= defender_loss_chance:
            defender_losses.append(f"پدافند {defense[3]}")
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("DELETE FROM defenses WHERE id = ?", (defense[0],))
                conn.commit()
                conn.close()
    
    defender_fighters = get_all_fighters(defender_id)
    for fighter in defender_fighters:
        if random.randint(1, 100) <= defender_loss_chance:
            defender_losses.append(f"جنگنده {fighter[3]}")
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("UPDATE fighters SET status = 'destroyed' WHERE id = ?", (fighter[0],))
                conn.commit()
                conn.close()
    
    # اعمال غنیمت
    if success:
        update_resources(attacker_id, toob=loot_toob, oil=loot_oil, diamond=loot_diamond, uranium_raw=loot_uranium)
        update_resources(defender_id, toob=-loot_toob, oil=-loot_oil, diamond=-loot_diamond, uranium_raw=-loot_uranium)
        update_wins_losses(attacker_id, defender_id, True)
    else:
        update_wins_losses(attacker_id, defender_id, False)
    
    # ذخیره لاگ
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute('''INSERT INTO battle_logs 
            (attacker_id, defender_id, result, destruction_percent, loot_toob, loot_oil, loot_diamond, loot_uranium, attacker_losses, defender_losses, timestamp)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
            (attacker_id, defender_id, "win" if success else "lose", destruction_percent,
             loot_toob, loot_oil, loot_diamond, loot_uranium,
             json.dumps(attacker_losses), json.dumps(defender_losses), int(time.time())))
        conn.commit()
        conn.close()
    
    return {
        "success": success,
        "destruction_percent": destruction_percent,
        "loot_toob": loot_toob,
        "loot_oil": loot_oil,
        "loot_diamond": loot_diamond,
        "loot_uranium": loot_uranium,
        "attacker_losses": attacker_losses,
        "defender_losses": defender_losses,
        "attacker_power": attacker_power,
        "defender_power": defender_power
    }

def propose_ceasefire(user1_id, user2_id, duration_hours):
    end_time = int(time.time()) + (duration_hours * 3600)
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute('''INSERT INTO ceasefire (user1_id, user2_id, end_time, proposer_id, status)
            VALUES (?, ?, ?, ?, ?)''', (user1_id, user2_id, end_time, user1_id, "pending"))
        conn.commit()
        conn.close()
    return end_time

def accept_ceasefire(user1_id, user2_id):
    with lock:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute('''UPDATE ceasefire SET status = 'active' 
            WHERE ((user1_id = ? AND user2_id = ?) OR (user1_id = ? AND user2_id = ?)) AND status = 'pending''',
            (user1_id, user2_id, user2_id, user1_id))
        conn.commit()
        conn.close()

def is_ceasefire_active(user1_id, user2_id):
    conn = sqlite3.connect(DB_PATH, timeout=30)
    c = conn.cursor()
    now = int(time.time())
    c.execute('''SELECT end_time FROM ceasefire 
        WHERE ((user1_id = ? AND user2_id = ?) OR (user1_id = ? AND user2_id = ?)) 
        AND status = 'active' AND end_time > ?''',
        (user1_id, user2_id, user2_id, user1_id, now))
    result = c.fetchone()
    conn.close()
    return result is not None

def auto_production():
    while True:
        time.sleep(3600)
        try:
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("SELECT user_id, collector_level, collector_toob, collector_oil, collector_diamond, refinery_level, petrochem_level FROM users")
                users = c.fetchall()
                for uid, clevel, ctoob, coil, cdiamond, rlevel, plevel in users:
                    col_data = COLLECTOR_LEVELS[clevel]
                    new_ctoob = min(ctoob + col_data["toob"], col_data["max_toob"])
                    new_coil = min(coil + col_data["oil"], col_data["max_oil"])
                    new_cdiamond = min(cdiamond + col_data["diamond"], col_data["max_diamond"])
                    refinery_rate = REFINERY_LEVELS[rlevel]["rate"]
                    petrochem_rate = PETROCHEM_LEVELS[plevel]["rate"]
                    c.execute('''UPDATE users SET 
                        collector_toob = ?, collector_oil = ?, collector_diamond = ?,
                        uranium_raw = uranium_raw + ?, oil = oil + ?
                        WHERE user_id = ?''',
                        (new_ctoob, new_coil, new_cdiamond, refinery_rate, petrochem_rate, uid))
                    
                    # هزینه نگهداری روزانه ناوها و جنگنده‌ها
                    c.execute("SELECT daily_uranium FROM warships WHERE user_id = ? AND status != 'destroyed'", (uid,))
                    ships = c.fetchall()
                    total_uranium_cost = sum(s[0] for s in ships)
                    c.execute("SELECT daily_cost FROM fighters WHERE user_id = ? AND status = 'active'", (uid,))
                    fighters = c.fetchall()
                    total_toob_cost = sum(f[0] for f in fighters)
                    
                    if total_uranium_cost > 0 or total_toob_cost > 0:
                        c.execute("SELECT uranium_enriched, toob FROM users WHERE user_id = ?", (uid,))
                        res = c.fetchone()
                        if res and res[0] >= total_uranium_cost and res[1] >= total_toob_cost:
                            c.execute("UPDATE users SET uranium_enriched = uranium_enriched - ?, toob = toob - ? WHERE user_id = ?",
                                      (total_uranium_cost, total_toob_cost, uid))
                        elif res:
                            c.execute("UPDATE warships SET status = 'inactive' WHERE user_id = ?", (uid,))
                            c.execute("UPDATE fighters SET status = 'inactive' WHERE user_id = ?", (uid,))
                conn.commit()
                conn.close()
                logger.info("✅ تولید خودکار انجام شد")
        except Exception as e:
            logger.error(f"❌ خطا در تولید: {e}")

# ==================== منوها ====================
def main_menu():
    kb = InlineKeyboardMarkup(row_width=2)
    kb.add(InlineKeyboardButton("🗺 کشور من", callback_data="my_country"), InlineKeyboardButton("📦 انبار", callback_data="inventory"))
    kb.add(InlineKeyboardButton("📦 جمع‌کننده", callback_data="collector"), InlineKeyboardButton("🚢 ناوها", callback_data="warships"))
    kb.add(InlineKeyboardButton("✈️ جنگنده‌ها", callback_data="fighters_menu"), InlineKeyboardButton("🛡 پدافندها", callback_data="defenses_menu"))
    kb.add(InlineKeyboardButton("🚀 موشک‌ها", callback_data="missiles_menu"), InlineKeyboardButton("🏭 پالایشگاه", callback_data="refinery"))
    kb.add(InlineKeyboardButton("🏭 پتروشیمی", callback_data="petrochem"), InlineKeyboardButton("⚔️ حمله", callback_data="attack_menu"))
    kb.add(InlineKeyboardButton("🕊 آتش‌بس", callback_data="ceasefire_menu"), InlineKeyboardButton("🏆 رتبه‌بندی", callback_data="ranking"))
    kb.add(InlineKeyboardButton("📊 آمار من", callback_data="my_stats"), InlineKeyboardButton("👑 ادمین", callback_data="admin_panel"))
    return kb

def country_choose_menu():
    kb = InlineKeyboardMarkup(row_width=2)
    kb.add(InlineKeyboardButton("🇮🇷 ایران", callback_data="country_ایران"), InlineKeyboardButton("🇺🇸 آمریکا", callback_data="country_آمریکا"))
    kb.add(InlineKeyboardButton("🇷🇺 روسیه", callback_data="country_روسیه"), InlineKeyboardButton("🇨🇳 چین", callback_data="country_چین"))
    kb.add(InlineKeyboardButton("🇬🇧 بریتانیا", callback_data="country_بریتانیا"), InlineKeyboardButton("🇫🇷 فرانسه", callback_data="country_فرانسه"))
    kb.add(InlineKeyboardButton("🇩🇪 آلمان", callback_data="country_آلمان"), InlineKeyboardButton("🇹🇷 ترکیه", callback_data="country_ترکیه"))
    kb.add(InlineKeyboardButton("✏️ اسم دلخواه", callback_data="country_custom"))
    return kb

def admin_panel_menu():
    kb = InlineKeyboardMarkup(row_width=2)
    kb.add(InlineKeyboardButton("💰 +۱۰۰k اجر", callback_data="admin_add_money"), InlineKeyboardButton("🛢 +۱۰k نفت", callback_data="admin_add_oil"))
    kb.add(InlineKeyboardButton("💎 +۱۰۰ الماس", callback_data="admin_add_diamond"), InlineKeyboardButton("☢️ +۱۰۰۰ اورانیوم", callback_data="admin_add_uranium"))
    kb.add(InlineKeyboardButton("💣 +۱۰ اتم", callback_data="admin_add_atom"), InlineKeyboardButton("📊 آمار", callback_data="admin_stats"))
    kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
    return kb

def attack_type_menu(target_id):
    kb = InlineKeyboardMarkup(row_width=2)
    kb.add(InlineKeyboardButton("🚢 ناو", callback_data=f"attack_type_{target_id}_warship"))
    kb.add(InlineKeyboardButton("✈️ جنگنده", callback_data=f"attack_type_{target_id}_fighter"))
    kb.add(InlineKeyboardButton("🚀 موشک", callback_data=f"attack_type_{target_id}_missile"))
    kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="attack_menu"))
    return kb

def attack_target_menu(target_id, attack_type):
    kb = InlineKeyboardMarkup(row_width=2)
    kb.add(InlineKeyboardButton("🎯 همه چیز", callback_data=f"attack_target_{target_id}_{attack_type}_all"))
    kb.add(InlineKeyboardButton("🛡 فقط پدافند", callback_data=f"attack_target_{target_id}_{attack_type}_defenses"))
    kb.add(InlineKeyboardButton("💰 فقط منابع", callback_data=f"attack_target_{target_id}_{attack_type}_resources"))
    kb.add(InlineKeyboardButton("🚢 فقط ناوها", callback_data=f"attack_target_{target_id}_{attack_type}_warships"))
    kb.add(InlineKeyboardButton("✈️ فقط جنگنده", callback_data=f"attack_target_{target_id}_{attack_type}_fighters"))
    kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data=f"attack_target_{target_id}"))
    return kb

def attack_amount_menu(target_id, attack_type, target_type, max_amount):
    kb = InlineKeyboardMarkup(row_width=5)
    for i in range(1, min(6, max_amount)+1):
        kb.add(InlineKeyboardButton(str(i), callback_data=f"attack_execute_{target_id}_{attack_type}_{target_type}_{i}"))
    if max_amount > 5:
        kb.add(InlineKeyboardButton(f"همه ({max_amount})", callback_data=f"attack_execute_{target_id}_{attack_type}_{target_type}_{max_amount}"))
    kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data=f"attack_type_{target_id}_{attack_type}"))
    return kb

def ceasefire_duration_menu(target_id):
    kb = InlineKeyboardMarkup(row_width=3)
    for h in [6, 12, 24, 48, 72]:
        kb.add(InlineKeyboardButton(f"{h} ساعت", callback_data=f"ceasefire_duration_{target_id}_{h}"))
    kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="ceasefire_menu"))
    return kb

# ==================== هندلرها ====================
@bot.message_handler(commands=['start'])
def start(msg):
    uid = msg.from_user.id
    user = get_user(uid)
    if not user:
        bot.send_message(uid, "🌍 **به بازی جنگ خوش آمدی!**\n\nلطفاً اسم کشورت رو انتخاب کن:", reply_markup=country_choose_menu(), parse_mode="Markdown")
    else:
        bot.send_message(uid, "🏠 **منوی اصلی**", reply_markup=main_menu(), parse_mode="Markdown")

def set_custom_country(msg):
    uid = msg.from_user.id
    country_name = msg.text.strip()
    if len(country_name) > 30:
        bot.send_message(uid, "❌ اسم کشور نباید بیشتر از ۳۰ حرف باشد!")
        return
    create_user(uid, msg.from_user.username, msg.from_user.first_name, country_name)
    bot.send_message(uid, f"✅ کشور **{country_name}** ثبت شد!\n\nبه منوی اصلی برو:", reply_markup=main_menu(), parse_mode="Markdown")

@bot.callback_query_handler(func=lambda call: True)
def callback(call):
    uid = call.from_user.id
    data = call.data
    msg = call.message
    
    # ========== انتخاب کشور ==========
    if data.startswith("country_"):
        country = data.split("_", 1)[1]
        if country == "custom":
            bot.send_message(uid, "✏️ اسم کشور دلخواهت رو بنویس:")
            bot.register_next_step_handler(msg, set_custom_country)
        else:
            create_user(uid, call.from_user.username, call.from_user.first_name, country)
            bot.edit_message_text(f"✅ کشور **{country}** ثبت شد!\n\nبه منوی اصلی برو:", uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== کشور من ==========
    if data == "my_country":
        user = get_user(uid)
        if user and user[3]:
            bot.answer_callback_query(call.id, f"🇮🇷 کشور: {user[3]}", show_alert=True)
        else:
            bot.answer_callback_query(call.id, "❌ هنوز کشوری انتخاب نکردی!", show_alert=True)
        return
    
    # ========== انبار ==========
    if data == "inventory":
        r = get_resources(uid)
        if r:
            text = f"📦 **انبار شما**\n\n💰 اجر: {r['toob']:,}\n🛢 نفت: {r['oil']:,}\n💎 الماس: {r['diamond']}\n☢️ اورانیوم خام: {r['uranium_raw']}\n⚛️ اورانیوم غنی‌شده: {r['uranium_enriched']}\n💣 اتم: {r['atom']}"
            bot.edit_message_text(text, uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== جمع‌کننده ==========
    if data == "collector":
        col = get_collector(uid)
        if col:
            lvl = col["level"]
            d = COLLECTOR_LEVELS[lvl]
            text = f"📦 **جمع‌کننده سطح {lvl}**\n\n💰 اجر: {col['toob']:,} / {d['max_toob']:,}\n🛢 نفت: {col['oil']:,} / {d['max_oil']:,}\n💎 الماس: {col['diamond']} / {d['max_diamond']}\n\n⚡ تولید ساعتی: {d['toob']:,} اجر | {d['oil']:,} نفت | {d['diamond']} الماس"
            kb = InlineKeyboardMarkup()
            kb.add(InlineKeyboardButton("📥 انتقال به انبار", callback_data="transfer_collector"))
            if lvl < 3:
                kb.add(InlineKeyboardButton(f"⬆️ ارتقا (💰{d['upgrade_cost_toob']:,} + 🛢{d['upgrade_cost_oil']:,})", callback_data="upgrade_collector"))
            kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
            bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data == "transfer_collector":
        res = transfer_collector_to_storage(uid)
        bot.answer_callback_query(call.id, res, show_alert=True)
        new_call = type('obj', (object,), {'data': 'collector', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    if data == "upgrade_collector":
        success, message = upgrade_collector(uid)
        bot.answer_callback_query(call.id, message, show_alert=True)
        new_call = type('obj', (object,), {'data': 'collector', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== منوی اصلی ==========
    if data == "main_menu":
        bot.edit_message_text("🏠 **منوی اصلی**", uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== ناوها ==========
    if data == "warships":
        ships = get_warships(uid)
        if not ships:
            kb = InlineKeyboardMarkup()
            kb.add(InlineKeyboardButton("🛒 خرید ناو", callback_data="buy_warship"))
            kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
            bot.edit_message_text("❌ **هیچ ناوی نداری!**", uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
            return
        text = "🚢 **ناوهای تو**\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for ship in ships:
            status_text = "🟢 مستقر" if ship[12] == "stationed" else "🟡 در حرکت" if ship[12] == "moving" else "🔴 درگیر"
            fighters_count = len(json.loads(ship[10])) if ship[10] else 0
            text += f"**{ship[3]}** - {status_text}\n   💪 قدرت: {ship[7]:,} | ✈️ {fighters_count}/{ship[8]}\n\n"
            kb.add(InlineKeyboardButton(f"🚢 {ship[3]}", callback_data=f"warship_{ship[0]}"))
        kb.add(InlineKeyboardButton("🛒 خرید ناو جدید", callback_data="buy_warship"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("warship_"):
        ship_id = int(data.split("_")[1])
        ship = get_warship_by_id(ship_id, uid)
        if not ship:
            bot.answer_callback_query(call.id, "❌ ناو یافت نشد!", show_alert=True)
            return
        fighters_on_ship = len(json.loads(ship[10])) if ship[10] else 0
        text = f"🚢 **{ship[3]}**\n\n💪 قدرت: {ship[7]:,}\n❤️ HP: {ship[5]}/{ship[4]}\n⚡ سرعت: {ship[6]} km/h\n✈️ جنگنده: {fighters_on_ship}/{ship[8]}\n🛡 پدافند: {len(json.loads(ship[11])) if ship[11] else 0}/{ship[9]}"
        kb = InlineKeyboardMarkup(row_width=2)
        kb.add(InlineKeyboardButton("📍 حرکت", callback_data=f"move_ship_{ship_id}"))
        if ship[12] == "moving":
            kb.add(InlineKeyboardButton("⏹ لغو حرکت", callback_data=f"cancel_move_{ship_id}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="warships"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("move_ship_"):
        ship_id = int(data.split("_")[2])
        users = get_all_users()
        if len(users) <= 1:
            bot.answer_callback_query(call.id, "❌ کاربر دیگری وجود ندارد!", show_alert=True)
            return
        text = "📍 **انتخاب مقصد**\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for user in users:
            if user[0] != uid:
                name = f"@{user[1]}" if user[1] and user[1] != "بدون نام" else user[2]
                kb.add(InlineKeyboardButton(f"📍 {name} - {user[3]}", callback_data=f"move_confirm_{ship_id}_{user[0]}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data=f"warship_{ship_id}"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("move_confirm_"):
        parts = data.split("_")
        ship_id = int(parts[2])
        target_id = int(parts[3])
        success, message = move_warship(ship_id, uid, target_id)
        bot.answer_callback_query(call.id, message, show_alert=True)
        new_call = type('obj', (object,), {'data': 'warships', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    if data.startswith("cancel_move_"):
        ship_id = int(data.split("_")[2])
        success, message = cancel_move(ship_id, uid)
        bot.answer_callback_query(call.id, message, show_alert=True)
        new_call = type('obj', (object,), {'data': f"warship_{ship_id}", 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    if data == "buy_warship":
        text = "🛒 **خرید ناو**\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for key, ship in WARSHIPS.items():
            text += f"**{ship['name']}** - {ship['cost_toob']:,} اجر\n"
            kb.add(InlineKeyboardButton(f"🚢 خرید {ship['name']}", callback_data=f"buy_warship_{key}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("buy_warship_"):
        ship_key = data.replace("buy_warship_", "")
        success, message = build_warship(uid, ship_key)
        bot.answer_callback_query(call.id, message, show_alert=True)
        new_call = type('obj', (object,), {'data': 'warships', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== جنگنده‌ها ==========
    if data == "fighters_menu":
        fighters = get_all_fighters(uid)
        if not fighters:
            kb = InlineKeyboardMarkup()
            kb.add(InlineKeyboardButton("🛒 خرید جنگنده", callback_data="buy_fighter"))
            kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
            bot.edit_message_text("❌ **هیچ جنگنده‌ای نداری!**", uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
            return
        text = "✈️ **جنگنده‌های تو**\n\n"
        for fighter in fighters:
            on_ship = "🚢 روی ناو" if fighter[9] > 0 else "🏠 در آشیانه"
            text += f"**{fighter[3]}** - 💪 {fighter[5]} | ❤️ {fighter[7]}/{fighter[6]} | {on_ship}\n"
        kb = InlineKeyboardMarkup()
        kb.add(InlineKeyboardButton("🛒 خرید جنگنده", callback_data="buy_fighter"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data == "buy_fighter":
        text = "🛒 **خرید جنگنده**\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for key, fighter in FIGHTERS.items():
            text += f"**{fighter['name']}** - {fighter['cost_toob']:,} اجر\n"
            kb.add(InlineKeyboardButton(f"✈️ خرید {fighter['name']}", callback_data=f"buy_fighter_{key}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("buy_fighter_"):
        fighter_key = data.replace("buy_fighter_", "")
        success, message = build_fighter(uid, fighter_key)
        bot.answer_callback_query(call.id, message, show_alert=True)
        new_call = type('obj', (object,), {'data': 'fighters_menu', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== پدافندها ==========
    if data == "defenses_menu":
        defenses = get_all_defenses(uid)
        if not defenses:
            kb = InlineKeyboardMarkup()
            kb.add(InlineKeyboardButton("🛒 خرید پدافند", callback_data="buy_defense"))
            kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
            bot.edit_message_text("❌ **هیچ پدافندی نداری!**", uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
            return
        text = "🛡 **پدافندهای تو**\n\n"
        for defense in defenses:
            on_ship = "🚢 روی ناو" if defense[9] > 0 else "🏠 در انبار"
            text += f"**{defense[3]}** - 💪 {defense[4]:,} | 🔫 {defense[8]}/{defense[7]} | {on_ship}\n"
        kb = InlineKeyboardMarkup()
        kb.add(InlineKeyboardButton("🛒 خرید پدافند", callback_data="buy_defense"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data == "buy_defense":
        text = "🛒 **خرید پدافند**\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for key, defense in DEFENSES.items():
            text += f"**{defense['name']}** - {defense['cost_toob']:,} اجر\n"
            kb.add(InlineKeyboardButton(f"🛡 خرید {defense['name']}", callback_data=f"buy_defense_{key}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("buy_defense_"):
        defense_key = data.replace("buy_defense_", "")
        success, message = build_defense(uid, defense_key)
        bot.answer_callback_query(call.id, message, show_alert=True)
        new_call = type('obj', (object,), {'data': 'defenses_menu', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== موشک‌ها ==========
    if data == "missiles_menu":
        r = get_resources(uid)
        missiles = get_missiles(uid)
        text = f"🚀 **موشک‌ها**\n\n💰 اجر: {r['toob']:,}\n💎 الماس: {r['diamond']}\n⚛️ اورانیوم: {r['uranium_enriched']}\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for key, m in MISSILES.items():
            count = missiles.get(key, 0)
            text += f"• {m['name']}: {count} عدد (قدرت {m['power']:,})\n"
            if key == "nuke":
                kb.add(InlineKeyboardButton(f"💣 ساخت {m['name']} (هزینه: {m['cost_uranium']} اورانیوم + {m['cost_diamond']} الماس)", callback_data=f"build_missile_{key}"))
            else:
                kb.add(InlineKeyboardButton(f"🚀 ساخت {m['name']} (هزینه: {m['cost_toob']:,} اجر)", callback_data=f"build_missile_{key}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("build_missile_"):
        key = data.replace("build_missile_", "")
        m = MISSILES[key]
        r = get_resources(uid)
        if key == "nuke":
            if r["uranium_enriched"] >= m["cost_uranium"] and r["diamond"] >= m["cost_diamond"]:
                with lock:
                    conn = sqlite3.connect(DB_PATH, timeout=30)
                    c = conn.cursor()
                    c.execute("UPDATE users SET uranium_enriched = uranium_enriched - ?, diamond = diamond - ?, atom = atom + 1 WHERE user_id = ?",
                              (m["cost_uranium"], m["cost_diamond"], uid))
                    conn.commit()
                    conn.close()
                bot.answer_callback_query(call.id, f"✅ {m['name']} ساخته شد!", show_alert=True)
            else:
                bot.answer_callback_query(call.id, "❌ منابع کافی نیست!", show_alert=True)
        else:
            if r["toob"] >= m["cost_toob"]:
                with lock:
                    conn = sqlite3.connect(DB_PATH, timeout=30)
                    c = conn.cursor()
                    c.execute("UPDATE users SET toob = toob - ? WHERE user_id = ?", (m["cost_toob"], uid))
                    c.execute("INSERT OR REPLACE INTO missiles (user_id, missile_key, count) VALUES (?, ?, COALESCE((SELECT count FROM missiles WHERE user_id=? AND missile_key=?), 0) + 1)",
                              (uid, key, uid, key))
                    conn.commit()
                    conn.close()
                bot.answer_callback_query(call.id, f"✅ {m['name']} ساخته شد!", show_alert=True)
            else:
                bot.answer_callback_query(call.id, "❌ اجر کافی نیست!", show_alert=True)
        new_call = type('obj', (object,), {'data': 'missiles_menu', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== پالایشگاه ==========
    if data == "refinery":
        user = get_user(uid)
        level = user[16] if user else 1
        rate = REFINERY_LEVELS[level]["rate"]
        r = get_resources(uid)
        text = f"🏭 **پالایشگاه** (سطح {level})\n\n⚡ تولید: {rate} اورانیوم/ساعت\n☢️ خام: {r['uranium_raw']}\n⚛️ غنی‌شده: {r['uranium_enriched']}\n\n🔄 هر ۱۰ خام → ۱ غنی‌شده"
        kb = InlineKeyboardMarkup()
        kb.add(InlineKeyboardButton("🔄 تبدیل ۱۰ خام → ۱ غنی‌شده", callback_data="refine_uranium"))
        if level < 5:
            cost = REFINERY_LEVELS[level+1]
            kb.add(InlineKeyboardButton(f"⬆️ ارتقا (💰{cost['upgrade_cost_toob']:,} + 🛢{cost['upgrade_cost_oil']:,})", callback_data="upgrade_refinery"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data == "refine_uranium":
        r = get_resources(uid)
        if r["uranium_raw"] >= 10:
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("UPDATE users SET uranium_raw = uranium_raw - 10, uranium_enriched = uranium_enriched + 1 WHERE user_id = ?", (uid,))
                conn.commit()
                conn.close()
            bot.answer_callback_query(call.id, "✅ ۱۰ اورانیوم خام به ۱ غنی‌شده تبدیل شد!", show_alert=True)
        else:
            bot.answer_callback_query(call.id, "❌ اورانیوم خام کافی نیست!", show_alert=True)
        new_call = type('obj', (object,), {'data': 'refinery', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    if data == "upgrade_refinery":
        user = get_user(uid)
        level = user[16] if user else 1
        if level >= 5:
            bot.answer_callback_query(call.id, "❌ حداکثر سطح!", show_alert=True)
            return
        next_level = level + 1
        cost = REFINERY_LEVELS[next_level]
        r = get_resources(uid)
        if r["toob"] >= cost["upgrade_cost_toob"] and r["oil"] >= cost["upgrade_cost_oil"]:
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("UPDATE users SET refinery_level = ?, toob = toob - ?, oil = oil - ? WHERE user_id = ?",
                          (next_level, cost["upgrade_cost_toob"], cost["upgrade_cost_oil"], uid))
                conn.commit()
                conn.close()
            bot.answer_callback_query(call.id, f"✅ پالایشگاه به سطح {next_level} ارتقا یافت!", show_alert=True)
        else:
            bot.answer_callback_query(call.id, "❌ منابع کافی نیست!", show_alert=True)
        new_call = type('obj', (object,), {'data': 'refinery', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== پتروشیمی ==========
    if data == "petrochem":
        user = get_user(uid)
        level = user[17] if user else 1
        rate = PETROCHEM_LEVELS[level]["rate"]
        r = get_resources(uid)
        text = f"🏭 **پتروشیمی** (سطح {level})\n\n⚡ تولید: {rate} نفت/ساعت\n🛢 نفت: {r['oil']:,}\n\n🔄 هر ۱۰۰۰ نفت → ۵۰ الماس"
        kb = InlineKeyboardMarkup()
        kb.add(InlineKeyboardButton("🔄 تبدیل ۱۰۰۰ نفت → ۵۰ الماس", callback_data="convert_oil_to_diamond"))
        if level < 5:
            cost = PETROCHEM_LEVELS[level+1]
            kb.add(InlineKeyboardButton(f"⬆️ ارتقا (💰{cost['upgrade_cost_toob']:,} + 🛢{cost['upgrade_cost_oil']:,})", callback_data="upgrade_petrochem"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data == "convert_oil_to_diamond":
        r = get_resources(uid)
        if r["oil"] >= 1000:
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("UPDATE users SET oil = oil - 1000, diamond = diamond + 50 WHERE user_id = ?", (uid,))
                conn.commit()
                conn.close()
            bot.answer_callback_query(call.id, "✅ ۱۰۰۰ نفت به ۵۰ الماس تبدیل شد!", show_alert=True)
        else:
            bot.answer_callback_query(call.id, "❌ نفت کافی نیست!", show_alert=True)
        new_call = type('obj', (object,), {'data': 'petrochem', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    if data == "upgrade_petrochem":
        user = get_user(uid)
        level = user[17] if user else 1
        if level >= 5:
            bot.answer_callback_query(call.id, "❌ حداکثر سطح!", show_alert=True)
            return
        next_level = level + 1
        cost = PETROCHEM_LEVELS[next_level]
        r = get_resources(uid)
        if r["toob"] >= cost["upgrade_cost_toob"] and r["oil"] >= cost["upgrade_cost_oil"]:
            with lock:
                conn = sqlite3.connect(DB_PATH, timeout=30)
                c = conn.cursor()
                c.execute("UPDATE users SET petrochem_level = ?, toob = toob - ?, oil = oil - ? WHERE user_id = ?",
                          (next_level, cost["upgrade_cost_toob"], cost["upgrade_cost_oil"], uid))
                conn.commit()
                conn.close()
            bot.answer_callback_query(call.id, f"✅ پتروشیمی به سطح {next_level} ارتقا یافت!", show_alert=True)
        else:
            bot.answer_callback_query(call.id, "❌ منابع کافی نیست!", show_alert=True)
        new_call = type('obj', (object,), {'data': 'petrochem', 'id': call.id, 'message': msg})
        callback(new_call)
        return
    
    # ========== آمار ==========
    if data == "my_stats":
        user = get_user(uid)
        if user:
            total = user[18] + user[19]
            win_rate = (user[18] / total * 100) if total > 0 else 0
            text = f"📊 **آمار شما**\n\n🏆 امتیاز: {user[5]}\n✅ پیروزی: {user[18]}\n❌ شکست: {user[19]}\n📈 نرخ برد: {win_rate:.1f}%"
            bot.edit_message_text(text, uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== رتبه‌بندی ==========
    if data == "ranking":
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("SELECT user_id, username, first_name, country_name, score, wins, losses FROM users ORDER BY score DESC LIMIT 10")
        top = c.fetchall()
        conn.close()
        text = "🏆 **رتبه‌بندی جهانی**\n\n"
        for i, (uid2, uname, fname, country, score, wins, losses) in enumerate(top, 1):
            name = f"@{uname}" if uname and uname != "بدون نام" else fname
            medal = "🥇" if i == 1 else "🥈" if i == 2 else "🥉" if i == 3 else f"{i}."
            text += f"{medal} **{name}** - {country}\n   📊 امتیاز: {score} | {wins} برد / {losses} باخت\n\n"
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== منوی حمله ==========
    if data == "attack_menu":
        users = get_all_users()
        if len(users) <= 1:
            bot.answer_callback_query(call.id, "❌ کاربر دیگری برای حمله وجود ندارد!", show_alert=True)
            return
        text = "⚔️ **انتخاب هدف**\n\n"
        kb = InlineKeyboardMarkup(row_width=1)
        for user in users:
            if user[0] != uid:
                name = f"@{user[1]}" if user[1] and user[1] != "بدون نام" else user[2]
                kb.add(InlineKeyboardButton(f"⚔️ {name} - {user[3]}", callback_data=f"attack_target_{user[0]}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("attack_target_"):
        target_id = int(data.split("_")[2])
        target_user = get_user(target_id)
        if is_ceasefire_active(uid, target_id):
            bot.answer_callback_query(call.id, "❌ با این کشور آتش‌بس داری! نمی‌تونی حمله کنی.", show_alert=True)
            return
        text = f"⚔️ **حمله به {target_user[3]}**\n\nوسیله حمله را انتخاب کن:"
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=attack_type_menu(target_id), parse_mode="Markdown")
        return
    
    if data.startswith("attack_type_"):
        parts = data.split("_")
        target_id = int(parts[2])
        attack_type = parts[3]
        text = f"⚔️ **نوع هدف را انتخاب کن**"
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=attack_target_menu(target_id, attack_type), parse_mode="Markdown")
        return
    
    if data.startswith("attack_target_"):
        parts = data.split("_")
        target_id = int(parts[2])
        attack_type = parts[3]
        target_type = parts[4]
        
        max_amount = 0
        if attack_type == "warship":
            max_amount = len(get_warships(uid))
        elif attack_type == "fighter":
            max_amount = len(get_all_fighters(uid))
        else:
            max_amount = sum(get_missiles(uid).values())
        
        if max_amount == 0:
            bot.answer_callback_query(call.id, f"❌ هیچ {attack_type}ای برای حمله نداری!", show_alert=True)
            return
        
        text = f"⚔️ **تعداد {attack_type} برای حمله** (۱ تا {max_amount})"
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=attack_amount_menu(target_id, attack_type, target_type, max_amount), parse_mode="Markdown")
        return
    
    if data.startswith("attack_execute_"):
        parts = data.split("_")
        target_id = int(parts[2])
        attack_type = parts[3]
        target_type = parts[4]
        amount = int(parts[5])
        
        target_user = get_user(target_id)
        
        bot.edit_message_text("🔥 **حمله در حال انجام...**\n\nلحظاتی صبر کنید...", uid, msg.message_id, parse_mode="Markdown")
        time.sleep(2)
        
        result = execute_attack(uid, target_id, attack_type, target_type, amount)
        
        # گزارش در گروه (اگر در گروه باشد)
        if msg.chat.type in ["group", "supergroup"]:
            attacker_name = get_user(uid)[3]
            defender_name = target_user[3]
            status = "✅ **پیروزی**" if result["success"] else "❌ **شکست**"
            group_report = f"⚔️ **نبرد کشورها**\n\n{attacker_name} → {defender_name}\n{status}\n💥 تخریب: {result['destruction_percent']}%\n💰 غنیمت: {result['loot_toob']:,} اجر + {result['loot_oil']:,} نفت"
            if result["attacker_losses"]:
                group_report += f"\n💀 تلفات مهاجم: {', '.join(result['attacker_losses'])}"
            if result["defender_losses"]:
                group_report += f"\n💀 تلفات مدافع: {', '.join(result['defender_losses'])}"
            bot.send_message(msg.chat.id, group_report, parse_mode="Markdown")
        
        # گزارش در پیوی مهاجم
        attacker_report = f"📨 **گزارش حمله به {target_user[3]}**\n\n"
        attacker_report += f"{'✅ پیروزی' if result['success'] else '❌ شکست'}\n"
        attacker_report += f"💥 تخریب: {result['destruction_percent']}%\n"
        attacker_report += f"📊 قدرت شما: {result['attacker_power']:,}\n"
        attacker_report += f"📊 قدرت مدافع: {result['defender_power']:,}\n\n"
        attacker_report += f"💰 **غنیمت:**\n   اجر: {result['loot_toob']:,}\n   نفت: {result['loot_oil']:,}\n   الماس: {result['loot_diamond']}\n   اورانیوم: {result['loot_uranium']}\n\n"
        if result["attacker_losses"]:
            attacker_report += f"💀 **تلفات شما:**\n   • {', '.join(result['attacker_losses'])}\n\n"
        bot.send_message(uid, attacker_report, parse_mode="Markdown")
        
        # گزارش در پیوی مدافع
        defender_report = f"📨 **گزارش حمله به کشور شما!**\n\n"
        defender_report += f"⚠️ کشور {get_user(uid)[3]} به شما حمله کرد!\n"
        defender_report += f"{'❌ شکست' if result['success'] else '✅ پیروزی در دفاع'}\n"
        defender_report += f"💥 تخریب: {result['destruction_percent']}%\n\n"
        if result["defender_losses"]:
            defender_report += f"💀 **تلفات شما:**\n   • {', '.join(result['defender_losses'])}\n"
        bot.send_message(target_id, defender_report, parse_mode="Markdown")
        
        bot.edit_message_text("🏠 **منوی اصلی**", uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== آتش‌بس ==========
    if data == "ceasefire_menu":
        users = get_all_users()
        if len(users) <= 1:
            bot.answer_callback_query(call.id, "❌ کاربر دیگری برای آتش‌بس وجود ندارد!", show_alert=True)
            return
        text = "🕊 **آتش‌بس**\n\nکشور مورد نظر را انتخاب کن:"
        kb = InlineKeyboardMarkup(row_width=1)
        for user in users:
            if user[0] != uid:
                name = f"@{user[1]}" if user[1] and user[1] != "بدون نام" else user[2]
                kb.add(InlineKeyboardButton(f"🕊 {name} - {user[3]}", callback_data=f"ceasefire_target_{user[0]}"))
        kb.add(InlineKeyboardButton("🔙 بازگشت", callback_data="main_menu"))
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("ceasefire_target_"):
        target_id = int(data.split("_")[2])
        text = "🕊 **مدت آتش‌بس** (ساعت)\n\nچند ساعت آتش‌بس می‌خوای؟"
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=ceasefire_duration_menu(target_id), parse_mode="Markdown")
        return
    
    if data.startswith("ceasefire_duration_"):
        parts = data.split("_")
        target_id = int(parts[2])
        hours = int(parts[3])
        propose_ceasefire(uid, target_id, hours)
        target_user = get_user(target_id)
        text = f"🕊 **پیشنهاد آتش‌بس**\n\n✅ پیشنهاد {hours} ساعته به {target_user[3]} ارسال شد.\nمنتظر تأیید طرف مقابل باشید..."
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        
        # ارسال به طرف مقابل
        kb = InlineKeyboardMarkup()
        kb.add(InlineKeyboardButton("✅ قبول آتش‌بس", callback_data=f"accept_ceasefire_{uid}"))
        bot.send_message(target_id, f"🕊 **پیشنهاد آتش‌بس**\n\n{get_user(uid)[3]} درخواست آتش‌بس {hours} ساعتی دارد.\nآیا قبول می‌کنی؟", reply_markup=kb, parse_mode="Markdown")
        return
    
    if data.startswith("accept_ceasefire_"):
        proposer_id = int(data.split("_")[2])
        accept_ceasefire(uid, proposer_id)
        bot.answer_callback_query(call.id, "✅ آتش‌بس برقرار شد!", show_alert=True)
        bot.send_message(proposer_id, f"✅ آتش‌بس با {get_user(uid)[3]} برقرار شد!")
        bot.edit_message_text("🕊 **آتش‌بس برقرار شد!**\n\nهیچ حمله‌ای تا پایان زمان آتش‌بس ممکن نیست.", uid, msg.message_id, reply_markup=main_menu(), parse_mode="Markdown")
        return
    
    # ========== پنل ادمین ==========
    if data == "admin_panel" and uid == ADMIN_ID:
        bot.edit_message_text("👑 **پنل مدیریت ادمین**", uid, msg.message_id, reply_markup=admin_panel_menu(), parse_mode="Markdown")
        return
    
    if data == "admin_add_money" and uid == ADMIN_ID:
        with lock:
            conn = sqlite3.connect(DB_PATH, timeout=30)
            c = conn.cursor()
            c.execute("UPDATE users SET toob = toob + 100000")
            conn.commit()
            conn.close()
        bot.answer_callback_query(call.id, "✅ ۱۰۰k اجر به همه اضافه شد!", show_alert=True)
        return
    
    if data == "admin_add_oil" and uid == ADMIN_ID:
        with lock:
            conn = sqlite3.connect(DB_PATH, timeout=30)
            c = conn.cursor()
            c.execute("UPDATE users SET oil = oil + 10000")
            conn.commit()
            conn.close()
        bot.answer_callback_query(call.id, "✅ ۱۰k نفت به همه اضافه شد!", show_alert=True)
        return
    
    if data == "admin_add_diamond" and uid == ADMIN_ID:
        with lock:
            conn = sqlite3.connect(DB_PATH, timeout=30)
            c = conn.cursor()
            c.execute("UPDATE users SET diamond = diamond + 100")
            conn.commit()
            conn.close()
        bot.answer_callback_query(call.id, "✅ ۱۰۰ الماس به همه اضافه شد!", show_alert=True)
        return
    
    if data == "admin_add_uranium" and uid == ADMIN_ID:
        with lock:
            conn = sqlite3.connect(DB_PATH, timeout=30)
            c = conn.cursor()
            c.execute("UPDATE users SET uranium_raw = uranium_raw + 1000")
            conn.commit()
            conn.close()
        bot.answer_callback_query(call.id, "✅ ۱۰۰۰ اورانیوم خام به همه اضافه شد!", show_alert=True)
        return
    
    if data == "admin_add_atom" and uid == ADMIN_ID:
        with lock:
            conn = sqlite3.connect(DB_PATH, timeout=30)
            c = conn.cursor()
            c.execute("UPDATE users SET atom = atom + 10")
            conn.commit()
            conn.close()
        bot.answer_callback_query(call.id, "✅ ۱۰ اتم به همه اضافه شد!", show_alert=True)
        return
    
    if data == "admin_stats" and uid == ADMIN_ID:
        conn = sqlite3.connect(DB_PATH, timeout=30)
        c = conn.cursor()
        c.execute("SELECT COUNT(*) FROM users")
        users_count = c.fetchone()[0]
        c.execute("SELECT COUNT(*) FROM warships WHERE status != 'destroyed'")
        ships_count = c.fetchone()[0]
        c.execute("SELECT COUNT(*) FROM fighters WHERE status = 'active'")
        fighters_count = c.fetchone()[0]
        c.execute("SELECT SUM(toob) FROM users")
        total_toob = c.fetchone()[0] or 0
        conn.close()
        text = f"📊 **آمار ربات**\n\n👥 کاربران: {users_count}\n🚢 ناوها: {ships_count}\n✈️ جنگنده‌ها: {fighters_count}\n💰 کل اجر: {total_toob:,}"
        bot.edit_message_text(text, uid, msg.message_id, reply_markup=admin_panel_menu(), parse_mode="Markdown")
        return

# ========== حمله در گروه با ریپلای ==========
@bot.message_handler(func=lambda m: m.reply_to_message and m.text and m.text.lower() == "شلیک" and m.chat.type in ["group", "supergroup"])
def attack_reply(msg):
    uid = msg.from_user.id
    defender_id = msg.reply_to_message.from_user.id
    
    if uid == defender_id:
        bot.reply_to(msg, "❌ نمیتونی به خودت حمله کنی!")
        return
    
    attacker = get_user(uid)
    defender = get_user(defender_id)
    
    if not attacker or not defender:
        bot.reply_to(msg, "❌ هر دو طرف باید ثبت‌نام کرده باشند!")
        return
    
    if is_ceasefire_active(uid, defender_id):
        bot.reply_to(msg, "❌ با این کشور آتش‌بس داری! نمی‌تونی حمله کنی.")
        return
    
    text = f"⚔️ **حمله به {defender[3]}**\n\nوسیله حمله را انتخاب کن:"
    bot.send_message(uid, text, reply_markup=attack_type_menu(defender_id), parse_mode="Markdown")

# ========== تنظیم Webhook ==========
def set_webhook():
    try:
        bot.set_webhook(url=WEBHOOK_URL)
        logger.info(f"✅ Webhook تنظیم شد: {WEBHOOK_URL}")
    except Exception as e:
        logger.error(f"❌ خطا در تنظیم Webhook: {e}")

def start_bot():
    init_db()
    set_webhook()
    logger.info("🚀 ربات با Webhook روشن شد!")

# ========== اجرا (برای Passenger در سی‌پنل) ==========
a# ==================== اجرا (Polling) ====================
if __name__ == "__main__":
    init_db()
    threading.Thread(target=auto_production, daemon=True).start()
    
    logger.info("ربات با Polling روشن شد")
    print("🚀 ربات با موفقیت اجرا شد!")
    
    try:
        bot.remove_webhook()
        time.sleep(1)
    except:
        pass
    
    bot.infinity_polling(skip_pending=True, timeout=30)