<?php
// admin.php - با رفع مشکل نمایش ترافیک نمایندگی‌ها

function processUpdate($update) {
    if (isset($update['callback_query'])) {
        processCallback($update['callback_query']);
    } elseif (isset($update['message'])) {
        processMessage($update['message']);
    }
}

function processCallback($callback) {
    $chat_id = $callback['message']['chat']['id'];
    $data = $callback['data'];
    $from_id = $callback['from']['id'];
    
    $ch = curl_init("https://api.telegram.org/bot" . BOT_TOKEN . "/answerCallbackQuery");
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, ['callback_query_id' => $callback['id']]);
    curl_exec($ch);
    curl_close($ch);
    
    if ($data == 'check_membership') {
        if (checkChannelMembership($from_id)) {
            sendMessage($chat_id, "✅ عضویت تایید شد!");
            showMainMenu($chat_id, $from_id);
        } else {
            sendMessage($chat_id, "❌ هنوز عضو نشده‌اید!");
            showChannelJoinMessage($chat_id);
        }
    }
    elseif ($data == 'change_token') {
        sendMessage($chat_id, "🔄 توکن جدید را ارسال کنید:");
        $pdo = db();
        $pdo->prepare("UPDATE users SET bot_state = 'waiting_token_replace' WHERE telegram_id = ?")->execute([$from_id]);
    }
    elseif ($data == 'update_bot') {
        updateBotFile($from_id);
    }
    elseif (strpos($data, 'buy_') === 0) {
        handleBuyPlan($chat_id, str_replace('buy_', '', $data));
    }
    elseif (strpos($data, 'confirm_payment_') === 0) {
        handleConfirmPayment($chat_id, str_replace('confirm_payment_', '', $data));
    }
    elseif (strpos($data, 'reject_payment_') === 0) {
        handleRejectPayment($chat_id, str_replace('reject_payment_', '', $data));
    }
    elseif (strpos($data, 'edit_') === 0) {
        handleEdit($chat_id, str_replace('edit_', '', $data));
    }
    elseif ($data == 'show_stats') {
        showStats($chat_id);
    }
    elseif ($data == 'show_orders') {
        showPendingOrders($chat_id);
    }
    elseif ($data == 'reset_all') {
        resetAllData($chat_id);
    }
    elseif ($data == 'remove_channel') {
        setSetting('force_channel', '0');
        setSetting('channel_id', '');
        setSetting('channel_url', '');
        sendMessage($chat_id, "✅ کانال اجباری حذف شد.");
        showAdminPanel($chat_id);
    }
}

function processMessage($message) {
    $chat_id = $message['chat']['id'];
    $text = $message['text'] ?? '';
    $from_id = $message['from']['id'];
    
    // بررسی کانال اجباری
    if (getSetting('force_channel') === '1') {
        $channelId = getSetting('channel_id');
        if (!empty($channelId) && !checkChannelMembership($from_id)) {
            showChannelJoinMessage($chat_id);
            return;
        }
    }
    
    if (isset($message['photo'])) {
        handlePaymentPhoto($message);
        return;
    }
    
    $pdo = db();
    
    $stmt = $pdo->prepare("SELECT editing FROM users WHERE telegram_id = ?");
    $stmt->execute([$from_id]);
    $editing = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($from_id == ADMIN_ID && $editing && $editing['editing']) {
        handleAdminInput($chat_id, $text, $editing['editing']);
        return;
    }
    
    $stmt = $pdo->prepare("SELECT bot_state FROM users WHERE telegram_id = ?");
    $stmt->execute([$from_id]);
    $botState = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($botState && $botState['bot_state']) {
        handleBotSetup($chat_id, $text, $botState['bot_state']);
        return;
    }
    
    $stmt = $pdo->prepare("SELECT trial_state FROM users WHERE telegram_id = ?");
    $stmt->execute([$from_id]);
    $trialState = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($trialState && $trialState['trial_state']) {
        handleTrialInput($chat_id, $from_id, $text);
        return;
    }
    
    if ($text === '/start') {
        showMainMenu($chat_id, $from_id);
    }
    elseif ($text === '👤 پنل ادمین' && $from_id == ADMIN_ID) {
        showAdminPanel($chat_id);
    }
    elseif ($text === '🤖 ساخت ربات اختصاصی' || $text === '🤖 مدیریت ربات') {
        handleBotButton($chat_id, $from_id);
    }
    elseif ($text === '🎁 تست نمایندگی رایگان') {
        startTrial($chat_id, $from_id);
    }
    elseif ($text === '📊 نمایندگی‌های من') {
        showMyAdmins($chat_id, $from_id);
    }
    elseif ($text === '🛒 خرید ترافیک') {
        showTrafficPlans($chat_id);
    }
    elseif ($text === '💰 موجودی من') {
        showMyBalance($chat_id, $from_id);
    }
}

function showMainMenu($chat_id, $userId) {
    $pdo = db();
    $stmt = $pdo->prepare("SELECT * FROM bots WHERE telegram_id = ?");
    $stmt->execute([$userId]);
    $bot = $stmt->fetch(PDO::FETCH_ASSOC);
    
    $keyboard = [
        'keyboard' => [
            ['🎁 تست نمایندگی رایگان'],
            ['📊 نمایندگی‌های من'],
            ['🛒 خرید ترافیک', '💰 موجودی من'],
            [$bot ? '🤖 مدیریت ربات' : '🤖 ساخت ربات اختصاصی']
        ],
        'resize_keyboard' => true
    ];
    
    if ($userId == ADMIN_ID) {
        array_unshift($keyboard['keyboard'], ['👤 پنل ادمین']);
    }
    
    sendMessage($chat_id, "به ربات خوش آمدید! 🌟", $keyboard);
}

// بررسی عضویت کانال
function checkChannelMembership($userId) {
    if (getSetting('force_channel') !== '1') return true;
    $channelId = trim(getSetting('channel_id'));
    if (empty($channelId)) return true;
    
    $url = "https://api.telegram.org/bot" . BOT_TOKEN . "/getChatMember?chat_id=" . urlencode($channelId) . "&user_id={$userId}";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    curl_close($ch);
    $result = json_decode($response, true);
    
    file_put_contents(LOG_FILE, '[' . date('Y-m-d H:i:s') . '] CHECK MEMBER: channel=' . $channelId . ' user=' . $userId . ' status=' . ($result['result']['status'] ?? 'NOT_FOUND') . ' error=' . ($result['description'] ?? '') . "\n", FILE_APPEND);
    
    if (!isset($result['result']['status'])) {
        return false;
    }
    
    return in_array($result['result']['status'], ['member', 'administrator', 'creator']);
}

// نمایش پیام عضویت کانال
function showChannelJoinMessage($chat_id) {
    $channelId = trim(getSetting('channel_id'));
    $channelUrl = trim(getSetting('channel_url'));
    
    $channelName = "کانال";
    $channelLink = "";
    
    if (!empty($channelId)) {
        $url = "https://api.telegram.org/bot" . BOT_TOKEN . "/getChat?chat_id=" . urlencode($channelId);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $response = curl_exec($ch);
        curl_close($ch);
        $result = json_decode($response, true);
        
        file_put_contents(LOG_FILE, '[' . date('Y-m-d H:i:s') . '] GET CHAT: ' . print_r($result, true) . "\n", FILE_APPEND);
        
        if (isset($result['result']['title'])) {
            $channelName = $result['result']['title'];
        }
        
        if (isset($result['result']['invite_link']) && !empty($result['result']['invite_link'])) {
            $channelLink = $result['result']['invite_link'];
        } elseif (isset($result['result']['username']) && !empty($result['result']['username'])) {
            $channelLink = "https://t.me/" . $result['result']['username'];
        }
    }
    
    if (empty($channelLink) && !empty($channelUrl)) {
        $channelLink = $channelUrl;
    }
    
    if (empty($channelLink)) {
        sendMessage($chat_id, "⚠️ خطا در تنظیمات کانال!\n\nلطفاً به ادمین اطلاع دهید.");
        return;
    }
    
    $msg = "⚠️ برای استفاده از ربات، ابتدا در کانال زیر عضو شوید:\n\n";
    $msg .= "📢 <b>" . $channelName . "</b>\n\n";
    $msg .= "بعد از عضویت، دکمه «✅ عضو شدم» را بزنید.";
    
    $keyboard = [
        "inline_keyboard" => [
            [["text" => "📢 عضویت در " . $channelName, "url" => $channelLink]],
            [["text" => "✅ عضو شدم", "callback_data" => "check_membership"]]
        ]
    ];
    
    sendMessage($chat_id, $msg, $keyboard);
}

function startTrial($chat_id, $userId) {
    $pdo = db();
    $stmt = $pdo->prepare("SELECT trial_taken FROM users WHERE telegram_id = ?");
    $stmt->execute([$userId]);
    $user = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if ($user && $user['trial_taken']) {
        $mainAdmin = getMainAdmin($userId);
        sendMessage($chat_id, "📊 نمایندگی اصلی: <code>$mainAdmin</code>");
        return;
    }
    
    sendMessage($chat_id, "👤 نام کاربری دلخواه را وارد کنید:");
    $pdo->prepare("INSERT INTO users (telegram_id, trial_state) VALUES (?, 'waiting_username') ON DUPLICATE KEY UPDATE trial_state = 'waiting_username'")->execute([$userId]);
}

function getMainAdmin($userId) {
    $pdo = db();
    $stmt = $pdo->prepare("SELECT main_admin FROM users WHERE telegram_id = ?");
    $stmt->execute([$userId]);
    return $stmt->fetchColumn();
}

function handleTrialInput($chat_id, $userId, $username) {
    $username = trim($username);
    
    if (strlen($username) < 3) {
        sendMessage($chat_id, "❌ نام کاربری باید حداقل ۳ کاراکتر باشد.");
        return;
    }
    
    if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
        sendMessage($chat_id, "❌ نام کاربری فقط حروف انگلیسی، اعداد و _");
        return;
    }
    
    $existing = findAdminIdByUsername($username);
    if ($existing) {
        sendMessage($chat_id, "❌ این نام کاربری قبلاً استفاده شده.");
        return;
    }
    
    $password = generateStrongPassword();
    $dataLimit = intval(getSetting('trial_limit', DEFAULT_TRIAL_LIMIT));
    
    $result = createAdmin($username, $password, $dataLimit);
    
    if ($result['status'] == 200 || $result['status'] == 201) {
        $adminId = $result['body']['id'] ?? null;
        $apiKey = null;
        
        if ($adminId) {
            $apiKeyResult = createApiKeyForAdmin($adminId, 'bot-' . $username);
            if ($apiKeyResult['status'] == 200 || $apiKeyResult['status'] == 201) {
                $apiKey = $apiKeyResult['body']['api_key'] ?? null;
            }
        }
        
        $pdo = db();
        $pdo->prepare("UPDATE users SET trial_taken = 1, trial_state = NULL, main_admin = ?, main_admin_id = ? WHERE telegram_id = ?")->execute([$username, $adminId, $userId]);
        $pdo->prepare("INSERT INTO admins (telegram_id, username, password, admin_id, api_key) VALUES (?, ?, ?, ?, ?)")->execute([$userId, $username, $password, $adminId, $apiKey]);
        
        $msg = "✅ نمایندگی تستی ساخته شد!\n\n";
        $msg .= "👤 نام کاربری: <code>$username</code>\n";
        $msg .= "🔑 رمز: <code>$password</code>\n";
        $msg .= "📊 حجم: " . formatBytes($dataLimit) . "\n\n";
        $msg .= "🌐 پنل: " . PANEL_DASHBOARD;
        sendMessage($chat_id, $msg);
        showMainMenu($chat_id, $userId);
    } else {
        $errorMsg = "❌ خطا در ساخت نمایندگی!\n\n";
        if (isset($result['body']['detail'])) {
            if (is_array($result['body']['detail'])) {
                foreach ($result['body']['detail'] as $field => $err) {
                    $errorMsg .= "- $field: $err\n";
                }
            } else {
                $errorMsg .= "- " . $result['body']['detail'] . "\n";
            }
        }
        $errorMsg .= "\nنام دیگری وارد کنید:";
        sendMessage($chat_id, $errorMsg);
    }
}

function createAdmin($username, $password, $dataLimit = null) {
    if ($dataLimit === null) $dataLimit = intval(getSetting('trial_limit', DEFAULT_TRIAL_LIMIT));
    $data = ['username' => $username, 'password' => $password, 'role_id' => OPERATOR_ROLE_ID, 'data_limit' => $dataLimit, 'is_active' => true];
    return callPanelAPI('POST', '/admin', $data);
}

function createApiKeyForAdmin($adminId, $name) {
    $data = ['name' => $name, 'admin_id' => $adminId, 'inherit_permissions' => true, 'expire_date' => null, 'note' => 'Bot API Key'];
    return callPanelAPI('POST', '/api_key', $data);
}

function findAdminIdByUsername($username) {
    $result = callPanelAPI('GET', '/admins');
    if ($result['status'] == 200 || $result['status'] == 201) {
        $body = $result['body'];
        $admins = $body['admins'] ?? $body;
        if (is_array($admins)) {
            foreach ($admins as $admin) {
                if (($admin['username'] ?? '') == $username) {
                    return ['id' => $admin['id'], 'data_limit' => $admin['data_limit'] ?? 0];
                }
            }
        }
    }
    return null;
}

function updateAdminById($adminId, $data) {
    return callPanelAPI('PUT', '/admin/by-id/' . $adminId, $data);
}

function showTrafficPlans($chat_id) {
    $text = "🛒 خرید ترافیک\n\nپلن‌ها:\n\n";
    $keyboard = ['inline_keyboard' => []];
    $plans = [
        '100' => ['size' => 100, 'price' => intval(getSetting('plan_100_price'))],
        '250' => ['size' => 250, 'price' => intval(getSetting('plan_250_price'))],
        '500' => ['size' => 500, 'price' => intval(getSetting('plan_500_price'))],
        '1024' => ['size' => 1024, 'price' => intval(getSetting('plan_1024_price'))]
    ];
    foreach ($plans as $key => $plan) {
        $sizeText = $plan['size'] >= 1024 ? '1 ترابایت' : $plan['size'] . ' گیگ';
        $text .= "📦 $sizeText - " . ($plan['price'] > 0 ? number_format($plan['price']) . ' تومان' : 'نامشخص') . "\n";
        $keyboard['inline_keyboard'][] = [['text' => "خرید $sizeText", 'callback_data' => 'buy_' . $key]];
    }
    sendMessage($chat_id, $text, $keyboard);
}

function handleBuyPlan($chat_id, $planKey) {
    $price = intval(getSetting('plan_' . $planKey . '_price'));
    if ($price <= 0) { sendMessage($chat_id, "❌ قیمت تنظیم نشده."); return; }
    
    $size = $planKey == '1024' ? 1024 : intval($planKey);
    $sizeText = $size >= 1024 ? '1 ترابایت' : $size . ' گیگ';
    $mainAdmin = getMainAdmin($chat_id);
    
    $text = "🛒 خرید $sizeText\n💰 قیمت: " . number_format($price) . " تومان\n\n";
    if ($mainAdmin) $text .= "⭐ نمایندگی: <code>$mainAdmin</code>\n\n";
    $text .= "💳 کارت: <code>" . getSetting('card_number') . "</code>\n\n📸 عکس رسید را ارسال کنید.";
    
    $pdo = db();
    $orderId = uniqid('order_');
    $stmt = $pdo->prepare("INSERT INTO orders (order_id, chat_id, size, price, status, username) VALUES (?, ?, ?, ?, 'pending', ?)");
    $stmt->execute([$orderId, $chat_id, $size, $price, $mainAdmin]);
    sendMessage($chat_id, $text);
}

function handlePaymentPhoto($message) {
    $chat_id = $message['chat']['id'];
    $photoId = end($message['photo'])['file_id'];
    
    $pdo = db();
    $stmt = $pdo->prepare("SELECT * FROM orders WHERE chat_id = ? AND status = 'pending' ORDER BY id DESC LIMIT 1");
    $stmt->execute([$chat_id]);
    $order = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$order) { sendMessage($chat_id, "❌ سفارشی یافت نشد."); return; }
    
    $stmt = $pdo->prepare("UPDATE orders SET photo_id = ? WHERE id = ?");
    $stmt->execute([$photoId, $order['id']]);
    
    $sizeText = $order['size'] >= 1024 ? '1 ترابایت' : $order['size'] . ' گیگ';
    $caption = "🔔 سفارش جدید\n\n🆔: <code>{$order['order_id']}</code>\n👤: <code>{$chat_id}</code>\n";
    if ($order['username']) $caption .= "⭐: <code>{$order['username']}</code>\n";
    $caption .= "📦: $sizeText\n💰: " . number_format($order['price']) . " تومان";
    
    $keyboard = ['inline_keyboard' => [[
        ['text' => '✅ تایید', 'callback_data' => 'confirm_payment_' . $order['order_id']],
        ['text' => '❌ رد', 'callback_data' => 'reject_payment_' . $order['order_id']]
    ]]];
    
    $url = "https://api.telegram.org/bot" . BOT_TOKEN . "/sendPhoto";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, [
        'chat_id' => ADMIN_ID, 'photo' => $photoId, 'caption' => $caption,
        'parse_mode' => 'HTML', 'reply_markup' => json_encode($keyboard, JSON_UNESCAPED_UNICODE)
    ]);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_exec($ch);
    curl_close($ch);
    
    sendMessage($chat_id, "✅ رسید ارسال شد.");
}

function handleConfirmPayment($chat_id, $orderId) {
    $pdo = db();
    $stmt = $pdo->prepare("SELECT * FROM orders WHERE order_id = ?");
    $stmt->execute([$orderId]);
    $order = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!$order) return;
    
    $adminData = findAdminIdByUsername($order['username']);
    if (!$adminData) { sendMessage($chat_id, "❌ نمایندگی یافت نشد."); return; }
    
    $newLimit = $adminData['data_limit'] + ($order['size'] * 1024 * 1024 * 1024);
    $update = updateAdminById($adminData['id'], ['data_limit' => $newLimit]);
    
    if ($update['status'] == 200 || $update['status'] == 201) {
        $pdo->prepare("UPDATE orders SET status = 'confirmed' WHERE order_id = ?")->execute([$orderId]);
        $pdo->prepare("UPDATE users SET balance = balance + ? WHERE telegram_id = ?")->execute([$order['price'], $order['chat_id']]);
        sendMessage($chat_id, "✅ تایید شد.");
        sendMessage($order['chat_id'], "✅ پرداخت تایید شد!");
    }
}

function handleRejectPayment($chat_id, $orderId) {
    $pdo = db();
    $pdo->prepare("UPDATE orders SET status = 'rejected' WHERE order_id = ?")->execute([$orderId]);
    $stmt = $pdo->prepare("SELECT chat_id FROM orders WHERE order_id = ?");
    $stmt->execute([$orderId]);
    $userChatId = $stmt->fetchColumn();
    sendMessage($chat_id, "❌ رد شد.");
    if ($userChatId) sendMessage($userChatId, "❌ پرداخت رد شد.");
}

function showAdminPanel($chat_id) {
    if ($chat_id != ADMIN_ID) return;
    
    $forceChannel = getSetting('force_channel', '0');
    $channelId = getSetting('channel_id', '');
    $channelUrl = getSetting('channel_url', '');
    
    $channelStatus = ($forceChannel === '1') ? "✅ فعال" : "❌ غیرفعال";
    $channelInfo = !empty($channelId) ? "\n📢 کانال: <code>" . $channelId . "</code>" : "";
    
    $text = "👤 پنل مدیریت\n\n";
    $text .= "💳 کارت: " . getSetting('card_number', 'تنظیم نشده') . "\n";
    $text .= "📦 حجم تست: " . formatBytes(intval(getSetting('trial_limit'))) . "\n";
    $text .= "📢 کانال اجباری: " . $channelStatus . $channelInfo . "\n\n";
    
    $keyboard = [
        'inline_keyboard' => [
            [['text' => '💳 کارت', 'callback_data' => 'edit_card'], ['text' => '📦 حجم تست', 'callback_data' => 'edit_trial']],
            [['text' => '📢 تنظیم کانال', 'callback_data' => 'edit_channel'], ['text' => '🗑 حذف کانال', 'callback_data' => 'remove_channel']],
            [['text' => '💰 قیمت ۱۰۰', 'callback_data' => 'edit_price_100'], ['text' => '💰 قیمت ۲۵۰', 'callback_data' => 'edit_price_250']],
            [['text' => '💰 قیمت ۵۰۰', 'callback_data' => 'edit_price_500'], ['text' => '💰 قیمت ۱TB', 'callback_data' => 'edit_price_1024']],
            [['text' => '📋 سفارشات', 'callback_data' => 'show_orders'], ['text' => '📊 آمار', 'callback_data' => 'show_stats']],
            [['text' => '⚠️ ریست کامل', 'callback_data' => 'reset_all']]
        ]
    ];
    sendMessage($chat_id, $text, $keyboard);
}

function handleEdit($chat_id, $type) {
    if ($chat_id != ADMIN_ID) return;
    $messages = [
        'card' => "💳 شماره کارت:", 
        'trial' => "📦 حجم تست (گیگابایت):",
        'channel' => "📢 آیدی کانال را وارد کنید:\n\nمثال‌ها:\n<code>@mychannel</code>\n<code>-1001234567890</code>\n\n<b>⚠️ مهم:</b> ربات باید در کانال ادمین باشد!",
        'price_100' => "💰 قیمت ۱۰۰ گیگ:",
        'price_250' => "💰 قیمت ۲۵۰ گیگ:", 
        'price_500' => "💰 قیمت ۵۰۰ گیگ:",
        'price_1024' => "💰 قیمت ۱ ترابایت:"
    ];
    sendMessage($chat_id, $messages[$type] ?? "مقدار:");
    $pdo = db();
    $pdo->prepare("INSERT INTO users (telegram_id, editing) VALUES (?, ?) ON DUPLICATE KEY UPDATE editing = ?")->execute([ADMIN_ID, $type, $type]);
}

function handleAdminInput($chat_id, $text, $type) {
    if ($chat_id != ADMIN_ID) return;
    
    if ($type == 'card') {
        setSetting('card_number', $text);
        sendMessage($chat_id, "✅ کارت ذخیره شد.");
    } elseif ($type == 'trial') {
        setSetting('trial_limit', intval($text) * 1024 * 1024 * 1024);
        sendMessage($chat_id, "✅ حجم تست تنظیم شد.");
    } elseif ($type == 'channel') {
        $channelId = trim($text);
        
        $url = "https://api.telegram.org/bot" . BOT_TOKEN . "/getChat?chat_id=" . urlencode($channelId);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        $response = curl_exec($ch);
        curl_close($ch);
        $result = json_decode($response, true);
        
        if (!isset($result['result']['title'])) {
            sendMessage($chat_id, "❌ خطا در دریافت اطلاعات کانال!\n\nدلایل ممکن:\n1️⃣ آیدی کانال اشتباه است\n2️⃣ ربات در کانال ادمین نیست\n\nلطفاً ربات را در کانال ادمین کنید و دوباره تلاش کنید.");
            $pdo = db();
            $pdo->prepare("UPDATE users SET editing = NULL WHERE telegram_id = ?")->execute([ADMIN_ID]);
            return;
        }
        
        $channelName = $result['result']['title'];
        $channelLink = "";
        
        if (isset($result['result']['invite_link'])) {
            $channelLink = $result['result']['invite_link'];
        } elseif (isset($result['result']['username'])) {
            $channelLink = "https://t.me/" . $result['result']['username'];
        }
        
        setSetting('channel_id', $channelId);
        setSetting('channel_url', $channelLink);
        setSetting('force_channel', '1');
        
        sendMessage($chat_id, "✅ کانال تنظیم شد!\n\n📢 نام: " . $channelName . "\n🔗 لینک: " . $channelLink);
    } elseif (strpos($type, 'price_') === 0) {
        $key = 'plan_' . str_replace('price_', '', $type) . '_price';
        setSetting($key, intval($text));
        sendMessage($chat_id, "✅ قیمت ذخیره شد.");
    }
    
    $pdo = db();
    $pdo->prepare("UPDATE users SET editing = NULL WHERE telegram_id = ?")->execute([ADMIN_ID]);
    showAdminPanel($chat_id);
}

function showStats($chat_id) {
    if ($chat_id != ADMIN_ID) return;
    $pdo = db();
    $users = $pdo->query("SELECT COUNT(*) FROM users")->fetchColumn();
    $admins = $pdo->query("SELECT COUNT(*) FROM admins")->fetchColumn();
    $orders = $pdo->query("SELECT COUNT(*) FROM orders")->fetchColumn();
    sendMessage($chat_id, "📊 آمار\n\n👥 کاربران: $users\n🏗 نمایندگی‌ها: $admins\n🛒 سفارشات: $orders");
}

function showPendingOrders($chat_id) {
    if ($chat_id != ADMIN_ID) return;
    $pdo = db();
    $orders = $pdo->query("SELECT * FROM orders WHERE status = 'pending'")->fetchAll(PDO::FETCH_ASSOC);
    if (count($orders) == 0) { sendMessage($chat_id, "📋 سفارشی در انتظار نیست."); return; }
    $text = "📋 سفارشات:\n\n";
    foreach ($orders as $o) {
        $text .= "🆔 {$o['order_id']}\n👤 {$o['chat_id']}\n📦 {$o['size']}GB\n💰 " . number_format($o['price']) . "\n\n";
    }
    sendMessage($chat_id, $text);
}

// ==========================================================
// 📊 نمایش نمایندگی‌های کاربر با ترافیک کامل
// ==========================================================
function showMyAdmins($chat_id, $userId) {
    $pdo = db();
    $stmt = $pdo->prepare("SELECT * FROM admins WHERE telegram_id = ?");
    $stmt->execute([$userId]);
    $admins = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (count($admins) == 0) { 
        sendMessage($chat_id, "📊 نمایندگی‌ای ندارید."); 
        return; 
    }
    
    // یک بار همه admins رو از پنل می‌گیریم
    $allAdminsResult = callPanelAPI('GET', '/admins');
    
    $adminsMap = [];
    if (($allAdminsResult['status'] == 200 || $allAdminsResult['status'] == 201) && isset($allAdminsResult['body'])) {
        $body = $allAdminsResult['body'];
        $list = $body['admins'] ?? $body;
        if (is_array($list)) {
            foreach ($list as $a) {
                if (isset($a['id'])) {
                    $adminsMap[$a['id']] = $a;
                }
            }
        }
    }
    
    $messages = [];
    $currentText = "📊 <b>نمایندگی‌های شما</b>\n\n";
    
    foreach ($admins as $admin) {
        $block = "━━━━━━━━━━━━━━━\n";
        $block .= "👤 نماینده: <b>" . $admin['username'] . "</b>\n\n";
        
        $info = $adminsMap[$admin['admin_id']] ?? null;
        
        if ($info) {
            // تبدیل به عدد صحیح برای جلوگیری از خطا
            $total = intval($info['data_limit'] ?? $info['total_traffic'] ?? 0);
            $used = intval($info['used_traffic'] ?? $info['lifetime_used_traffic'] ?? $info['used'] ?? 0);
            $usersCount = intval($info['users_count'] ?? $info['users'] ?? 0);
            
            // اگه total صفر بود ولی دیتابیس مقدار داشت
            if ($total <= 0 && !empty($admin['data_limit'])) {
                $total = intval($admin['data_limit']);
            }
            
            $remaining = max(0, $total - $used);
            
            // --- سهمیه کل ---
            if ($total <= 0) {
                $block .= "📦 سهمیه کل: <b>♾ نامحدود</b>\n\n";
            } else {
                $block .= "📦 سهمیه کل: <b>" . formatBytes($total) . "</b>\n\n";
            }
            
            // --- مصرف‌شده (اصلاح شده: دیگه «نامحدود» نشون نمیده) ---
            if ($used <= 0) {
                $block .= "📊 مصرف‌شده: <b>0 B</b>\n\n";
            } else {
                $block .= "📊 مصرف‌شده: <b>" . formatBytes($used) . "</b>\n\n";
            }
            
            // --- باقی‌مانده و درصد ---
            if ($total > 0) {
                if ($remaining <= 0) {
                    $block .= "💚 باقی‌مانده: <b>0 B</b>\n\n";
                } else {
                    $block .= "💚 باقی‌مانده: <b>" . formatBytes($remaining) . "</b>\n\n";
                }
                
                $percent = round(($used / $total) * 100);
                $block .= "📈 درصد مصرف: <b>{$percent}%</b>\n";
            }
            
            // --- تعداد کاربران ---
            if ($usersCount > 0) {
                $block .= "\n👥 تعداد کاربران: <b>{$usersCount}</b>\n";
            }
        } else {
            $block .= "⚠️ اطلاعات این نماینده در پنل یافت نشد\n";
        }
        
        $block .= "\n";
        
        if (mb_strlen($currentText . $block) > 3800) {
            $messages[] = $currentText;
            $currentText = $block;
        } else {
            $currentText .= $block;
        }
    }
    
    if (!empty($currentText)) {
        $messages[] = $currentText;
    }
    
    foreach ($messages as $i => $msg) {
        if ($i < count($messages) - 1) {
            sendMessage($chat_id, $msg);
            sleep(1);
        } else {
            $msg .= "━━━━━━━━━━━━━━━";
            sendMessage($chat_id, $msg);
        }
    }
}

function showMyBalance($chat_id, $userId) {
    $pdo = db();
    $stmt = $pdo->prepare("SELECT balance FROM users WHERE telegram_id = ?");
    $stmt->execute([$userId]);
    $balance = $stmt->fetchColumn();
    $mainAdmin = getMainAdmin($userId);
    $text = "💰 موجودی: " . number_format($balance ?: 0) . " تومان\n";
    if ($mainAdmin) $text .= "⭐ نمایندگی: <code>$mainAdmin</code>\n";
    sendMessage($chat_id, $text);
}

function resetAllData($chat_id) {
    if ($chat_id != ADMIN_ID) return;
    $pdo = db();
    $pdo->exec("DELETE FROM users");
    $pdo->exec("DELETE FROM admins");
    $pdo->exec("DELETE FROM orders");
    $pdo->exec("DELETE FROM bots");
    $pdo->exec("DELETE FROM bot_plans");
    $pdo->exec("DELETE FROM bot_services");
    $pdo->exec("DELETE FROM bot_wallets");
    $pdo->exec("DELETE FROM bot_admins");
    $pdo->exec("DELETE FROM bot_trials");
    $pdo->exec("DELETE FROM bot_user_states");
    sendMessage($chat_id, "✅ همه اطلاعات پاک شد.");
}
?>