<?php
require_once __DIR__ . '/db.php';
require_once __DIR__ . '/Cloudflare.php';
require_once __DIR__ . '/Telegram.php';
require_once __DIR__ . '/Pasarguard.php';

$content = file_get_contents("php://input");
$update = json_decode($content, true);

if (!$update) exit('No input');

$chatId = $update['message']['chat']['id'] ?? $update['callback_query']['from']['id'] ?? null;
if ((int)$chatId !== (int)TELEGRAM_ADMIN_ID) exit('Unauthorized');

function getState(PDO $pdo, int $chatId): array {
    $stmt = $pdo->prepare("SELECT step, temp_data FROM bot_states WHERE chat_id = ?");
    $stmt->execute([$chatId]);
    $res = $stmt->fetch();
    return $res ? ['step' => $res['step'], 'data' => json_decode($res['temp_data'] ?? '{}', true)] : ['step' => 'idle', 'data' => []];
}

function setState(PDO $pdo, int $chatId, string $step, array $data = []): void {
    $stmt = $pdo->prepare("INSERT INTO bot_states (chat_id, step, temp_data) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE step = VALUES(step), temp_data = VALUES(temp_data)");
    $stmt->execute([$chatId, $step, json_encode($data, JSON_UNESCAPED_UNICODE)]);
}

function clearState(PDO $pdo, int $chatId): void {
    $pdo->prepare("DELETE FROM bot_states WHERE chat_id = ?")->execute([$chatId]);
}

function sendMainMenu(): void {
    $keyboard = [
        'inline_keyboard' => [
            [['text' => '📊 وضعیت نودها و تغییر دستی', 'callback_data' => 'status']],
            [['text' => '👥 مدیریت گروه‌های پنل‌ها', 'callback_data' => 'manage_groups']],
            [['text' => '➕ افزودن نود جدید', 'callback_data' => 'add_node_start'], ['text' => '➕ افزودن زاپاس', 'callback_data' => 'add_backup_start']],
            [['text' => '🏢 مدیریت پنل‌های پاسارگاد', 'callback_data' => 'manage_panels'], ['text' => '☁️ مدیریت کلودفلر', 'callback_data' => 'manage_cf']],
            [['text' => '🛡 لیست سرورهای زاپاس', 'callback_data' => 'backups']]
        ]
    ];
    Telegram::sendMessage("👋 <b>پنل مدیریت Failover و دسته‌بندی نودها:</b>\nیک گزینه را انتخاب کنید:", $keyboard);
}

// ----------------------------------------------------
// مدیریت کلیک دکمه‌ها (Callback Queries)
// ----------------------------------------------------
if (isset($update['callback_query'])) {
    $cb = $update['callback_query'];
    $data = $cb['data'];
    Telegram::answerCallback($cb['id']);

    if ($data === 'main_menu') {
        clearState($pdo, $chatId);
        sendMainMenu();
        exit;
    }

    // ==========================================
    // بخش جدید: مدیریت گروه‌های هر پنل
    // ==========================================
    if ($data === 'manage_groups') {
        $panels = $pdo->query("SELECT * FROM panels")->fetchAll();
        if (empty($panels)) {
            Telegram::sendMessage("⚠️ ابتدا یک پنل پاسارگاد ثبت کنید.");
            exit;
        }
        $buttons = [];
        foreach ($panels as $p) {
            $buttons[] = [['text' => "🏢 گروه‌های {$p['name']}", 'callback_data' => 'view_pgroups_' . $p['id']]];
        }
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("👥 <b>مدیریت گروه‌ها:</b>\nپنل مورد نظر را انتخاب کنید:", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'view_pgroups_')) {
        $panelId = (int)str_replace('view_pgroups_', '', $data);
        $pStmt = $pdo->prepare("SELECT name FROM panels WHERE id = ?");
        $pStmt->execute([$panelId]);
        $pName = $pStmt->fetchColumn() ?: 'پنل';

        $gStmt = $pdo->prepare("SELECT * FROM panel_groups WHERE panel_id = ?");
        $gStmt->execute([$panelId]);
        $groups = $gStmt->fetchAll();

        $buttons = [];
        if (!empty($groups)) {
            foreach ($groups as $g) {
                $buttons[] = [
                    ['text' => "📁 {$g['name']}", 'callback_data' => 'noop'],
                    ['text' => '🗑 حذف گروه', 'callback_data' => 'del_group_' . $g['id']]
                ];
            }
        }
        $buttons[] = [['text' => '➕ افزودن گروه جدید به این پنل', 'callback_data' => 'add_group_to_' . $panelId]];
        $buttons[] = [['text' => '🔙 بازگشت به لیست پنل‌ها', 'callback_data' => 'manage_groups']];

        $text = "👥 <b>لیست گروه‌های {$pName}:</b>\n";
        if (empty($groups)) {
            $text .= "\n<i>هنوز گروهی برای این پنل تعریف نشده است.</i>";
        }
        Telegram::sendMessage($text, ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'add_group_to_')) {
        $panelId = (int)str_replace('add_group_to_', '', $data);
        setState($pdo, $chatId, 'await_group_title', ['panel_id' => $panelId]);
        Telegram::sendMessage("🏷 لطفاً <b>نام گروه جدید</b> را ارسال کنید:\n(مثلاً: گروه VIP یا مشتریان همکار)");
        exit;
    }

    if (str_starts_with($data, 'del_group_')) {
        $groupId = (int)str_replace('del_group_', '', $data);
        $pdo->prepare("DELETE FROM panel_groups WHERE id = ?")->execute([$groupId]);
        Telegram::sendMessage("🗑 گروه با موفقیت حذف شد.");
        sendMainMenu();
        exit;
    }

    // ==========================================
    // لیست نودها و مشاهده مشخصات
    // ==========================================
    if ($data === 'status') {
        $nodes = $pdo->query("
            SELECT n.*, p.name AS panel_name, COALESCE(g.name, n.group_name, 'بدون گروه') AS g_name 
            FROM nodes n 
            JOIN panels p ON n.panel_id = p.id
            LEFT JOIN panel_groups g ON n.group_id = g.id
        ")->fetchAll();

        if (empty($nodes)) {
            Telegram::sendMessage("⚠️ هنوز نودی اضافه نشده است.", ['inline_keyboard' => [[['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']]]]);
            exit;
        }

        $buttons = [];
        foreach ($nodes as $n) {
            $st = ($n['status'] === 'online') ? '🟢' : (($n['status'] === 'offline') ? '🔴' : '🛠 دستی');
            $buttons[] = [['text' => "{$st} {$n['name']} [{$n['country']}] - گروه: {$n['g_name']}", 'callback_data' => 'view_node_' . $n['id']]];
        }
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("📊 <b>لیست نودها:</b>\nبرای ویرایش یا تغییر دستی، روی نود بزنید:", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'view_node_')) {
        $nodeId = (int)str_replace('view_node_', '', $data);
        $stmt = $pdo->prepare("
            SELECT n.*, p.name AS panel_name, ca.name AS cf_name, COALESCE(g.name, n.group_name, 'بدون گروه') AS g_name 
            FROM nodes n 
            JOIN panels p ON n.panel_id = p.id 
            JOIN cloudflare_accounts ca ON n.cf_account_id = ca.id 
            LEFT JOIN panel_groups g ON n.group_id = g.id
            WHERE n.id = ?
        ");
        $stmt->execute([$nodeId]);
        $n = $stmt->fetch();
        if (!$n) {
            Telegram::sendMessage("❌ نود پیدا نشد.");
            exit;
        }

        $stIcon = ($n['status'] === 'online') ? '🟢 آنلاین (متصل)' : (($n['status'] === 'offline') ? '🔴 قطع (روی زاپاس)' : '🛠 حالت دستی (Manual)');
        $text = "🔹 <b>مشخصات نود: {$n['name']}</b>\n\n"
              . "🌍 <b>کشور:</b> {$n['country']}\n"
              . "👥 <b>گروه:</b> {$n['g_name']}\n"
              . "🏢 <b>پنل:</b> {$n['panel_name']}\n"
              . "☁️ <b>کلودفلر:</b> {$n['cf_name']}\n"
              . "🌐 <b>ساب‌دامین:</b> <code>{$n['domain_name']}</code>\n"
              . "📡 <b>آی‌پی اصلی:</b> <code>{$n['main_ip']}</code>\n"
              . "🎯 <b>آی‌پی فعال در کلودفلر:</b> <code>{$n['current_ip']}</code>\n"
              . "📌 <b>وضعیت فعلی:</b> {$stIcon}\n";

        $buttons = [
            [['text' => '🔄 تغییر دستی آی‌پی نود', 'callback_data' => 'manual_override_' . $n['id']]],
            [['text' => '♻️ بازگردانی به آی‌پی اصلی و حالت خودکار', 'callback_data' => 'reset_auto_' . $n['id']]],
            [['text' => '🗑 حذف این نود', 'callback_data' => 'del_node_' . $n['id']]],
            [['text' => '🔙 بازگشت به لیست', 'callback_data' => 'status']]
        ];
        Telegram::sendMessage($text, ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'manual_override_')) {
        $nodeId = (int)str_replace('manual_override_', '', $data);
        setState($pdo, $chatId, 'await_manual_ip', ['node_id' => $nodeId]);
        Telegram::sendMessage("🎯 <b>تغییر دستی آی‌پی:</b>\nلطفاً آی‌پی جدید را ارسال کنید تا فوراً روی ساب‌دامین در کلودفلر ست شود:");
        exit;
    }

    if (str_starts_with($data, 'reset_auto_')) {
        $nodeId = (int)str_replace('reset_auto_', '', $data);
        $stmt = $pdo->prepare("SELECT n.*, ca.api_token FROM nodes n JOIN cloudflare_accounts ca ON n.cf_account_id = ca.id WHERE n.id = ?");
        $stmt->execute([$nodeId]);
        $n = $stmt->fetch();
        if ($n) {
            Cloudflare::updateRecord($n['api_token'], $n['zone_id'], $n['record_id'], $n['domain_name'], $n['main_ip'], (bool)$n['proxied']);
            if (!empty($n['assigned_backup_id'])) {
                $pdo->prepare("UPDATE backup_nodes SET is_busy = 0 WHERE id = ?")->execute([$n['assigned_backup_id']]);
            }
            $pdo->prepare("UPDATE nodes SET current_ip = main_ip, status = 'online', assigned_backup_id = NULL WHERE id = ?")->execute([$nodeId]);
            Telegram::sendMessage("✅ ساب‌دامین نود به آی‌پی اصلی بازگشت و مانیتورینگ خودکار فعال شد.");
        }
        sendMainMenu();
        exit;
    }

    if (str_starts_with($data, 'del_node_')) {
        $nodeId = (int)str_replace('del_node_', '', $data);
        $pdo->prepare("DELETE FROM nodes WHERE id = ?")->execute([$nodeId]);
        Telegram::sendMessage("🗑 نود حذف شد.");
        sendMainMenu();
        exit;
    }

    // =========================================================
    // فرآیند هوشمند افزودن نود: انتخاب پنل -> انتخاب گروه -> انتخاب کلودفلر
    // =========================================================
    if ($data === 'add_node_start') {
        $panels = $pdo->query("SELECT * FROM panels")->fetchAll();
        if (empty($panels)) {
            Telegram::sendMessage("⚠️ ابتدا از بخش مدیریت پنل‌ها، یک پنل ثبت کنید.");
            exit;
        }
        $buttons = [];
        foreach ($panels as $p) {
            $buttons[] = [['text' => "🏢 {$p['name']}", 'callback_data' => 'an_panel_' . $p['id']]];
        }
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("🏢 <b>مرحله ۱:</b> نود مربوط به کدام پنل پاسارگاد است؟", ['inline_keyboard' => $buttons]);
        exit;
    }

    // انتخاب پنل و نمایش لیست گروه‌های آن پنل
    if (str_starts_with($data, 'an_panel_')) {
        $panelId = (int)str_replace('an_panel_', '', $data);

        $gStmt = $pdo->prepare("SELECT * FROM panel_groups WHERE panel_id = ?");
        $gStmt->execute([$panelId]);
        $groups = $gStmt->fetchAll();

        $buttons = [];
        if (!empty($groups)) {
            foreach ($groups as $g) {
                $buttons[] = [['text' => "📁 {$g['name']}", 'callback_data' => 'an_group_' . $g['id']]];
            }
        }
        // امکان رد کردن یا تعریف گروه عمومی
        $buttons[] = [['text' => '➕ تعریف گروه جدید سریع', 'callback_data' => 'an_newgroup_' . $panelId]];
        $buttons[] = [['text' => '⚪️ بدون گروه (عمومی)', 'callback_data' => 'an_group_0']];
        $buttons[] = [['text' => '🔙 انصراف', 'callback_data' => 'main_menu']];

        setState($pdo, $chatId, 'await_group_choice', ['panel_id' => $panelId]);
        Telegram::sendMessage("👥 <b>مرحله ۲:</b> گروه مربوط به این نود در این پنل را انتخاب کنید:", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'an_newgroup_')) {
        $panelId = (int)str_replace('an_newgroup_', '', $data);
        setState($pdo, $chatId, 'await_fast_group_name', ['panel_id' => $panelId]);
        Telegram::sendMessage("🏷 نام گروه جدید را ارسال کنید:");
        exit;
    }

    // انتخاب گروه و رفتن به انتخاب اکانت کلودفلر
    if (str_starts_with($data, 'an_group_')) {
        $groupId = (int)str_replace('an_group_', '', $data);
        $st = getState($pdo, $chatId);
        $panelId = $st['data']['panel_id'] ?? 1;

        $cfs = $pdo->query("SELECT * FROM cloudflare_accounts")->fetchAll();
        if (empty($cfs)) {
            Telegram::sendMessage("⚠️ ابتدا یک اکانت کلودفلر اضافه کنید.");
            exit;
        }

        $buttons = [];
        foreach ($cfs as $cf) {
            $buttons[] = [['text' => "☁️ " . $cf['name'], 'callback_data' => 'an_cf_' . $cf['id']]];
        }
        $buttons[] = [['text' => '🔙 انصراف', 'callback_data' => 'main_menu']];

        setState($pdo, $chatId, 'await_node_cf', ['panel_id' => $panelId, 'group_id' => ($groupId > 0 ? $groupId : null)]);
        Telegram::sendMessage("☁️ <b>مرحله ۳:</b> دامنه این نود روی کدام اکانت کلودفلر است؟", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'an_cf_')) {
        $cfId = (int)str_replace('an_cf_', '', $data);
        $st = getState($pdo, $chatId);

        $cf = $pdo->prepare("SELECT api_token FROM cloudflare_accounts WHERE id = ?");
        $cf->execute([$cfId]);
        $cfAcc = $cf->fetch();

        Telegram::sendMessage("⏳ در حال دریافت لیست دامنه‌ها از کلودفلر...");
        $zones = Cloudflare::getZones($cfAcc['api_token']);
        if (empty($zones)) {
            Telegram::sendMessage("❌ دامنه‌ای یافت نشد.");
            clearState($pdo, $chatId);
            exit;
        }

        $buttons = [];
        foreach ($zones as $z) {
            $buttons[] = [['text' => "🌐 " . $z['name'], 'callback_data' => 'an_zone_' . $z['id']]];
        }
        $buttons[] = [['text' => '🔙 انصراف', 'callback_data' => 'main_menu']];

        $st['data']['cf_id'] = $cfId;
        $st['data']['api_token'] = $cfAcc['api_token'];
        setState($pdo, $chatId, 'await_zone', $st['data']);
        Telegram::sendMessage("🌐 <b>دامنه اصلی</b> را انتخاب کنید:", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'an_zone_')) {
        $zoneId = str_replace('an_zone_', '', $data);
        $st = getState($pdo, $chatId);

        Telegram::sendMessage("⏳ در حال دریافت ساب‌دامین‌ها...");
        $records = Cloudflare::getDnsRecords($st['data']['api_token'], $zoneId);
        if (empty($records)) {
            Telegram::sendMessage("❌ هیچ ساب‌دامینی یافت نشد.");
            clearState($pdo, $chatId);
            exit;
        }

        $buttons = [];
        foreach ($records as $r) {
            $buttons[] = [['text' => "📍 {$r['name']} ({$r['content']})", 'callback_data' => 'an_rec_' . $r['id']]];
        }
        $buttons[] = [['text' => '🔙 انصراف', 'callback_data' => 'main_menu']];

        $st['data']['zone_id'] = $zoneId;
        $st['data']['records'] = $records;
        setState($pdo, $chatId, 'await_record', $st['data']);
        Telegram::sendMessage("📍 <b>ساب‌دامین مورد نظر</b> را انتخاب کنید:", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'an_rec_')) {
        $recId = str_replace('an_rec_', '', $data);
        $st = getState($pdo, $chatId);
        $sel = null;
        foreach ($st['data']['records'] as $r) {
            if ($r['id'] === $recId) { $sel = $r; break; }
        }
        $st['data']['record_id'] = $recId;
        $st['data']['domain_name'] = $sel['name'];
        $st['data']['main_ip'] = $sel['content'];

        setState($pdo, $chatId, 'await_country', $st['data']);
        Telegram::sendMessage("🌍 <b>کشور سرور چیست؟</b>\n(مثلاً: 🇩🇪 آلمان یا 🇫🇮 فنلاند)");
        exit;
    }

    // زاپاس‌ها، پنل‌ها و کلودفلر
    if ($data === 'backups') {
        $backups = $pdo->query("SELECT b.*, p.name AS panel_name FROM backup_nodes b JOIN panels p ON b.panel_id = p.id")->fetchAll();
        $buttons = [];
        foreach ($backups as $b) {
            $st = $b['is_busy'] ? '🔴 اشغال' : '🟢 آزاد';
            $buttons[] = [
                ['text' => "🔸 {$b['name']} ({$b['ip']}) - {$st}", 'callback_data' => 'noop'],
                ['text' => '🗑 حذف', 'callback_data' => 'del_backup_' . $b['id']]
            ];
        }
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("🛡 <b>لیست سرورهای زاپاس:</b>", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'del_backup_')) {
        $bId = (int)str_replace('del_backup_', '', $data);
        $pdo->prepare("DELETE FROM backup_nodes WHERE id = ?")->execute([$bId]);
        Telegram::sendMessage("🗑 سرور زاپاس حذف شد.");
        sendMainMenu();
        exit;
    }

    if ($data === 'add_backup_start') {
        $panels = $pdo->query("SELECT * FROM panels")->fetchAll();
        $buttons = [];
        foreach ($panels as $p) {
            $buttons[] = [['text' => "{$p['name']}", 'callback_data' => 'ab_panel_' . $p['id']]];
        }
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("🛡 سرور زاپاس برای کدام پنل است؟", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'ab_panel_')) {
        $panelId = (int)str_replace('ab_panel_', '', $data);
        setState($pdo, $chatId, 'await_backup_name', ['panel_id' => $panelId]);
        Telegram::sendMessage("🏷 نام سرور زاپاس را بفرستید:");
        exit;
    }

    if ($data === 'manage_cf') {
        $cfs = $pdo->query("SELECT * FROM cloudflare_accounts")->fetchAll();
        $buttons = [];
        foreach ($cfs as $c) {
            $buttons[] = [
                ['text' => "☁️ {$c['name']}", 'callback_data' => 'noop'],
                ['text' => '🗑 حذف', 'callback_data' => 'del_cf_' . $c['id']]
            ];
        }
        $buttons[] = [['text' => '➕ افزودن اکانت جدید', 'callback_data' => 'add_cf_start']];
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("☁️ <b>مدیریت کلودفلر:</b>", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'del_cf_')) {
        $cfId = (int)str_replace('del_cf_', '', $data);
        $pdo->prepare("DELETE FROM cloudflare_accounts WHERE id = ?")->execute([$cfId]);
        Telegram::sendMessage("🗑 اکانت کلودفلر حذف شد.");
        sendMainMenu();
        exit;
    }

    if ($data === 'add_cf_start') {
        setState($pdo, $chatId, 'await_cf_name');
        Telegram::sendMessage("☁️ نام اکانت کلودفلر را ارسال کنید:");
        exit;
    }

    if ($data === 'manage_panels') {
        $panels = $pdo->query("SELECT * FROM panels")->fetchAll();
        $buttons = [];
        foreach ($panels as $p) {
            $buttons[] = [
                ['text' => "🏢 {$p['name']} (" . strtoupper($p['panel_type']) . ")", 'callback_data' => 'edit_panel_' . $p['id']],
                ['text' => '🗑 حذف', 'callback_data' => 'del_panel_' . $p['id']]
            ];
        }
        $buttons[] = [['text' => '➕ افزودن پنل جدید', 'callback_data' => 'add_new_panel']];
        $buttons[] = [['text' => '🔙 منوی اصلی', 'callback_data' => 'main_menu']];
        Telegram::sendMessage("🏢 <b>مدیریت پنل‌های پاسارگاد:</b>", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'del_panel_')) {
        $pId = (int)str_replace('del_panel_', '', $data);
        $pdo->prepare("DELETE FROM panels WHERE id = ?")->execute([$pId]);
        Telegram::sendMessage("🗑 پنل حذف شد.");
        sendMainMenu();
        exit;
    }

    if (str_starts_with($data, 'edit_panel_')) {
        $pId = (int)str_replace('edit_panel_', '', $data);
        setState($pdo, $chatId, 'await_p_url', ['panel_id' => $pId]);
        Telegram::sendMessage("🔗 آدرس URL کامل پنل را وارد کنید:\n(مثلاً: <code>https://panel.site.com:8080</code>)");
        exit;
    }

    if ($data === 'add_new_panel') {
        $buttons = [
            [['text' => '🟢 ویتوری (V2Ray)', 'callback_data' => 'create_p_type_v2ray']],
            [['text' => '🟣 وایرگارد (WireGuard)', 'callback_data' => 'create_p_type_wireguard']],
            [['text' => '🔙 انصراف', 'callback_data' => 'manage_panels']]
        ];
        Telegram::sendMessage("نوع پنل پاسارگاد را انتخاب کنید:", ['inline_keyboard' => $buttons]);
        exit;
    }

    if (str_starts_with($data, 'create_p_type_')) {
        $type = str_replace('create_p_type_', '', $data);
        setState($pdo, $chatId, 'await_new_p_name', ['type' => $type]);
        Telegram::sendMessage("🏷 نام این پنل را وارد کنید:\n(مثلاً: پاسارگاد ویتوری ۲)");
        exit;
    }
}

// ----------------------------------------------------
// مدیریت پیام‌های متنی
// ----------------------------------------------------
if (isset($update['message']['text'])) {
    $text = trim($update['message']['text']);
    $st = getState($pdo, $chatId);
    $step = $st['step'];
    $data = $st['data'];

    if ($text === '/start' || $text === 'منو') {
        clearState($pdo, $chatId);
        sendMainMenu();
        exit;
    }

    // ساخت گروه در بخش مدیریت
    if ($step === 'await_group_title') {
        $stmt = $pdo->prepare("INSERT INTO panel_groups (panel_id, name) VALUES (?, ?)");
        $stmt->execute([$data['panel_id'], $text]);
        clearState($pdo, $chatId);
        Telegram::sendMessage("✅ گروه <b>{$text}</b> با موفقیت برای این پنل ایجاد شد.");
        sendMainMenu();
        exit;
    }

    // ساخت گروه سریع هنگام افزودن نود
    if ($step === 'await_fast_group_name') {
        $stmt = $pdo->prepare("INSERT INTO panel_groups (panel_id, name) VALUES (?, ?)");
        $stmt->execute([$data['panel_id'], $text]);
        $newGroupId = $pdo->lastInsertId();

        $cfs = $pdo->query("SELECT * FROM cloudflare_accounts")->fetchAll();
        $buttons = [];
        foreach ($cfs as $cf) {
            $buttons[] = [['text' => "☁️ " . $cf['name'], 'callback_data' => 'an_cf_' . $cf['id']]];
        }
        setState($pdo, $chatId, 'await_node_cf', ['panel_id' => $data['panel_id'], 'group_id' => $newGroupId]);
        Telegram::sendMessage("✅ گروه <b>{$text}</b> ساخته و انتخاب شد.\n\n☁️ <b>مرحله ۳:</b> دامنه این نود روی کدام اکانت کلودفلر است؟", ['inline_keyboard' => $buttons]);
        exit;
    }

    // تغییر دستی آی‌پی
    if ($step === 'await_manual_ip') {
        $newIp = $text;
        $nodeId = $data['node_id'];
        $stmt = $pdo->prepare("SELECT n.*, ca.api_token FROM nodes n JOIN cloudflare_accounts ca ON n.cf_account_id = ca.id WHERE n.id = ?");
        $stmt->execute([$nodeId]);
        $n = $stmt->fetch();

        if ($n) {
            $ok = Cloudflare::updateRecord($n['api_token'], $n['zone_id'], $n['record_id'], $n['domain_name'], $newIp, (bool)$n['proxied']);
            if ($ok) {
                $pdo->prepare("UPDATE nodes SET current_ip = ?, status = 'manual_override' WHERE id = ?")->execute([$newIp, $nodeId]);
                clearState($pdo, $chatId);
                Telegram::sendMessage("✅ <b>آی‌پی با موفقیت تغییر کرد!</b>\n🌐 ساب‌دامین: <code>{$n['domain_name']}</code>\n🎯 آی‌پی جدید: <code>{$newIp}</code>\n⚠️ <i>نود روی حالت دستی قرار گرفت.</i>");
                sendMainMenu();
                exit;
            } else {
                Telegram::sendMessage("❌ خطا در ارسال دستور به کلودفلر.");
            }
        }
        exit;
    }

    // دریافت کشور
    if ($step === 'await_country') {
        $data['country'] = $text;
        setState($pdo, $chatId, 'await_node_name', $data);
        Telegram::sendMessage("🏷 لطفاً یک <b>نام دلخواه برای نود</b> وارد کنید:\n(مثلاً: نود ۱ آلمان)");
        exit;
    }

    // ثبت نهایی نود
    if ($step === 'await_node_name') {
        $nodeName = $text;
        $stmt = $pdo->prepare("
            INSERT INTO nodes 
            (panel_id, group_id, cf_account_id, name, country, main_ip, domain_name, zone_id, record_id, current_ip, status) 
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'online')
        ");
        $stmt->execute([
            $data['panel_id'],
            $data['group_id'] ?? null,
            $data['cf_id'],
            $nodeName,
            $data['country'],
            $data['main_ip'],
            $data['domain_name'],
            $data['zone_id'],
            $data['record_id'],
            $data['main_ip']
        ]);
        clearState($pdo, $chatId);
        Telegram::sendMessage("✅ <b>نود با موفقیت ثبت شد!</b>\n\n🏷 نام: <b>{$nodeName}</b>\n🌍 کشور: {$data['country']}\n🌐 ساب‌دامین: <code>{$data['domain_name']}</code>\n📡 آی‌پی: <code>{$data['main_ip']}</code>");
        sendMainMenu();
        exit;
    }

    // ساخت پنل
    if ($step === 'await_new_p_name') {
        $stmt = $pdo->prepare("INSERT INTO panels (name, panel_type) VALUES (?, ?)");
        $stmt->execute([$text, $data['type']]);
        $newId = $pdo->lastInsertId();
        setState($pdo, $chatId, 'await_p_url', ['panel_id' => $newId]);
        Telegram::sendMessage("🔗 آدرس URL پنل را بفرستید:\n(مثلاً: <code>https://panel.site.com:8080</code>)");
        exit;
    }

    if ($step === 'await_p_url') {
        $data['panel_url'] = rtrim($text, '/');
        setState($pdo, $chatId, 'await_p_token', $data);
        Telegram::sendMessage("🔑 توکن یا رمز پنل را ارسال کنید:");
        exit;
    }

    if ($step === 'await_p_token') {
        $pdo->prepare("UPDATE panels SET panel_url = ?, api_token = ? WHERE id = ?")->execute([$data['panel_url'], $text, $data['panel_id']]);
        clearState($pdo, $chatId);
        Telegram::sendMessage("✅ اطلاعات پنل ذخیره شد.");
        sendMainMenu();
        exit;
    }

    // افزودن کلودفلر
    if ($step === 'await_cf_name') {
        $data['name'] = $text;
        setState($pdo, $chatId, 'await_cf_token', $data);
        Telegram::sendMessage("🔑 توکن کلودفلر (API Token) را بفرستید:");
        exit;
    }

    if ($step === 'await_cf_token') {
        $pdo->prepare("INSERT INTO cloudflare_accounts (name, api_token) VALUES (?, ?)")->execute([$data['name'], $text]);
        clearState($pdo, $chatId);
        Telegram::sendMessage("✅ اکانت کلودفلر ذخیره شد.");
        sendMainMenu();
        exit;
    }

    // افزودن زاپاس
    if ($step === 'await_backup_name') {
        $data['name'] = $text;
        setState($pdo, $chatId, 'await_backup_ip', $data);
        Telegram::sendMessage("📡 آی‌پی سرور زاپاس را وارد کنید:");
        exit;
    }

    if ($step === 'await_backup_ip') {
        $pdo->prepare("INSERT INTO backup_nodes (panel_id, name, ip) VALUES (?, ?, ?)")->execute([$data['panel_id'], $data['name'], $text]);
        clearState($pdo, $chatId);
        Telegram::sendMessage("✅ سرور زاپاس اضافه شد.");
        sendMainMenu();
        exit;
    }
}