<?php

namespace Bot;

use Config\AppConfig;
use Config\jdf;
use DateTime;
use DateTimeZone;
use Exception;
use Payment\ZarinpalPaymentHandler;
use Bot\FormManager;
use Bot\StateManager;
use Bot\locationHandler;

class BotHandler
{
    use BotHandler\UtilityTrait;
    use BotHandler\CallbackTrait;
    use BotHandler\RegistrationTrait;
    use BotHandler\TourFormTrait;
    use BotHandler\PaymentTrait;
    use BotHandler\GroupTrait;

    private $chatId;
    private $text;
    private $messageId;
    private $message;
    public $db;
    private $fileHandler;
    private $zarinpalPaymentHandler;
    public $botLink;
    private $botToken;
    private $stateManager;
    private $forms;
    private $callbackQueryId;

    public function __construct($chatId, $text, $messageId, $message)
        {
            $this->chatId = $chatId;
            $this->text = $text;
            $this->messageId = $messageId;
            $this->message = $message;
            $this->db = new Database();
            $this->fileHandler = new FileHandler();
            $config = AppConfig::getConfig();
            $this->botToken = $config['bot']['token'];
            $this->botLink = $config['bot']['bot_link'];
    
            $this->stateManager = new StateManager();
            $this->zarinpalPaymentHandler = new ZarinpalPaymentHandler();
            $this->forms = include(__DIR__ . '/Forms.php');
        }

    public function handleRequest(): void
        {
            $this->db->saveUser($this->message["from"]);
            $chatId = $this->chatId;
            $text = $this->text;
            $userLanguage = $this->db->getUserLanguage($this->chatId);
            $payload = null;
            if ($this->checkUserStatus($this->chatId)) {
                return;
            }
    
            if (isset($this->message['start_payload'])) {
                $payload = $this->message['start_payload'];
            }
    
            if (str_starts_with($text, '/start ')) {
                $payload = trim(substr($text, 7));
            }
    
            if ($payload !== null && str_starts_with($payload, 'register_')) {
                $tourId = intval(str_replace('register_', '', $payload));
                $this->startTourRegistrationProcess($this->chatId, $tourId);
                return;
            }
    
            if (str_starts_with($this->text, "/start") && $payload === null) {
                $token = substr($this->text, 7);
                $this->fileHandler->clearUserData($chatId);
                $this->stateManager->clearState($chatId);
                $text  = "<i><b>سلام دوست طبیعت گرد!</b></i> 🪷\n";
                $text .= "به ربات <b>طبیعت گرد</b> خوش اومدی 🏕️✨\n\n";
                $text .= "<blockquote>اینجا می تونی تورهای هیجان انگیز رو ببینی، ثبت نام کنی و برای ماجراجویی بعدی آماده بشی! 🏝🏜</blockquote>\n\n";
                $text .= "<b>لیدر:</b> کسیه که مسئولیت برگزاری و راهنمایی تورها رو به عهده داره. 🧭\n";
                $text .= "<b>طبیعت گرد:</b> کسیه که برای لذت بردن از سفر و کشف زیبایی های طبیعت همراه گروه میاد. 🌿\n\n";
                $text .= "از گزینه های زیر استفاده کن 👇:";
    
                $this->deleteMessageWithDelay();
                $this->sendRequest("sendMessage", [
                    "chat_id" => $chatId,
                    "text" => $text,
    
                    "parse_mode" => "HTML",
                    "reply_markup" =>  $this->getMainKeyboard()
                ]);
    
                return;
            } elseif ($this->text === "/explorer") {
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->explorerRegistration($this->chatId, $messageId);
                return;
            } elseif ($this->text === "/leader") {
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->leaderRegistration($this->chatId, $messageId);
                return;
            } elseif (str_starts_with($this->text, "/tours")) {
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->showActiveToursList($this->chatId, 'fa', 1, $messageId);
            } elseif (str_starts_with($this->text, "/help")) {
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->uploadGuidesMenu($this->chatId, NULL);
            }
    
            if ($payload !== null && str_starts_with($payload, 'join_leader')) {
    
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->fileHandler->saveMessageId($this->chatId, $messageId);
                $this->fileHandler->clearState($this->chatId);
                $text = "🌿 سلام! به ربات طبیعت گردی رام خوش اومدی! 🏞️" . "\n";
                $text .= "بیا با هم به دل طبیعت سفر کنیم و ماجراهای فراموش نشدنی بسازیم! 😊" . "\n";
                $text .= "برای اینکه به عنوان لیدر طبیعت گردی به جمع ما بپیوندی و تورهای هیجان انگیز خودت رو طراحی کنی، کافیه روی دکمه زیر کلیک کنی:";
    
                $response = $this->sendRequest("sendMessage", [
                    "chat_id" => $chatId,
                    "text" => $text,
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [
                                ["text" => "📝 شروع ثبت نام", "callback_data" => "leader_request"]
                                //                            ["text" => "🔙 ", "callback_data" => "go_to_menu"]
                            ]
                        ]
                    ])
                ]);
    
                if (isset($response['result']['message_id'])) {
                    $this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                }
            }
            if ($payload !== null && str_starts_with($payload, 'join_user')) {
    
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->fileHandler->saveMessageId($this->chatId, $messageId);
                $this->fileHandler->clearState($this->chatId);
                $text = "🌿 سلام! به ربات طبیعت گردی رام خوش اومدی! 🏞️" . "\n";
                $text .= "بیا با هم به دل طبیعت سفر کنیم و ماجراهای فراموش نشدنی بسازیم! 😊" . "\n";
                $text .= "برای اینکه به عنوان طبیعت گرد به جمع ما بپیوندی و در تورهای ما ثبت نام کنی، کافیه روی دکمه زیر کلیک کنی:";
    
                $response = $this->sendRequest("sendMessage", [
                    "chat_id" => $chatId,
                    "text" => $text,
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [
                                ["text" => "📝 شروع ثبت نام", "callback_data" => "register"]
                                //                            ["text" => "🔙 ", "callback_data" => "go_to_menu"]
                            ]
                        ]
                    ])
                ]);
    
                if (isset($response['result']['message_id'])) {
                    $this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                }
            }
    
            $stateM = $this->stateManager->getState($this->chatId);
            if ($stateM && isset($stateM['form_key'])) {
    
                $formsConfig = include(__DIR__ . '/Forms.php');
                $formManager = new FormManager($this, $this->stateManager, $formsConfig);
                $this->deleteMessageWithDelay();
    
                $formManager->handle($this->chatId, $this->message);
                return;
            }
            if ($stateM && ($stateM['next_action'] ?? '') === 'awaiting_new_banner') {
                $tourId = $stateM['context']['tour_id'];
    
                $this->deleteMessageWithDelay();
                $newValue = $this->message ?? null;
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                $keyboard = [
                    "inline_keyboard" => [
                        [['text' => '🔙 بازگشت به منوی ویرایش', 'callback_data' => 'edit_tour_' . $tourId]]
                    ]
                ];
    
                if (!$newValue || empty($newValue['photo'])) {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "لطفاً یک تصویر ارسال کنید.",
                        "reply_markup" => json_encode($keyboard)
                    ]);
                    return;
                }
    
                // گرفتن بهترین کیفیت عکس (آخرین گزینه در آرایه)
                $photos = $newValue['photo'];
                $photo = end($photos);
                $fileId = $photo['file_id'] ?? null;
    
                if (!$fileId) {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "❌ مشکلی در دریافت تصویر رخ داد، لطفاً دوباره تلاش کنید.",
                        "reply_markup" => json_encode($keyboard)
                    ]);
                    return;
                }
    
                $updated = $this->db->updateTourField($tourId, 'banner', $fileId);
    
                if ($updated) {
    
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "✅ بنر تور با موفقیت به روزرسانی شد.",
                        "reply_markup" => json_encode($keyboard)
                    ]);
    
                    $this->stateManager->clearState($chatId);
                    $this->updateTourPost($tourId);
                } else {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "❌ خطا در به روزرسانی بنر، دوباره تلاش کنید.",
                        "reply_markup" => json_encode($keyboard)
                    ]);
                }
    
                return;
            }
    
    
            if ($stateM && ($stateM['next_action'] ?? '') === 'awaiting_single_price_update') {
                $newValue = $this->text;
                $this->deleteMessageWithDelay();
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if (!is_numeric($newValue) || (int)$newValue < 0) {
                    $this->sendRequest("editMessageText", ["chat_id" => $chatId, "message_id" => $messageId, "text" => "❌ لطفاً فقط یک عدد مثبت وارد کنید."]);
                    return;
                }
    
                $tourId = $stateM['context']['tour_id'];
                $vehicleKey = $stateM['context']['vehicle_key'];
    
                $tour = $this->db->getTourById($tourId);
                $pricingData = $tour['pricing'] ?? [];
    
                $transportLabels = $this->forms['tour_creation']['fields']['transport_options']['options'];
                $label = $transportLabels[$vehicleKey] ?? $vehicleKey;
    
                $pricingData[$vehicleKey] = [
                    'label' => $label,
                    'amount' => (int)$newValue
                ];
    
                $this->db->updateTourField($tourId, 'pricing', json_encode($pricingData));
                $this->stateManager->clearState($chatId);
                $this->updateTourPost($tourId);
    
                $keyboard = [
                    "inline_keyboard" => [
                        [['text' => '🔙 بازگشت به منوی ویرایش', 'callback_data' => 'edit_tour_' . $tourId]]
                    ]
                ];
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $chatId,
                    "message_id" => $messageId,
                    "text" => "✅ قیمت با موفقیت ویرایش شد!",
                    "reply_markup" => json_encode($keyboard)
                ]);
    
                $fakeCallbackQuery = ["data" => "prompt_edit_pricing_" . $tourId, "message" => ["message_id" => $this->messageId, "chat" => ["id" => $chatId]]];
                $this->handleCallbackQuery($fakeCallbackQuery);
                return;
            }
    
            if ($stateM && ($stateM['next_action'] ?? '') === 'awaiting_new_value') {
                $tourId = $stateM['context']['tour_id'];
                $field = $stateM['context']['field'];
                $fieldConfig = $this->forms['tour_creation']['fields'][$field];
                $fieldType = $fieldConfig['type'] ?? 'text';
                $newValue = null;
                $this->deleteMessageWithDelay();
    
                // استخراج مقدار بر اساس نوع فیلد
                if (in_array($fieldType, ['photo', 'location']) && isset($this->message[$fieldType])) {
                    $newValue = $this->message;
                } else {
                    $newValue = $this->text;
                }
    
                // اعتبارسنجی و ذخیره
                // (در اینجا می‌توانید منطق اعتبارسنجی را مانند FormManager اضافه کنید)
    
                $success = false;
                if ($fieldType === 'photo') {
                    $fileId = end($newValue['photo'])['file_id'];
                    $success = $this->db->updateTourField($tourId, 'banner', $fileId);
                } elseif ($fieldType === 'location') {
                    $location = $newValue['location'];
                    $this->db->updateTourField($tourId, 'latitude', $location['latitude']);
                    $success = $this->db->updateTourField($tourId, 'longitude', $location['longitude']);
                } else {
                    $success = $this->db->updateTourField($tourId, $field, $newValue);
                }
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($success) {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => "✅ مقدار با موفقیت ویرایش شد!",
                        "reply_markup" => json_encode(['inline_keyboard' => [[['text' => '🔙 بازگشت به منوی ویرایش', 'callback_data' => 'edit_tour_' . $tourId]]]])
                    ]);
                    $this->updateTourPost($tourId);
                } else {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => "❌ خطا در ویرایش.",
                        "reply_markup" => json_encode(['inline_keyboard' => [[['text' => '🔙 بازگشت به منوی ویرایش', 'callback_data' => 'edit_tour_' . $tourId]]]])
                    ]);
                }
    
                $this->stateManager->clearState($this->chatId);
                return;
            }
    
    
            if ($stateM && ($stateM['next_action'] ?? '') === 'awaiting_new_price') {
                $newValue = $this->text;
    
                $promptMessageId = $stateM['context']['prompt_message_id'];
    
                if (!is_numeric($newValue)) {
                    $this->sendRequest("sendMessage", ["chat_id" => $chatId, "text" => "❌ لطفاً فقط عدد وارد کنید."]);
                    $this->askForNextPriceInEditMode($chatId, $promptMessageId);
                    return;
                }
    
                $vehiclesToPrice = $stateM['context']['vehicles_to_price'];
                if (empty($vehiclesToPrice)) {
                    $tourId = $stateM['context']['tour_id'];
                    $newPricingData = $stateM['context']['new_pricing_data'];
                    $this->db->updateTourField($tourId, 'pricing', json_encode($newPricingData));
                    $this->stateManager->clearState($chatId);
                    $keyboard = [
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به منوی ویرایش', 'callback_data' => 'edit_tour_' . $tourId]]
                        ]
                    ];
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => "✅ تمام قیمت ها با موفقیت تنظیم شدند.",
                        "reply_markup" => json_encode($keyboard)
                    ]);
                    $this->updateTourPost($tourId);
                    $fakeCallbackQuery = ["data" => "edit_tour_" . $tourId, "message" => ["message_id" => $messageId, "chat" => ['id' => $chatId]]];
                    $this->handleCallbackQuery($fakeCallbackQuery);
                    return;
                }
                $vehiclePriced = array_shift($vehiclesToPrice);
    
                $fieldConfig = $this->forms['tour_creation']['fields']['transport_options'];
                $vehicleLabel = $fieldConfig['options'][$vehiclePriced] ?? $vehiclePriced;
    
                $stateM['context']['new_pricing_data'][$vehiclePriced] = ['label' => $vehicleLabel, 'amount' => (int)$newValue];
                $stateM['context']['vehicles_to_price'] = $vehiclesToPrice;
                $this->stateManager->saveState($chatId, $stateM);
    
                $this->sendRequest('deleteMessage', ['chat_id' => $chatId, 'message_id' => $this->messageId]);
    
                $this->askForNextPriceInEditMode($chatId, $promptMessageId);
    
                return;
            }
    
    
    
    
    
            $state = $this->fileHandler->getState($this->chatId);
            $tempData = $this->fileHandler->getTempData($this->chatId);
            $leaderData = $this->fileHandler->getLeaderData($this->chatId);
            $tourData = $this->fileHandler->getTourData($this->chatId);
            $userLanguage = $this->db->getUserLanguage($this->chatId);
            $telegramName = $this->db->getUserFullName($this->chatId);
    
            if ($state && str_starts_with($state, 'awaiting_broadcast_message_')) {
                $tourId = (int)str_replace('awaiting_broadcast_message_', '', $state);
                $broadcastContent = [];
                if (!empty($this->message['text'])) {
                    $broadcastContent = ['type' => 'text', 'text' => $this->message['text'], 'message_id' => $this->message['message_id']];
                } elseif (!empty($this->message['photo'])) {
                    $broadcastContent = ['type' => 'photo', 'file_id' => end($this->message['photo'])['file_id'], 'caption' => $this->message['caption'] ?? null, 'message_id' => $this->message['message_id']];
                } elseif (!empty($this->message['video'])) {
                    $broadcastContent = ['type' => 'video', 'file_id' => $this->message['video']['file_id'], 'caption' => $this->message['caption'] ?? null, 'message_id' => $this->message['message_id']];
                } elseif (!empty($this->message['document'])) {
                    $broadcastContent = ['type' => 'document', 'file_id' => $this->message['document']['file_id'], 'caption' => $this->message['caption'] ?? null, 'message_id' => $this->message['message_id']];
                }
    
                if (empty($broadcastContent)) {
                   $this->sendRequest("sendMessage", ["chat_id" => $this->chatId, "text" => "❌ نوع پیام پشتیبانی نمی‌شود."]);
                    return;
                }
    
                $this->fileHandler->saveTemporaryData($this->chatId, 'broadcast_message', $broadcastContent);
                $this->fileHandler->saveState($this->chatId, null);
    
                // ارسال یک پیام برای تایید
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "👇 این پیام برای همه ثبت‌نام کنندگان ارسال خواهد شد. آیا تایید می‌کنید؟",
                    "reply_to_message_id" => $this->message['message_id'], // پاسخ به پیام اصلی
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [
                                ["text" => "✅ بله، ارسال کن", "callback_data" => "confirm_broadcast_" . $tourId],
                                ["text" => "❌ خیر، لغو کن", "callback_data" => "cancel_broadcast_" . $tourId]
                            ]
                        ]
                    ])
                ]);
    
                return;
            } else 
            if ($state === 'awaiting_user_firstname') {
                $first_name = $this->text;
                $tempData['first_name'] = $first_name;
                $this->fileHandler->setTempData($this->chatId, $tempData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_user_lastname')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "👋 سلام <b>" . $tempData['first_name'] . "</b>!\n\n"
                            . "✨ لطفاً <b>نام خانوادگی</b> خود را وارد کنید 🖊️",
                        "parse_mode" => "HTML",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "user_firstname"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_user_lastname') {
                $last_name = $this->text;
                $tempData['last_name'] = $last_name;
                $this->fileHandler->setTempData($this->chatId, $tempData);
                $user_fullname = $this->fileHandler->getUserName($this->chatId);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_user_nickname')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "👤 نام: " . $tempData['first_name'] . "\n"
                            . "📝 نام خانوادگی: " . $tempData['last_name'] . "\n"
                            . "✨ حالا نوبت به <b>نام مستعار</b> رسید!\n"
                            . "می تونی نام مستعارت رو خودت وارد کنی یا از بین دو گزینه پیشنهادی انتخاب کنی. 👇\n"
                            . "ℹ️ توجه: این نام در کانال نمایش داده خواهد شد.",
    
                        "parse_mode" => "HTML",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "انتخاب نام تلگرام(" . $telegramName . ")", "callback_data" => "choice_telegram_name"]],
                                [["text" => "انتخاب نام واقعی(  " . $user_fullname . ")", "callback_data" => "choice_explorer_name"]],
                                [
                                    ["text" => "🔙 بازگشت ", "callback_data" => "user_lastname"],
                                    ["text" => " ❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
    
                        ])
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_user_nickname') {
                $nick_name = $this->text;
                $tempData['nick_name'] = $nick_name;
                $this->fileHandler->setTempData($this->chatId, $tempData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_user_birthdate')) {
                    $this->deleteMessageWithDelay();
    
                    // استفاده از DatePicker
                    $datePicker = new \Bot\DatePicker();
                    $birthPicker = $datePicker->generate(1375, 1, 1, 'birthdate', "اطلاعات شما تا این لحظه:\n" .
                        "👤 نام: {$tempData['first_name']}\n" .
                        "📝 نام خانوادگی: {$tempData['last_name']}\n" .
                        "⭐ نام مستعار: {$tempData['nick_name']}\n\n" .
                        "🎂 لطفاً تاریخ تولد خود را انتخاب کنید:");
    
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $birthPicker['text'],
                        "parse_mode" => "HTML",
                        "reply_markup" => $birthPicker['reply_markup']
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "خطا در پردازش. لطفاً دوباره سعی کنید.",
                        "reply_markup" => $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_user_phone') {
    
                $messageId = $this->fileHandler->getMessageId($chatId);
                $update = json_decode(file_get_contents('php://input'), true);
                $phone = $this->text;
                //            if (isset($update['message']['contact'])) {
                //                $phone = $update['message']['contact']['phone_number'];
                //            } else {
                //                $phone = $this->text;
                //            }
                if ($this->isValidIranianMobile($phone)) {
                    $tempData['phone'] = $phone;
                    $this->fileHandler->setTempData($this->chatId, $tempData);
    
                    if ($this->fileHandler->saveState($chatId, 'awaiting_user_province')) {
                        $this->deleteMessageWithDelay();
    
                        // ساخت کیبورد استان ها
                        $locationHandler = new locationHandler();
                        $provincesKeyboard = $locationHandler->getProvincesKeyboard();
                        $response = $this->sendRequest("editMessageText", [
                            "chat_id" => $chatId,
                            "message_id" => $messageId,
                            "text" =>
                            "👤 نام: " . $tempData['first_name'] . "\n"
                                . "📝 نام خانوادگی: " . $tempData['last_name'] . "\n"
                                . "⭐ نام مستعار: " . $tempData['nick_name'] . "\n"
                                . "🎂 تاریخ تولد: " . $this->gregorianToJalali($tempData['date_of_birth']) . "\n"
                                . "📞 شماره تماس: " . $tempData['phone'] . "\n\n"
                                . "🌍 <b>قدم بعدی:</b>\n"
                                . "📍 لطفاً استان محل سکونت خود را انتخاب کنید:",
    
                            "parse_mode"   => "HTML",
                            "reply_markup" => json_encode($provincesKeyboard)
                        ]);
                        if (isset($response['result']['message_id'])) {
                            $this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                        } else {
                            error_log("error save message id");
                        }
                    } else {
                        error_log("❌ Failed to save state for chatId: $chatId");
                        $this->sendRequest("sendMessage", [
                            "chat_id" => $chatId,
                            "text" => "خطا در پردازش. لطفاً دوباره تلاش کنید.",
                            "reply_markup" => $this->getMainKeyboard()
                        ]);
                    }
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => "شماره موبایل وارد شده نامعتبر است.\nلطفاً دوباره شماره خود را وارد کنید.",
                        "reply_markup" => json_encode(["force_reply" => true])
                    ]);
                }
            }
    
    
            // Leader Section //
    
            if ($state === 'awaiting_leader_firstname') {
                $first_name = $this->text;
                $leaderData['first_name'] = $first_name;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_lastname')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "👋 سلام {$leaderData['first_name']} عزیز\n\n" .
                            "📝 لطفاً نام خانوادگی خود را وارد کنید:",
    
    
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_firstname"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_lastname') {
                $last_name = $this->text;
                $leaderData['last_name'] = $last_name;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $leader_fullname = $this->fileHandler->getLeaderName($this->chatId);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_nickname')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => "👤 نام: " . $leaderData['first_name'] . "\n" .
                            "📝 نام خانوادگی: " . $leaderData['last_name'] . "\n\n" .
                            "⭐ لطفاً نام مستعار خود را وارد کنید یا از بین دو گزینه زیر انتخاب کنید:",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "انتخاب نام تلگرام(" . $telegramName . ")", "callback_data" => "choice_leader_telegram_name"]],
                                [["text" => "انتخاب نام واقعی(  " . $leader_fullname . ")", "callback_data" => "choice_leader_real_name"]],
                                [
                                    ["text" => "🔙 بازگشت ", "callback_data" => "leader_lastname"],
                                    ["text" => " ❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
    
                        ])
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_nickname') {
                $nick_name = $this->text;
                $leaderData['nick_name'] = $nick_name;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_birthdate')) {
                    $this->deleteMessageWithDelay();
                    // استفاده از DatePicker
                    $datePicker = new \Bot\DatePicker();
                    $birthPicker = $datePicker->generate(1375, 1, 1, 'birthday', "اطلاعات شما تا این لحظه:\n" .
                        "👤 نام: {$leaderData['first_name']}\n" .
                        "📝 نام خانوادگی: {$leaderData['last_name']}\n" .
                        "⭐ نام مستعار: {$leaderData['nick_name']}\n\n" .
                        "🎂 لطفاً تاریخ تولد خود را انتخاب کنید 👇");
    
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $birthPicker['text'],
                        "parse_mode" => "HTML",
                        "reply_markup" => $birthPicker['reply_markup']
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_phone') {
                $phone = $this->text;
                $messageId = $this->fileHandler->getMessageId($chatId);
                if ($this->isValidIranianMobile($phone)) {
                    $leaderData['phone'] = $phone;
                    $this->fileHandler->setLeaderData($this->chatId, $leaderData);
    
                    if ($this->fileHandler->saveState($chatId, 'awaiting_leader_province')) {
                        $locationHandler = new locationHandler();
                        $provincesKeyboard = $locationHandler->getProvincesKeyboard();
                        $this->deleteMessageWithDelay();
                        $response = $this->sendRequest("editMessageText", [
                            "chat_id" => $chatId,
                            "message_id" => $messageId,
                            "text" =>
                            "👤 نام: " . $leaderData['first_name'] . "\n" .
                                "📝 نام خانوادگی: " . $leaderData['last_name'] . "\n" .
                                "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                                "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                                "📞 تلفن: " . $leaderData['phone'] . "\n\n" .
                                "📍 لطفاً استان محل سکونت خود را وارد کنید:",
                            "reply_markup" => json_encode($provincesKeyboard)
                        ]);
                    } else {
                        error_log("❌ Failed to save state for chatId: $chatId");
                        $this->sendRequest("sendMessage", [
                            "chat_id" => $chatId,
                            "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                            "reply_markup" =>  $this->getMainKeyboard()
                        ]);
                    }
                } else {
                    $response = $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => "شماره موبایل وارد شده نامعتبر است" . "\n" .
                            "لطفا دوباره شماره موبایل خود را وارد کنید",
                        "reply_markup" => json_encode(["force_reply" => true])
                    ]);
                }
            } else if ($state === 'awaiting_leader_city') {
                $city = $this->text;
                $leaderData['city'] = $city;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_address')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "text" =>
                        "👤 نام: " . $leaderData['first_name'] . "\n" .
                            "📝 نام خانوادگی: " . $leaderData['last_name'] . "\n" .
                            "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                            "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                            "📞 تلفن: " . $leaderData['phone'] . "\n" .
                            "🏙️ شهر: " . $leaderData['city'] . "\n\n" .
                            "📍 لطفاً آدرس خود را وارد کنید:",
                        "message_id" => $messageId,
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_city"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                    //$this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_address') {
                $address = $this->text;
                $leaderData['address'] = $address;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_code')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "text" =>
                        "👤 نام: " . $leaderData['first_name'] . "\n" .
                            "📝 نام خانوادگی: " . $leaderData['last_name'] . "\n" .
                            "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                            "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                            "📞 تلفن: " . $leaderData['phone'] . "\n" .
                            "🏙️ شهر: " . $leaderData['city'] . "\n" .
                            "📍 آدرس: " . $leaderData['address'] . "\n\n" .
                            "🆔 لطفاً کد ملی خود را وارد کنید:",
                        "message_id" => $messageId,
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_address"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                    //$this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_code') {
                $code = $this->text;
                $leaderData['national_code'] = $code;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_channel')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "text" =>
                        "👤 نام: " . $leaderData['first_name'] . "\n" .
                            "📝 نام خانوادگی: " . $leaderData['last_name'] . "\n" .
                            "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                            "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                            "📞 تلفن: " . $leaderData['phone'] . "\n" .
                            "🏙️ شهر: " . $leaderData['city'] . "\n" .
                            "📍 آدرس: " . $leaderData['address'] . "\n" .
                            "🆔 کد ملی: " . $leaderData['national_code'] . "\n\n" .
                            "📢 لطفاً آیدی کانال خود را وارد کنید مانند (test@):",
                        "message_id" => $messageId,
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_code"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                    //$this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_channel') {
                $channel = $this->text;
                $leaderData['channel'] = $channel;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_group')) {
                    $this->deleteMessageWithDelay();
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "text" =>
                        "👤 نام: " . $leaderData['first_name'] . "\n" .
                            "📝 نام خانوادگی: " . $leaderData['last_name'] . "\n" .
                            "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                            "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                            "📞 تلفن: " . $leaderData['phone'] . "\n" .
                            "🏙️ شهر: " . $leaderData['city'] . "\n" .
                            "📍 آدرس: " . $leaderData['address'] . "\n" .
                            "🆔 کد ملی: " . $leaderData['national_code'] . "\n" .
                            "📢 کانال: " . $leaderData['channel'] . "\n\n" .
                            "💬 لطفاً آیدی گروه خود را وارد کنید مانند: test@",
                        "message_id" => $messageId,
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_channel"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                    //$this->fileHandler->saveMessageId($chatId, $response['result']['message_id']);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_group') {
                $group = $this->text;
                $leaderData['group'] = $group;
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($chatId);
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_card')) {
                    $this->deleteMessageWithDelay();
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" =>
                        "👤 نام و نام خانوادگی: " . $leaderData['first_name'] . ' ' . $leaderData['last_name'] . "\n" .
                            "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                            "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                            "🏙️ شهر: " . $leaderData['city'] . "\n" .
                            "📍 آدرس: " . $leaderData['address'] . "\n" .
                            "🆔 کد ملی: " . $leaderData['national_code'] . "\n" .
                            "📢 کانال: " . $leaderData['channel'] . "\n" .
                            "💬 گروه: " . $leaderData['group'] . "\n\n" .
                            "💳 لطفاً شماره کارت خود را وارد کنید:",
    
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_group"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_card') {
                $card = $this->text;
                $leaderData['card_number'] = $card;
                if (! preg_match("/^\d{16}$/", $card) && $card !== '*') {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text"    => "⚠️ لطفاً شماره کارت معتبر ۱۶ رقمی وارد کنید یا اگر ندارید، * بزنید.",
                    ]);
                    return;
                }
    
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $messageId = $this->fileHandler->getMessageId($chatId);
                if ($this->fileHandler->saveState($chatId, 'awaiting_leader_sheba')) {
                    $this->deleteMessageWithDelay();
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" =>
                        "👤 نام و نام خانوادگی: " . $leaderData['first_name'] . ' ' . $leaderData['last_name'] . "\n" .
                            "⭐ نام مستعار: " . $leaderData['nick_name'] . "\n" .
                            "🎂 تاریخ تولد: " . $this->gregorianToJalali($leaderData['date_of_birth']) . "\n" .
                            "🏙️ شهر: " . $leaderData['city'] . "\n" .
                            "📍 آدرس: " . $leaderData['address'] . "\n" .
                            "🆔 کد ملی: " . $leaderData['national_code'] . "\n" .
                            "📢 کانال: " . $leaderData['channel'] . "\n" .
                            "💬 گروه: " . $leaderData['group'] . "\n\n" .
                            "💳 لطفاً شماره شبای خود را وارد کنید:" . "\n" .
                            "نمونه شبا: IR123456789012345678901234",
    
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [
                                    ["text" => "🔙 بازگشت", "callback_data" => "leader_card"],
                                    ["text" => "❌ انصراف", "callback_data" => "go_to_menu"]
                                ]
                            ]
                        ])
                    ]);
                } else {
                    error_log("❌ Failed to save state for chatId: $chatId");
                    $response = $this->sendRequest("editMessageText", [
                        "chat_id" => $chatId,
                        "message_id" => $messageId,
                        "text" => $userLanguage === 'fa' ? "خطا در پردازش. لطفاً دوباره سعی کنید." : "Processing error. Please try again.",
                        "reply_markup" =>  $this->getMainKeyboard()
                    ]);
                }
            } else if ($state === 'awaiting_leader_sheba') {
                $sheba = $this->text;
                if (! ($sheba === '*' || preg_match("/^IR\d{24}$/", $sheba))) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text"    => "⚠️ لطفاً شماره شبا معتبر وارد کنید (۲۶ رقم و با IR شروع شود).",
                    ]);
                    return;
                }
                $leaderData['sheba'] = $sheba;
                $leader_info = [
                    'first_name'    => $leaderData['first_name'],
                    'last_name'     => $leaderData['last_name'],
                    'nick_name'     => $leaderData['nick_name'],
                    'date_of_birth' => $leaderData['date_of_birth'],
                    'phone'         => $leaderData['phone'],
                    'city'          => $leaderData['city'],
                    'address'       => $leaderData['address'],
                    'national_code' => $leaderData['national_code'],
                    'channel'       => $leaderData['channel'],
                    'group_link'    => $leaderData['group'],
                    'card_number'   => $leaderData['card_number'],
                    'sheba'         => $leaderData['sheba']
    
                ];
                $this->fileHandler->setLeaderData($this->chatId, $leaderData);
                $this->db->insertLeader($this->chatId, $leader_info);
                $messageId = $this->fileHandler->getMessageId($chatId);
    
                $this->deleteMessageWithDelay();
                $this->sendRequest("sendMessage", [
                    "chat_id" => $chatId,
                    //                "message_id" => $messageId,
                    "text" => "✅ <b>\u{200F}اطلاعات شما با موفقیت ثبت شد:</b>\n\n" .
                        "👤 <b>\u{200F}نام و نام خانوادگی:</b> " . htmlspecialchars($leaderData['first_name'] . ' ' . $leaderData['last_name']) . "\n" .
                        "🆔 <b>\u{200F}نام مستعار:</b> " . htmlspecialchars($leaderData['nick_name']) . "\n" .
                        "🎂 <b>\u{200F}تاریخ تولد:</b> " . htmlspecialchars($this->gregorianToJalali($leaderData['date_of_birth'])) . "\n" .
                        "🏙️ <b>\u{200F}شهر:</b> " . htmlspecialchars($leaderData['city']) . "\n" .
                        "🏠 <b>\u{200F}آدرس:</b> " . htmlspecialchars($leaderData['address']) . "\n" .
                        "🆔 <b>\u{200F}کد ملی:</b> " . htmlspecialchars($leaderData['national_code']) . "\n" .
                        "🔗 <b>\u{200F}کانال:</b> " . htmlspecialchars($leaderData['channel']) . "\n" .
                        "💬 <b>\u{200F}گروه:</b> " . htmlspecialchars($leaderData['group']) . "\n" .
                        "💳 <b>\u{200F}شماره کارت:</b> <code>" . (! empty($leaderData['card_number']) ? htmlspecialchars($leaderData['card_number']) : '_') . "</code>\n" .
                        "🏦 <b>\u{200F}شبا:</b>  <code>" . htmlspecialchars($leaderData['sheba'] ?: '_') . "</code>\n",
    
                    "parse_mode" => "HTML",  // استفاده از فرمت HTML برای زیباتر شدن
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [
                                ["text" => "🔙 بازگشت", "callback_data" => "go_to_menu"]
                            ]
                        ]
                    ])
                ]);
    
                $admins = $this->db->getAdmins();
                $caption = "📥 <b>درخواست جدید لیدری</b>\n"
                    . "👤 کاربر: <code>{$this->chatId}</code>\n" .
    
                    "👤 <b>\u{200F}نام و نام خانوادگی:</b> " . htmlspecialchars($leaderData['first_name'] . ' ' . $leaderData['last_name']) . "\n" .
                    "🆔 <b>\u{200F}نام مستعار:</b> " . htmlspecialchars($leaderData['nick_name']) . "\n" .
                    "🎂 <b>\u{200F}تاریخ تولد:</b> " . htmlspecialchars($this->gregorianToJalali($leaderData['date_of_birth'])) . "\n" .
                    "🏙️ <b>\u{200F}شهر:</b> " . htmlspecialchars($leaderData['city']) . "\n" .
                    "🏠 <b>\u{200F}آدرس:</b> " . htmlspecialchars($leaderData['address']) . "\n" .
                    "🆔 <b>\u{200F}کد ملی:</b> " . htmlspecialchars($leaderData['national_code']) . "\n" .
                    "🔗 <b>\u{200F}کانال:</b> " . htmlspecialchars($leaderData['channel']) . "\n" .
                    "💬 <b>\u{200F}گروه:</b> " . htmlspecialchars($leaderData['group']) . "\n" .
                    "💳 <b>\u{200F}شماره کارت:</b> <code>" . (! empty($leaderData['card_number']) ? htmlspecialchars($leaderData['card_number']) : '_') . "</code>\n" .
                    "🏦 <b>\u{200F}شبا:</b>  <code>" . htmlspecialchars($leaderData['sheba'] ?: '_') . "</code>\n"
                    . "✅ بررسی و تأیید کن:";
                $inlineKeyboard = [
                    [["text" => "✅ تأیید لیدر", "callback_data" => "confirm_leader_{$this->chatId}"]],
                    [["text" => "❌ رد درخواست", "callback_data" => "reject_leader_{$this->chatId}"]]
                ];
                foreach ($admins as $admin) {
                    $adminChatId = $admin['chat_id'];
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $adminChatId,
                        "text" => $caption,
                        "parse_mode" => "HTML",
                        "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                    ]);
                }
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => "✅ درخواست لیدری شما دریافت شد و برای بررسی و تایید به ادمین ها ارسال شد.\nنتیجه از طریق همین ربات به شما اطلاع داده خواهد شد."
                ]);
            } else if (str_starts_with($state, 'edit_leader_')) {
                $text = $this->text;
                $fieldKey = substr($state, strlen('edit_leader_'));
                $this->deleteMessageWithDelay();
                $this->handleLeaderFieldUpdate($chatId, $fieldKey, $text);
                // in file: TourLeaderBot/classes/BotHandler.php
    
            } elseif (str_starts_with($state, "awaiting_card_payment_proof_")) {
                $tourId = str_replace("awaiting_card_payment_proof_", "", $state);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $tour = $this->db->getTourById($tourId);
                $user = $this->db->registeredExplorerByUserId($this->chatId);
    
                $proof = null;
                if (isset($this->message['photo'])) {
                    $proof = end($this->message['photo'])['file_id'];
                } elseif (!empty($this->text)) {
                    $proof = $this->text;
                }
    
                if (!$proof) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً یک عکس از رسید یا کد پیگیری پرداخت را ارسال کن."
                    ]);
                    return;
                }
    
                $temp = $this->fileHandler->getTempData($this->chatId);
                $selectedVehicle = $temp['selected_vehicle'] ?? null;
                $quantity = $temp['quantity'] ?? 1;
    
                $pricePerPerson = 0;
                if (!empty($tour['pricing'])) {
                    $pricingData = $tour['pricing'];
                    if (is_array($pricingData) && isset($pricingData[$selectedVehicle])) {
                        $priceInfo = $pricingData[$selectedVehicle];
                        if (isset($priceInfo['amount'])) {
                            $pricePerPerson = $priceInfo['amount'];
                        }
                    }
                }
                $totalAmount = $pricePerPerson * $quantity;
    
                $this->fileHandler->setTempData($this->chatId, [
                    'selected_price'   => $pricePerPerson,
                    'selected_vehicle' => $selectedVehicle,
                    'quantity'         => $quantity
                ]);
    
                $this->db->updateTourPaymentStatus($this->chatId, $tourId, 'pending', 'card_to_card', $selectedVehicle, $totalAmount, $quantity);
    
                $admins = $this->db->getAdmins();
                $leaderChatId = $tour['leader_id'];
    
                $caption = "📥 <b>رسید جدید کارت به کارت</b>\n\n"
                    . "👤 کاربر: <code>{$this->chatId}</code>\n"
                    . "<b>نام و نام خانوادگی:</b> " . $user['first_name'] . " " . $user['last_name'] . "\n"
                    . "<b>عنوان تور:</b> " . $tour['title'] . "\n"
                    . "<b>وسیله نقلیه انتخابی:</b> " . $this->getLabelVehicle($selectedVehicle) . "\n"
                    . "<b>تعداد نفرات:</b> " . $quantity . " نفر\n"
                    . "<b>مبلغ کل:</b> " . number_format($totalAmount) . " تومان\n";
    
                $adminNotificationText = $caption . "\n\n<i>این رسید برای تأیید به لیدر تور ارسال شد.</i>";
                foreach ($admins as $admin) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $admin['chat_id'],
                        "text" => $adminNotificationText,
                        "parse_mode" => "HTML",
                    ]);
                }
    
                if (!empty($leaderChatId)) {
                    $inlineKeyboard = [
                        [["text" => "✅ تأیید پرداخت", "callback_data" => "confirm_card_payment_{$this->chatId}_{$tourId}"]],
                        [["text" => "❌ رد پرداخت", "callback_data" => "reject_card_payment_{$this->chatId}_{$tourId}"]]
                    ];
    
                    if (isset($this->message['photo'])) {
                        $this->sendRequest("sendPhoto", [
                            "chat_id" => $leaderChatId,
                            "photo" => $proof,
                            "caption" => $caption . "\n✅ لطفاً بررسی و تأیید کنید:",
                            "parse_mode" => "HTML",
                            "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                        ]);
                    } else {
                        $this->sendRequest("sendMessage", [
                            "chat_id" => $leaderChatId,
                            "text" => $caption . "\n✅ لطفاً بررسی و تأیید کنید:" . "\n\n" . "🧾 رسید متنی:" . "\n" . $proof,
                            "parse_mode" => "HTML",
                            "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                        ]);
                    }
                }
    
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => "✅ رسید شما دریافت شد و برای بررسی به لیدر تور ارسال شد.\nنتیجه از طریق همین ربات به شما اطلاع داده خواهد شد."
                ]);
    
                $this->fileHandler->saveState($this->chatId, "null");
            } elseif ($state === "awaiting_discount_input_star") {
    
                $userLanguage = $this->db->getUserLanguage($this->chatId);
                $discountCode = trim($this->text);
                $tourId = $this->fileHandler->getTourId($this->chatId);
                $this->db->incrementDiscountUsage($discountCode);
    
    
                $this->deleteMessageWithDelay();
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                $discountDetails = $this->db->getDiscountDetails($discountCode);
                $tourDetails = $this->db->getTourDetailsWithPrice($tourId);
                $registration = $this->db->getUserTourRegistration($this->chatId, $tourId);
    
                if (!$discountDetails || !$tourDetails || !$registration) {
                    $errorMessages = [
                        'fa' => "❌ کد تخفیف نامعتبر است. لطفاً دوباره امتحان کنید یا دکمه <b>بدون کد تخفیف</b> را بزنید.",
                        'en' => "❌ The discount code is invalid. Please try again or click the <b>Proceed without discount</b> button.",
                        'de' => "❌ Der Rabattcode ist ungültig. Bitte versuchen Sie es erneut oder klicken Sie auf die Schaltfläche <b>Ohne Rabatt fortfahren</b>."
                    ];
    
                    $buttons = [
                        [
                            [
                                "text" => ($userLanguage === 'fa' ? "🚀 بدون کد تخفیف" : ($userLanguage === 'de' ? "🚀 Ohne Rabatt fortfahren" : "🚀 Proceed without discount")),
                                "callback_data" => "no_discount_code_star"
                            ]
                        ]
                    ];
    
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => $errorMessages[$userLanguage] ?? $errorMessages['en'],
                        "parse_mode" => "HTML",
                        "reply_markup" => json_encode(["inline_keyboard" => $buttons])
                    ]);
                    return;
                }
    
                $originalStarPrice = intval($tourDetails['price_star'] ?? 0);
    
                if ($discountDetails['discount_type'] === 'percent') {
                    $discountAmount = intval(($originalStarPrice * $discountDetails['discount_value']) / 100);
                    $discountText = $userLanguage === 'fa'
                        ? "💰 این کد {$discountDetails['discount_value']}٪ تخفیف دارد."
                        : ($userLanguage === 'de'
                            ? "💰 Dieser Code bietet einen Rabatt von {$discountDetails['discount_value']}%."
                            : "💰 This code gives you a {$discountDetails['discount_value']}% discount.");
                } else {
                    $discountAmount = intval($discountDetails['discount_value']);
                    $discountText = $userLanguage === 'fa'
                        ? "💰 این کد {$discountAmount} استار تخفیف دارد."
                        : ($userLanguage === 'de'
                            ? "💰 Dieser Code gewährt Ihnen einen Rabatt von {$discountAmount} Stars."
                            : "💰 This code gives you a discount of {$discountAmount} Stars.");
                }
    
                $finalTourPrice = max(0, $originalStarPrice - $discountAmount);
    
    
    
                $totalStars = $finalTourPrice;
    
                $this->fileHandler->saveState($this->chatId, "awaiting_payment_star");
                $this->fileHandler->saveDiscountCode($this->chatId, $discountCode);
                $this->fileHandler->saveFinalAmount($this->chatId, $totalStars);
    
                $successMessages = [
                    'fa' => "✅ کد تخفیف با موفقیت روی هزینه تور اعمال شد!\n\n"
                        . "⭐ قیمت اولیه تور: {$originalStarPrice} استار\n"
                        . "🎁 مقدار تخفیف: {$discountAmount} استار\n"
                        . "🎯 قیمت نهایی تور: {$finalTourPrice} استار\n"
    
                        . "💲 مجموع قابل پرداخت: <b>{$totalStars} استار</b>\n\n",
    
                    'en' => "✅ Discount applied successfully on tour fee!\n\n"
                        . "⭐ Original Price: {$originalStarPrice} Stars\n"
                        . "🎁 Discount: {$discountAmount} Stars\n"
                        . "🎯 Final Tour Price: {$finalTourPrice} Stars\n"
    
                        . "💲 Total Payable: <b>{$totalStars} Stars</b>\n\n",
    
                ];
                $buttons = [
                    [
                        [
                            "text" => ($userLanguage === 'fa' ? "🚀 بدون کد تخفیف" : ($userLanguage === 'de' ? "🚀 Ohne Rabatt fortfahren" : "🚀 Proceed without discount")),
                            "callback_data" => "no_discount_code_star"
                        ]
                    ]
                ];
    
    
    
    
                $buttons = [
                    [
                        [
                            "text" => ($userLanguage === 'fa' ? "💳 پرداخت با استار" : ($userLanguage === 'de' ? "💳 Mit Star bezahlen" : "💳 Pay with Star")),
                            "callback_data" => "proceed_to_payment_star"
                        ]
                    ]
                ];
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => $discountText . "\n\n" . ($successMessages[$userLanguage] ?? $successMessages['en']),
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode(["inline_keyboard" => $buttons])
                ]);
            } elseif ($state === "awaiting_discount_input") {
                $userLanguage = 'fa';
                $discountCode = trim($this->text);
                $tourId = $this->fileHandler->getTourId($this->chatId);
    
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                $discountDetails = $this->db->getDiscountDetails($discountCode);
                $tourDetails = $this->db->getTourDetailsWithPrice($tourId);
    
                // اعتبارسنجی کد تخفیف
                if (!$discountDetails || !$tourDetails) {
                    $errorMessages = [
                        'fa' => "❌ کد تخفیف نامعتبر است یا به پایان رسیده است. لطفاً دوباره امتحان کنید یا دکمه <b>بدون کد تخفیف</b> را بزنید.",
                        'en' => "❌ The discount code is invalid or expired. Please try again or click the <b>Proceed without discount</b> button."
                    ];
    
                    $buttons = [[
                        [
                            "text" => "🚀 بدون کد تخفیف",
                            "callback_data" => "no_discount_code_toman"
                        ]
                    ]];
    
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => $errorMessages[$userLanguage] ?? $errorMessages['en'],
                        "parse_mode" => "HTML",
                        "reply_markup" => json_encode(["inline_keyboard" => $buttons])
                    ]);
                    return;
                }
    
                // محاسبه قیمت کل بر اساس تعداد
                $tempData = $this->fileHandler->getTempData($this->chatId);
                $selectedVehicle = $tempData['selected_vehicle'] ?? null;
                $quantity = $tempData['quantity'] ?? 1;
    
                $pricingData = json_decode($tourDetails['pricing'], true);
                $tourPricePerPerson = 0;
                if (is_array($pricingData) && isset($pricingData[$selectedVehicle])) {
                    $tourPricePerPerson = $pricingData[$selectedVehicle]['amount'];
                }
    
                $originalTourPrice = $tourPricePerPerson * $quantity;
    
                // محاسبه مقدار تخفیف
                $discountText = "";
                if ($discountDetails['discount_type'] === 'percent') {
                    $discountAmount = ($originalTourPrice * $discountDetails['discount_value']) / 100;
                    $discountText = "📉 تخفیف: {$discountDetails['discount_value']}٪ (معادل " . number_format($discountAmount) . " تومان)";
                } else {
                    $discountAmount = $discountDetails['discount_value'];
                    $discountText = "📉 تخفیف: " . number_format($discountAmount) . " تومان";
                }
    
                $finalTourPrice = max(0, $originalTourPrice - $discountAmount);
                $totalPayable = $finalTourPrice;
    
                // تنها در صورت معتبر بودن کد، تعداد استفاده از آن را افزایش می دهیم
                $this->db->incrementDiscountUsage($discountCode);
    
                $this->fileHandler->saveState($this->chatId, "null");
                $this->fileHandler->saveDiscountCode($this->chatId, $discountCode);
                $this->fileHandler->saveFinalAmount($this->chatId, $totalPayable);
    
                // پیام نهایی به کاربر با نمایش جزئیات کامل
                $successMessages = [
                    'fa' => "✅ کد تخفیف معتبر است و روی هزینه تور اعمال شد!\n\n"
                        . "👤 تعداد نفرات: {$quantity}\n"
                        . "💰 قیمت کل: <b>" . number_format($originalTourPrice) . " تومان</b>\n"
                        . "{$discountText}\n"
                        . "🎯 قیمت نهایی: <b>" . number_format($finalTourPrice) . " تومان</b>",
                    'en' => "✅ Discount code applied!\n\n"
                        . "👥 Quantity: {$quantity}\n"
                        . "💰 Total Price: <b>" . number_format($originalTourPrice) . " Toman</b>\n"
                        . "{$discountText}\n"
                        . "🎯 Final Price: <b>" . number_format($finalTourPrice) . " Toman</b>"
                ];
    
                $buttons = [[
                    [
                        "text" => "💳 پرداخت",
                        "callback_data" => "proceed_to_payment_toman"
                    ]
                ]];
    
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => $successMessages[$userLanguage] ?? $successMessages['en'],
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode(["inline_keyboard" => $buttons])
                ]);
            }
    
            //discount
            if ($state === "awaiting_discount_code") {
                $userLanguage = $this->db->getUserLanguage($this->chatId);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $discountCode = trim($this->text);
                $this->deleteMessageWithDelay();
    
                if ($this->db->isDiscountCodeExists($discountCode)) {
                    $messages = [
                        'fa' => "❌ کد تخفیف <b>$discountCode</b> قبلاً ثبت شده است. لطفاً یک کد جدید وارد کنید.",
                        'en' => "❌ The discount code <b>$discountCode</b> already exists. Please enter a new code."
                    ];
    
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => $messages[$userLanguage] ?? $messages['en'],
                        "parse_mode" => "HTML"
                    ]);
                    return;
                }
    
                $this->fileHandler->saveState($this->chatId, "awaiting_discount_type");
                $this->fileHandler->saveDiscountCode($this->chatId, $discountCode);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->deleteMessageWithDelay();
    
                $messages = [
                    'fa' => "📌 نوع تخفیف را انتخاب کنید:\n\n"
                        . "🔹 <b>درصدی</b> (مثال: ۱۰٪ تخفیف)\n"
                        . "🔹 <b>مبلغ ثابت</b> (مثال: ۵۰,۰۰۰ تومان تخفیف)",
                    'en' => "📌 Select the discount type:\n\n"
                        . "🔹 <b>Percentage</b> (Example: 10% off)\n"
                        . "🔹 <b>Fixed Amount</b> (Example: 50,000 Toman off)"
                ];
    
                $inlineKeyboard = [
                    [["text" => "🔹 درصدی", "callback_data" => "discount_type_percent"]],
                    [["text" => "🔹 مبلغ ثابت", "callback_data" => "discount_type_fixed"]]
                ];
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => $messages['fa'],
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                ]);
            }
    
            if ($state === "awaiting_discount_value") {
                $userLanguage = $this->db->getUserLanguage($this->chatId);
                if (!is_numeric($this->text) || intval($this->text) <= 0) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً مقدار تخفیف معتبر وارد کنید.",
                        "parse_mode" => "HTML"
                    ]);
                    return;
                }
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->deleteMessageWithDelay();
    
                $this->fileHandler->saveState($this->chatId, "awaiting_max_uses");
                $this->fileHandler->saveDiscountValue($this->chatId, intval($this->text));
    
                $messages = [
                    'fa' => "📌 حداکثر دفعات استفاده از این کد را مشخص کنید:\n"
                        . "🔹 عددی وارد کنید یا دکمه <b>نامحدود</b> را بزنید.",
                    'en' => "📌 Specify the maximum usage limit for this code:\n"
                        . "🔹 Enter a number or press <b>Unlimited</b>."
                ];
    
                $inlineKeyboard = [
                    [["text" => "♾ نامحدود", "callback_data" => "max_uses_unlimited"]]
                ];
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" =>  $messages['fa'],
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                ]);
            }
    
            if ($state === "awaiting_max_uses") {
                $userLanguage = $this->db->getUserLanguage($this->chatId);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->deleteMessageWithDelay();
    
                if (!is_numeric($this->text) || intval($this->text) <= 0) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً مقدار معتبر برای دفعات استفاده وارد کنید.",
                        "parse_mode" => "HTML"
                    ]);
                    return;
                }
    
                $this->fileHandler->saveState($this->chatId, "awaiting_expiry_date");
                $this->fileHandler->saveMaxUses($this->chatId, intval($this->text));
    
                $messages = [
                    'fa' => "📌 تاریخ انقضای کد تخفیف را مشخص کنید. (فرمت: YYYY-MM-DD)\n"
                        . "🔹 یا دکمه <b>نامحدود</b> را بزنید.",
                    'en' => "📌 Enter the expiration date for the discount code. (Format: YYYY-MM-DD)\n"
                        . "🔹 Or press <b>Unlimited</b>."
                ];
    
                $inlineKeyboard = [
                    [["text" => "♾ نامحدود", "callback_data" => "expiry_date_unlimited"]]
                ];
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $this->fileHandler->getMessageId($this->chatId),
                    "text" =>  $messages['fa'],
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                ]);
            }
    
    
            if ($state === "awaiting_expiry_date") {
                $userLanguage = $this->db->getUserLanguage($this->chatId);
                $expiryDate = trim($this->text);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->deleteMessageWithDelay();
    
                $discountCodeData = $this->fileHandler->getDiscountData($this->chatId);
                $this->db->saveDiscountCode(
                    $discountCodeData['code'],
                    $discountCodeData['type'],
                    $discountCodeData['value'],
                    $discountCodeData['max_uses'],
                    $expiryDate
                );
    
                $messages = [
                    'fa' => "✅ کد تخفیف با موفقیت ایجاد شد!\n\n"
                        . "📌 برای مدیریت کدهای تخفیف، از دکمه های زیر استفاده کنید:",
                    'en' => "✅ The discount code has been successfully created!\n\n"
                        . "📌 Use the buttons below to manage discount codes:"
                ];
    
                $inlineKeyboard = [
                    [["text" => "🔙 بازگشت به منوی تخفیف ها", "callback_data" => "manage_discounts"]],
                    [["text" =>  "🏠 بازگشت به منوی اصلی", "callback_data" => "go_to_menu"]]
                ];
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" =>  $messages['fa'],
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode(["inline_keyboard" => $inlineKeyboard])
                ]);
    
                $this->fileHandler->clearDiscountData($this->chatId);
            }
            if (str_starts_with($state, 'awaiting_guide_folder_name_')) {
                $parentIdStr = str_replace('awaiting_guide_folder_name_', '', $state);
                $parentId = ($parentIdStr === 'null') ? null : (int)$parentIdStr;
                $this->deleteMessageWithDelay();
                $folderName = trim($this->text);
                if (empty($folderName)) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً یک نام معتبر برای پوشه راهنما وارد کنید."
                    ]);
                    return;
                }
                $messageIdToDelete = $this->fileHandler->getMessageId($this->chatId);
                if ($messageIdToDelete) {
                    $this->sendRequest("deleteMessage", ["chat_id" => $this->chatId, "message_id" => $messageIdToDelete]);
                }
    
                $this->fileHandler->saveTemporaryData($this->chatId, 'current_guide_folder_name', $folderName);
                $this->fileHandler->saveTemporaryData($this->chatId, 'current_guide_folder_parent_id', $parentId);
    
                $this->fileHandler->saveState($this->chatId, 'awaiting_guide_folder_description');
    
                $res = $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "✅ نام دسته بندی «{$folderName}» ذخیره شد. لطفاً <b>توضیحات</b> این دسته بندی را وارد کنید (اختیاری):",
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => 'بدون توضیحات', 'callback_data' => 'skip_guide_folder_description']],
                            [['text' => '🔙 بازگشت', 'callback_data' => 'cancel_guide_folder_creation']] // بازگشت به مرحله نام
                        ]
                    ])
                ]);
                if (isset($res['result']['message_id'])) {
                    $this->fileHandler->saveMessageId($this->chatId, $res['result']['message_id']);
                }
                return;
            }
    
            if ($state === 'awaiting_guide_folder_description') {
                $description = trim($this->text);
                $this->deleteMessageWithDelay();
    
                $tempData = $this->fileHandler->getTemporaryData($this->chatId);
                $folderName = $tempData['current_guide_folder_name'] ?? null;
                $parentId = $tempData['current_guide_folder_parent_id'] ?? null;
    
                if (!$folderName) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطایی در شناسایی نام پوشه رخ داد. لطفاً از ابتدا شروع کنید."
                    ]);
                    $this->fileHandler->saveState($this->chatId, "null");
                    return;
                }
    
                $messageIdToDelete = $this->fileHandler->getMessageId($this->chatId);
                if ($messageIdToDelete) {
                    $this->sendRequest("deleteMessage", ["chat_id" => $this->chatId, "message_id" => $messageIdToDelete]);
                }
    
                $success = $this->db->createGuideFolder($folderName, $parentId, $description);
    
                if ($success) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "✅ دسته بندی راهنمای «{$folderName}» با موفقیت ایجاد شد.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => '🔙 بازگشت به مدیریت راهنما', 'callback_data' => ($parentId === null ? 'upload_guides_menu' : 'view_guide_folder_' . $parentId)]]
                            ]
                        ])
                    ]);
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطا در ایجاد دسته بندی راهنما. لطفاً دوباره تلاش کنید."
                    ]);
                }
                $this->fileHandler->clearTemporaryData($this->chatId); // پاک کردن اطلاعات موقت
                $this->fileHandler->saveState($this->chatId, "null");
                return;
            }
            if (str_starts_with($state, 'awaiting_guide_item_title_')) {
                $parentId = str_replace('awaiting_guide_item_title_', '', $state);
                $title = trim($this->text);
                $this->deleteMessageWithDelay();
    
                if (empty($title)) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ عنوان راهنما نمی تواند خالی باشد. لطفاً یک عنوان معتبر وارد کنید."
                    ]);
                    return;
                }
    
                // عنوان رو در FileHandler ذخیره می کنیم تا در مرحله بعدی آپلود استفاده بشه
                $this->fileHandler->saveTemporaryData($this->chatId, 'current_guide_title', $title);
                $this->fileHandler->saveTemporaryData($this->chatId, 'current_guide_folder_id', (int)$parentId);
    
                $messageIdToDelete = $this->fileHandler->getMessageId($this->chatId);
                if ($messageIdToDelete) {
                    $this->sendRequest("deleteMessage", ["chat_id" => $this->chatId, "message_id" => $messageIdToDelete]);
                }
    
                // تغییر state به انتظار برای فایل آپلود (حالا که عنوان رو گرفتیم)
                $this->fileHandler->saveState($this->chatId, 'awaiting_guide_item_upload'); // دیگه نیازی به parentId در state نیست
    
                $res = $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "✅ عنوان «{$title}» ذخیره شد. لطفاً فایل راهنمای خود را (عکس، ویدیو، متن، یا PDF) ارسال کنید:",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            // دکمه بازگشت به پوشه (که حالا اطلاعات رو از temporary data میگیره)
                            [['text' => '🔙 بازگشت', 'callback_data' => 'view_guide_folder_' . $parentId]]
                        ]
                    ])
                ]);
                if (isset($res['result']['message_id'])) {
                    $this->fileHandler->saveMessageId($this->chatId, $res['result']['message_id']);
                }
                return;
            }
    
            if ($state === 'awaiting_guide_item_upload') {
                $tempData = $this->fileHandler->getTemporaryData($this->chatId);
                $title = $tempData['current_guide_title'] ?? 'بدون عنوان';
                $parentId = $tempData['current_guide_folder_id'] ?? null;
                $this->deleteMessageWithDelay();
    
                if (!$parentId) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطایی در شناسایی پوشه راهنما رخ داد. لطفاً از ابتدا شروع کنید."
                    ]);
                    $this->fileHandler->saveState($this->chatId, "null");
                    return;
                }
    
                $caption = $this->message['caption'] ?? null;
                $fileId = null;
                $fileType = null;
    
                if (!empty($this->message['photo'])) {
                    $fileType = "photo";
                    $fileId = end($this->message['photo'])['file_id'];
                } elseif (!empty($this->message['video'])) {
                    $fileType = "video";
                    $fileId = $this->message['video']['file_id'];
                } elseif (!empty($this->message['document'])) {
                    $fileType = "document";
                    $fileId = $this->message['document']['file_id'];
                } elseif (!empty($this->text)) {
                    $fileType = "text";
                    $fileId = null;
                    $caption = $this->text; // اگر فقط متن باشه، متن رو به عنوان کپشن ذخیره میکنیم
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً یک فایل (عکس، ویدیو، PDF) یا متن معتبر ارسال کنید."
                    ]);
                    return;
                }
    
                if (empty($caption) && empty($fileId) && $fileType !== 'text') {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ مشکلی در دریافت فایل وجود دارد. لطفاً دوباره تلاش کنید."
                    ]);
                    return;
                }
    
                $messageIdToDelete = $this->fileHandler->getMessageId($this->chatId);
                if ($messageIdToDelete) {
                    $this->sendRequest("deleteMessage", ["chat_id" => $this->chatId, "message_id" => $messageIdToDelete]);
                }
    
                // حالا عنوان (title) رو هم به saveGuideItem ارسال میکنیم
                $success = $this->db->saveGuideItem($parentId, $title, $fileType, $fileId, $caption);
    
                if ($success) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "✅ راهنما با عنوان «{$title}» با موفقیت ذخیره شد. برای افزودن راهنمای دیگر در همین پوشه، فایل جدید ارسال کنید یا برای اتمام، روی دکمه بازگشت کلیک کنید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => '➕ افزودن راهنمای دیگر با عنوان جدید', 'callback_data' => 'set_guide_item_title_' . $parentId]], // اجازه آپلود بیشتر
                                [['text' => '🔙 بازگشت به دسته بندی', 'callback_data' => 'view_guide_folder_' . $parentId]]
                            ]
                        ])
                    ]);
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطا در ذخیره راهنما. لطفاً دوباره تلاش کنید."
                    ]);
                }
                // بعد از ذخیره موفقیت آمیز، اطلاعات موقت رو پاک می کنیم
                $this->fileHandler->clearTemporaryData($this->chatId);
                $this->fileHandler->saveState($this->chatId, "null"); // برمیگردیم به حالت عادی
                return;
            }
            if (str_starts_with($state, 'awaiting_guide_folder_new_name_')) {
                $folderId = str_replace('awaiting_guide_folder_new_name_', '', $state);
                $newName = trim($this->text);
                $this->deleteMessageWithDelay(); // پاک کردن پیام ورودی کاربر
    
                if (empty($newName)) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ نام جدید پوشه نمی تواند خالی باشد. لطفاً یک نام معتبر وارد کنید."
                    ]);
                    return;
                }
                $messageId = $this->fileHandler->getMessageId($this->chatId); // پیام مرحله سوال نام/توضیحات
    
                $success = $this->db->updateGuideFolderName($folderId, $newName);
    
                $parentFolderId = $this->db->getParentFolderId($folderId);
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => $success ? "✅ نام دسته بندی با موفقیت به «{$newName}» تغییر یافت." : "❌ خطا در تغییر نام دسته بندی.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به مدیریت', 'callback_data' => 'manage_guide_folder_' . ($parentFolderId ?? 'null')]]
                        ]
                    ])
                ]);
                $this->fileHandler->saveState($this->chatId, "null");
                return;
            } elseif (str_starts_with($state, 'awaiting_guide_folder_new_description_')) {
                $folderId = str_replace('awaiting_guide_folder_new_description_', '', $state);
                $newDescription = trim($this->text);
                $this->deleteMessageWithDelay(); // پاک کردن پیام ورودی کاربر
    
                $messageId = $this->fileHandler->getMessageId($this->chatId); // پیام مرحله سوال نام/توضیحات
    
                $success = $this->db->updateGuideFolderDescription($folderId, $newDescription);
    
                $parentFolderId = $this->db->getParentFolderId($folderId);
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id" => $messageId,
                    "text" => $success ? "✅ توضیحات دسته بندی با موفقیت به روزرسانی شد." : "❌ خطا در به روزرسانی توضیحات دسته بندی.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به مدیریت', 'callback_data' => 'manage_guide_folder_' . ($parentFolderId ?? 'null')]]
                        ]
                    ])
                ]);
                $this->fileHandler->saveState($this->chatId, "null");
                return;
            }
            if (str_starts_with($state, 'awaiting_edit_guide_item_name_')) {
                $itemId = str_replace('awaiting_edit_guide_item_name_', '', $state);
                $newName = trim($this->text);
                $this->deleteMessageWithDelay();
                if (empty($newName)) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ نام جدید نمی تواند خالی باشد."
                    ]);
                    return;
                }
                $success = $this->db->updateGuideItemName($itemId, $newName);
                $item = $this->db->getGuideItemById($itemId);
                $folderId = $item['folder_id'] ?? null;
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => $success ? "✅ نام راهنما با موفقیت تغییر کرد." : "❌ خطا در تغییر نام راهنما.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت', 'callback_data' => 'manage_guide_folder_' . ($folderId ?? 'null')]]
                        ]
                    ])
                ]);
                $this->fileHandler->saveState($this->chatId, "null");
                return;
            }
            if (str_starts_with($state, 'awaiting_edit_guide_item_caption_')) {
                $itemId = str_replace('awaiting_edit_guide_item_caption_', '', $state);
                $newCaption = trim($this->text);
                $this->deleteMessageWithDelay();
                $success = $this->db->updateGuideItemCaption($itemId, $newCaption);
                $item = $this->db->getGuideItemById($itemId);
                $folderId = $item['folder_id'] ?? null;
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => $success ? "✅ کپشن راهنما با موفقیت تغییر کرد." : "❌ خطا در تغییر کپشن راهنما.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت', 'callback_data' => 'manage_guide_folder_' . ($folderId ?? 'null')]]
                        ]
                    ])
                ]);
                $this->fileHandler->saveState($this->chatId, "null");
                return;
            }
            if (str_starts_with($state, 'awaiting_edit_guide_item_media_')) {
                $itemId = str_replace('awaiting_edit_guide_item_media_', '', $state);
                $caption = $this->message['caption'] ?? null;
                $fileId = null;
                $fileType = null;
                if (!empty($this->message['photo'])) {
                    $fileType = "photo";
                    $fileId = end($this->message['photo'])['file_id'];
                } elseif (!empty($this->message['video'])) {
                    $fileType = "video";
                    $fileId = $this->message['video']['file_id'];
                } elseif (!empty($this->message['document'])) {
                    $fileType = "document";
                    $fileId = $this->message['document']['file_id'];
                } elseif (!empty($this->text)) {
                    $fileType = "text";
                    $fileId = null;
                    $caption = $this->text;
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً یک فایل (عکس، ویدیو، PDF) یا متن معتبر ارسال کنید."
                    ]);
                    return;
                }
                $success = $this->db->updateGuideItemMedia($itemId, $fileType, $fileId, $caption);
                $item = $this->db->getGuideItemById($itemId);
                $folderId = $item['folder_id'] ?? null;
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => $success ? "✅ محتوای راهنما با موفقیت تغییر کرد." : "❌ خطا در تغییر محتوا.",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت', 'callback_data' => 'manage_guide_folder_' . ($folderId ?? 'null')]]
                        ]
                    ])
                ]);
                $this->fileHandler->saveState($this->chatId, "null");
                return;
            }
            if ($state === 'awaiting_withdraw_toman_bank_account') {
                $shabaNumberInput = trim($this->text);
                $walletData = $this->db->getUserWallet($this->chatId);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                $this->deleteMessageWithDelay();
    
                if (empty($walletData) || $walletData['available_toman'] <= 0) {
                    $this->sendRequest($messageId ? "editMessageText" : "sendMessage", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => "❌ موجودی تومان کافی برای برداشت ندارید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => 'بازگشت 🔙', 'callback_data' => 'go_to_menu']]
                            ]
                        ])
                    ]);
                    $this->fileHandler->saveState($this->chatId, "");
                    return;
                }
    
                $shabaNumberNormalized = strtoupper(str_replace(' ', '', $shabaNumberInput));
                if (!preg_match('/^IR\d{24}$/', $shabaNumberNormalized)) {
                    $this->sendRequest($messageId ? "editMessageText" : "sendMessage", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => "❌ شماره شبا وارد شده معتبر نیست. لطفاً شماره شبا را با پیشوند IR و مجموعاً ۲۶ کاراکتر وارد کنید (مثال: IR060170000000109945007001).\n\nمجدداً شماره شبا را ارسال کنید:",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => 'انصراف و بازگشت 🔙', 'callback_data' => 'wallet_menu']]
                            ]
                        ])
                    ]);
                    return;
                }
    
                if (!$this->isValidIranianIBAN($shabaNumberNormalized)) {
                    $this->sendRequest($messageId ? "editMessageText" : "sendMessage", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => "❌ شماره شبا وارد شده معتبر نیست. لطفاً شماره صحیح را وارد کنید.\n\nمجدداً شماره شبا را ارسال کنید:",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => 'انصراف و بازگشت 🔙', 'callback_data' => 'wallet_menu']]
                            ]
                        ])
                    ]);
                    return;
                }
    
                $amount = $walletData['available_toman'];
                $numericShabaPart = substr($shabaNumberNormalized, 2);
                $requestId = $this->db->createWithdrawRequest($this->chatId, $numericShabaPart, $amount, 'toman');
                if ($requestId) {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $this->chatId,
                        "message_id" => $messageId,
                        "text" => "✅ درخواست برداشت شما ثبت شد و جهت بررسی برای ادمین ارسال گردید. نتیجه به زودی به شما اطلاع داده خواهد شد.",
                    ]);
    
                    $requestData = [
                        'user_id' => $this->chatId,
                        'amount' => $amount,
                        'payment_detail' => $shabaNumberInput
                    ];
                    $this->notifyAdminsOfWithdrawalRequest($requestId, $requestData);
                } else {
                    $this->sendRequest("editMessageText", ["chat_id" => $this->chatId, "message_id" => $messageId, "text" => "❌ خطا در ثبت درخواست."]);
                }
    
                //            $this->sendRequest("editMessageText", [
                //                "chat_id" => $this->chatId,
                //                "message_id" => $messageId,
                //                "text" => "✅ درخواست برداشت ریالی با موفقیت ثبت شد.\n
                //                💵 مبلغ: " . number_format($amount) . " تومان\nشماره شبا: <code>{$shabaNumberInput}</code>\n\n
                //                📢 درخواست شما در کمتر از ۴۸ ساعت بررسی و واریز انجام خواهد شد. لطفاً صبور باشید.",
                //
                //                "parse_mode" => "HTML",
                //                "reply_markup" => json_encode([
                //                    "inline_keyboard" => [
                //                        [['text' => 'بازگشت به منو 🔙', 'callback_data' => 'wallet_menu']]
                //                    ]
                //                ])
                //            ]);
    
                $this->fileHandler->saveState($this->chatId, "");
            }
    
            if ($state === "awaiting_manual_withdrawal_userid") {
                $this->deleteMessageWithDelay();
                $input = trim($this->text);
                $targetUser = null;
    
                if (is_numeric($input)) {
                    $targetUser = $this->db->getUserByChatIdOrUsername((int)$input);
                } elseif (str_starts_with($input, "@")) {
                    $username = substr($input, 1);
                    $targetUser = $this->db->getUserByChatIdOrUsername($username);
                }
    
                if ($targetUser) {
                    $fullName = trim(($targetUser['first_name'] ?? '') . ' ' . ($targetUser['last_name'] ?? ''));
                    $fullName = $fullName !== '' ? $fullName : 'نام ثبت نشده';
                    $usernameDisplay = $targetUser['username'] ? '@' . $targetUser['username'] : 'ثبت نشده';
                    $joinDate = $targetUser['join_date'] ?? 'نامشخص';
    
                    $userInfoMessage = "📊 اطلاعات کاربر:\n\n"
                        . "👤 نام: {$fullName}\n"
                        . "🔗 یوزرنیم: {$usernameDisplay}\n"
                        . "🆔 آیدی عددی: `{$targetUser['chat_id']}`\n"
                        . "لطفاً مبلغ مورد نظر برای پرداخت را وارد کنید (به تومان):";
    
                    $this->fileHandler->saveState($this->chatId, "awaiting_manual_withdrawal_amount");
                    $this->fileHandler->saveManualWithdrawalContext($this->chatId, [
                        'user_id' => $targetUser['chat_id']
                    ]);
    
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => $userInfoMessage,
                        "parse_mode" => "HTML",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "❌ انصراف", "callback_data" => "cancel_withdrawal"]]
                            ]
                        ])
                    ]);
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
    
                        "text" => "❌ کاربری با آیدی وارد شده یافت نشد. لطفاً دوباره تلاش کنید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "❌ انصراف", "callback_data" => "cancel_withdrawal"]]
                            ]
                        ])
                    ]);
                }
                return;
            } elseif (str_starts_with($state, "awaiting_manual_withdrawal_amount")) {
                $context = $this->fileHandler->getManualWithdrawalContext($this->chatId);
                $targetUserId = $context['user_id'] ?? null;
    
    
                $this->deleteMessageWithDelay();
    
                $amount = intval($this->text);
                if ($amount <= 0) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ مبلغ وارد شده معتبر نیست. لطفاً یک عدد صحیح مثبت وارد کنید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "❌ انصراف", "callback_data" => "cancel_withdrawal"]]
                            ]
                        ])
                    ]);
                    return;
                }
    
                if (!$targetUserId) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطا در شناسایی کاربر. لطفاً دوباره تلاش کنید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "❌ انصراف", "callback_data" => "cancel_withdrawal"]]
                            ]
                        ])
                    ]);
                    return;
                }
    
                $oldContext = $this->fileHandler->getManualWithdrawalContext($this->chatId);
                $oldContext['amount'] = $amount;
                $this->fileHandler->saveManualWithdrawalContext($this->chatId, $oldContext);
                $this->fileHandler->saveState($this->chatId, "awaiting_manual_withdrawal_last_amount");
    
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "ایا کاربر تا کنون دریافتی  داشته است؟\n"
                        . "اگر کاربر تا کنون دریافتی نداشته است،عدد 0 و اگر دریافتی داشته است مبلغ را به تومان وارد کنید.\n",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [["text" => "❌ انصراف", "callback_data" => "cancel_withdrawal"]]
                        ]
                    ])
                ]);
    
                return;
            } elseif ($state == "awaiting_manual_withdrawal_last_amount") {
                $context = $this->fileHandler->getManualWithdrawalContext($this->chatId);
                $targetUserId = $context['user_id'] ?? null;
                $withdrawAmount = $context['amount'] ?? null;
    
                $this->deleteMessageWithDelay();
    
                // بررسی عدد واردشده
                $lastReceivedAmount = intval($this->text);
                if (!is_numeric($this->text) || $lastReceivedAmount < 0) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً فقط یک عدد صحیح مثبت یا 0 وارد کنید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "❌ انصراف", "callback_data" => "cancel_withdrawal"]]
                            ]
                        ])
                    ]);
                    return;
                }
    
                if (!$targetUserId || !$withdrawAmount) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطا در اطلاعات کاربر یا مبلغ برداشت. لطفاً از ابتدا تلاش کنید.",
                    ]);
                    return;
                }
    
                // ذخیره مبلغ قبلی
                $context['last_amount'] = $lastReceivedAmount;
                $this->fileHandler->saveManualWithdrawalContext($this->chatId, $context);
    
                // واکشی اطلاعات کاربر
                $userInfo = $this->db->getUserByUserId($targetUserId);
                $username = $userInfo['username'] ?? 'ندارد';
                $fullName = $userInfo['name'] ?? 'نامشخص';
                $wallet = $userInfo['wallet'] ?? 0;
    
                // متن نهایی برای ادمین
                $text = "📤 <b>درخواست ارسال دستی</b> ثبت شد:\n\n"
                    . "👤 نام: $fullName\n"
                    . "🆔 آیدی: <code>$targetUserId</code>\n"
                    . "🔗 نام کاربری: @$username\n"
                    . "💼 موجودی کیف پول: $wallet تومان\n"
                    . "💸 مبلغ برداشت: $withdrawAmount تومان\n"
                    . "📥 دریافتی قبلی: $lastReceivedAmount تومان";
    
    
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => $text,
                    "parse_mode" => "HTML",
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [["text" => "✅ تایید و پرداخت", "callback_data" => "confirm_manual_withdrawal_" . $targetUserId]],
                            [["text" => "❌ لغو", "callback_data" => "cancel_withdrawal_" . $targetUserId]]
                        ]
                    ])
                ]);
    
    
                // پایان مراحل
                $this->fileHandler->saveState($this->chatId, null);
    
                return;
            } elseif ($state == "awaiting_manual_withdrawal_receipt") {
                $context = $this->fileHandler->getManualWithdrawalContext($this->chatId);
                $targetUserId = $context['user_id'] ?? null;
                $withdrawAmount = $context['amount'] ?? null;
                $requestId = $context['request_id'] ?? null;
                $this->db->insertAdminToLeaderPayment($targetUserId, $requestId, $withdrawAmount);
    
    
                if (!$targetUserId) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطا در اطلاعات کاربر. لطفاً از ابتدا تلاش کنید."
                    ]);
                    return;
                }
    
                if (!isset($this->message['photo'])) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ لطفاً فقط یک تصویر به عنوان رسید کارت به کارت ارسال کنید.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [["text" => "❌ انصراف", "callback_data" => "go_to_menu"]]
                            ]
                        ])
                    ]);
                    return;
                }
    
                // گرفتن بزرگترین سایز عکس
                $photos = $this->message['photo'];
                $photo = end($photos); // آخرین مورد بزرگترین کیفیته
                $fileId = end($this->message['photo'])['file_id'];
    
                // ارسال به کاربر اصلی (اختیاری)
                $this->sendRequest("sendPhoto", [
                    "chat_id" => $targetUserId,
                    "photo" => $fileId,
                    "caption" => "✅ مبلغ موردنظر برای شما واریز شد. در صورت مشکل با پشتیبانی تماس بگیرید."
                ]);
    
                // پیام به ادمین
                $this->sendRequest("sendMessage", [
                    "chat_id" => $this->chatId,
                    "text" => "✅ رسید با موفقیت دریافت شد و برای کاربر ارسال شد.",
                ]);
                $this->db->createWalletTransaction(
                    $targetUserId,
                    -abs($withdrawAmount),
                    'toman',
                    false,
                    "برداشت وجه با تایید ادمین - درخواست #" . $requestId,
                    null,
                    true
                );
                $this->db->insertAdminToLeaderPayment($targetUserId, $requestId, $withdrawAmount);
                $receiptType = null;
                $receiptContent = null;
    
                if (!empty($this->message['photo'])) {
                    $receiptType = 'image';
                    $receiptContent = end($this->message['photo'])['file_id'];
                } elseif (!empty($this->message['text'])) {
                    $receiptType = 'text';
                    $receiptContent = $this->text;
                } else {
                    $this->sendRequest("sendMessage", ["chat_id" => $this->chatId, "text" => "❌ لطفاً رسید را به صورت عکس یا متن ارسال کنید."]);
                    return;
                }
    
                $this->db->savePaymentReceipt($requestId, $receiptContent, $receiptType);
    
                // پاک کردن state
                $this->fileHandler->saveState($this->chatId, null);
                $this->fileHandler->clearManualWithdrawalContext($this->chatId);
    
                return;
            } elseif ($state === 'awaiting_new_admin_id') {
                $adminInput = trim($this->text);
                $this->deleteMessageWithDelay();
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->deleteMessageWithDelay($messageId);
    
                // اگر یوزرنیم بود، آیدی عددی را بگیر
                if (strpos($adminInput, '@') === 0) {
                    $username = substr($adminInput, 1);
                    $adminUser = $this->db->getUserByUsername($username);
                    if (!$adminUser) {
                        $this->sendRequest("sendMessage", [
                            "chat_id" => $this->chatId,
                            "text" => "❌ کاربری با این یوزرنیم پیدا نشد."
                        ]);
                        return;
                    }
                    $adminId = $adminUser['chat_id'];
                } else {
                    $adminId = $adminInput;
                }
    
                $result = $this->db->addAdmin($adminId);
                if ($result) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "✅ ادمین جدید با موفقیت اضافه شد.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => '🔙 بازگشت به مدیریت ادمین ها', 'callback_data' => 'admins']]
                            ]
                        ])
                    ]);
                } else {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $this->chatId,
                        "text" => "❌ خطا در افزودن ادمین. شاید این کاربر قبلاً ادمین شده باشد.",
                        "reply_markup" => json_encode([
                            "inline_keyboard" => [
                                [['text' => '🔙 بازگشت به مدیریت ادمین ها', 'callback_data' => 'admins']]
                            ]
                        ])
                    ]);
                }
                $this->fileHandler->saveState($this->chatId, null);
                return;
            } elseif (str_starts_with($state, "awaiting_payment_receipt_")) {
                try {
                    $requestId = (int)str_replace("awaiting_payment_receipt_", "", $state);
    
                    $receiptType = null;
                    $receiptContent = null;
    
                    if (!empty($this->message['photo'])) {
                        $receiptType = 'image';
                        $receiptContent = end($this->message['photo'])['file_id'];
                    } elseif (!empty($this->message['text'])) {
                        $receiptType = 'text';
                        $receiptContent = $this->text;
                    } else {
                        $this->sendRequest("sendMessage", ["chat_id" => $this->chatId, "text" => "❌ لطفاً رسید را به صورت عکس یا متن ارسال کنید."]);
                        return;
                    }
    
                    $request = $this->db->getWithdrawRequestById($requestId);
    
                    if ($request) {
    
                        $this->db->savePaymentReceipt($requestId, $receiptContent, $receiptType);
                        $this->db->createWalletTransaction(
                            $request['user_id'],
                            -abs($request['amount']),
                            'toman',
                            false,
                            "برداشت وجه با تایید ادمین - درخواست #" . $requestId,
                            null,
                            true
                        );
                        $userMessage = "✅ درخواست برداشت وجه شما به مبلغ " . number_format($request['amount']) . " تومان با موفقیت انجام شد. \n\nرسید پرداخت:";
                        $this->sendRequest("sendMessage", ["chat_id" => $request['user_id'], "text" => $userMessage]);
                        if ($receiptType === 'image') {
                            $this->sendRequest("sendPhoto", ["chat_id" => $request['user_id'], "photo" => $receiptContent]);
                        } else {
                            $this->sendRequest("sendMessage", ["chat_id" => $request['user_id'], "text" => $receiptContent]);
                        }
    
                        $messageId = $this->fileHandler->getMessageId($this->chatId);
                        $this->db->insertAdminToLeaderPayment($request['user_id'], $requestId, $request['amount']);
                        $this->sendRequest("editMessageText", [
                            "chat_id" => $this->chatId,
                            "message_id" => $messageId,
                            "text" => "✅ رسید با موفقیت برای کاربر ارسال و مبلغ از حساب او کسر گردید."
                        ]);
    
                        // پاک کردن وضعیت
                        $this->fileHandler->saveState($this->chatId, "");
                    } else {
                        // لاگ خطا: درخواستی با این شناسه در دیتابیس یافت نشد
                        error_log("ERROR: Withdraw request with ID {$requestId} NOT FOUND in database.");
                        $this->sendRequest("sendMessage", ["chat_id" => $this->chatId, "text" => "خطا: درخواست برداشت یافت نشد."]);
                    }
                } catch (Exception $e) {
                    error_log("ERROR: Exception occurred in 'awaiting_payment_receipt' state: " . $e->getMessage());
                }
            } elseif ($state === 'awaiting_warning_user_id') {
                if (!$this->db->isAdmin($this->chatId)) {
                    return;
                }
    
                $userInput = trim($this->text);
                $this->deleteMessageWithDelay();
    
                $targetUser = $this->db->getUserByChatIdOrUsername($userInput);
                $mesageId = $this->fileHandler->getMessageId($this->chatId);
                if (!$targetUser) {
                    $this->sendRequest("editMessageText", [
                        "chat_id" => $this->chatId,
                        "message_id"   => $messageId,
                        "text" => "❌ کاربری با این شناسه یافت نشد. لطفاً دوباره تلاش کنید."
                    ]);
                    return; // ادمین در همین وضعیت باقی می ماند تا شناسه صحیح را وارد کند
                }
    
                $targetUserId = $targetUser['chat_id'];
    
                // تنظیم وضعیت برای دریافت متن/فایل هشدار
                $this->fileHandler->saveState($this->chatId, "awaiting_warning_message_{$targetUserId}");
    
                $userInfo = trim($targetUser['first_name'] . ' ' . $targetUser['last_name']);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id"   => $messageId,
                    "text" => "✅ کاربر «" . htmlspecialchars($userInfo) . "» یافت شد.\n\n" .
                        "📝 اکنون محتوای هشدار (متن، عکس، ویدیو یا فایل) را به همراه کپشن (اختیاری) ارسال کنید:",
                ]);
    
                // مرحله ۲: دریافت محتوای هشدار، ارسال به کاربر و ثبت در دیتابیس
            } elseif (str_starts_with($state, "awaiting_warning_message_")) {
                if (!$this->db->isAdmin($this->chatId)) {
                    return;
                }
    
                $targetUserId = (int) str_replace("awaiting_warning_message_", "", $state);
                $this->deleteMessageWithDelay();
    
                // ۱. تشخیص نوع پیام ارسالی ادمین
                $fileId = null;
                $fileType = null;
                $messageText = null;
    
                if (!empty($this->message['text'])) {
                    $fileType = 'text';
                    $messageText = $this->message['text'];
                } elseif (!empty($this->message['photo'])) {
                    $fileType = 'photo';
                    $fileId = end($this->message['photo'])['file_id'];
                    $messageText = $this->message['caption'] ?? '';
                } elseif (!empty($this->message['video'])) {
                    $fileType = 'video';
                    $fileId = $this->message['video']['file_id'];
                    $messageText = $this->message['caption'] ?? '';
                } elseif (!empty($this->message['document'])) {
                    $fileType = 'document';
                    $fileId = $this->message['document']['file_id'];
                    $messageText = $this->message['caption'] ?? '';
                } else {
                    $this->sendRequest("sendMessage", ["chat_id" => $this->chatId, "text" => "❌ نوع پیام پشتیبانی نمی شود. لطفاً متن، عکس یا فایل ارسال کنید."]);
                    return;
                }
    
                // ۲. ساخت پیام نهایی برای کاربر با هدر و دکمه پشتیبانی
                $supportUsername = "Arcbau"; // <-- در صورت نیاز، یوزرنیم پشتیبانی را اینجا تغییر دهید
                $keyboardForUser = json_encode([
                    "inline_keyboard" => [
                        [['text' => '📞 ارتباط با پشتیبانی', 'url' => "https://t.me/{$supportUsername}"]],
                    ]
                ]);
    
                $headerText = "⚠️ <b>اخطار از طرف تیم پشتیبانی</b> ⚠️\n\nکاربر گرامی،\n";
                $footerText = "\n\nلطفاً قوانین را مطالعه و رعایت فرمایید. تکرار تخلف منجر به مسدود شدن حساب کاربری شما خواهد شد.";
    
                // ۳. ارسال پیام هشدار به کاربر بر اساس نوع آن
                if ($fileType === 'text') {
                    $messageToSend = $headerText . "به شما به دلیل زیر اخطار داده می شود:\n<blockquote>" . htmlspecialchars($messageText) . "</blockquote>" . $footerText;
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $targetUserId,
                        "text" => $messageToSend,
                        "parse_mode" => "HTML",
                        "reply_markup" => $keyboardForUser
                    ]);
                } else { // برای فایل، عکس، ویدیو و ...
                    $caption = $headerText . ($messageText ? "<b>توضیحات ادمین:</b>\n<blockquote>" . htmlspecialchars($messageText) . "</blockquote>" : '') . $footerText;
    
                    $method = "send" . ucfirst($fileType);
                    $this->sendRequest($method, [
                        "chat_id" => $targetUserId,
                        $fileType => $fileId,
                        "caption" => $caption,
                        "parse_mode" => "HTML",
                        "reply_markup" => $keyboardForUser
                    ]);
                }
    
                // ۴. ثبت هشدار کامل در دیتابیس
                $this->db->logUserWarning($targetUserId, $this->chatId, $messageText, $fileId, $fileType);
    
                // ۵. پاک کردن وضعیت ادمین و ارسال پیام تایید
                $this->fileHandler->saveState($this->chatId, null);
                $messageId = $this->fileHandler->getMessageId($this->chatId);
    
                $warningCount = $this->db->countUserWarnings($targetUserId);
                $confirmationText = "✅ هشدار شما با موفقیت برای کاربر (<code>{$targetUserId}</code>) ارسال و در سیستم ثبت شد.";
                $confirmationText .= "\n\n⚠️ این کاربر تاکنون <b>" . $warningCount . "</b> هشدار دریافت کرده است.";
    
                $this->sendRequest("editMessageText", [
                    "chat_id" => $this->chatId,
                    "message_id"   => $messageId,
                    "text" => $confirmationText,
                    "parse_mode" => "HTML"
                ]);
            } elseif ($state === 'awaiting_block_user_id_add') {
                $this->deleteMessageWithDelay();
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $input     = trim($this->message['text']);
                $text      = "";
    
                if (strpos($input, "@") === 0) {
                    $username     = substr($input, 1);
                    $targetChatId = $this->db->getChatIdByUsername($username);
                    if ($targetChatId) {
                        $this->db->blockUser($targetChatId);
                        $text = "✅ کاربر با موفقیت مسدود شد.";
                    } else {
                        $text = "❌ کاربری با این آیدی پیدا نشد.";
                    }
                } else {
                    if ($input) {
                        $this->db->blockUser($input);
                        $text = "✅ کاربر با موفقیت مسدود شد.";
                    } else {
                        $text = "❌ کاربری با این آیدی عددی پیدا نشد.";
                    }
                }
    
                $this->sendRequest("editMessageText", [
                    "chat_id"      => $this->chatId,
                    "message_id"   => $messageId,
                    "text"         => $text,
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => 'بازگشت 🔙', 'callback_data' => 'block_user_menu']],
                        ],
                    ]),
                ]);
    
                $this->fileHandler->saveState($this->chatId, "null");
            } elseif ($state && str_starts_with($state, 'awaiting_user_edit_')) {
                $fieldKey = str_replace('awaiting_user_edit_', '', $state);
                $newValue = trim($this->text);
                $this->deleteMessageWithDelay();
    
                if ($fieldKey === 'phone' && !$this->isValidIranianMobile($newValue)) {
                    $this->sendRequest("sendMessage", [
                        "chat_id" => $chatId,
                        "text" => "⚠️ شماره موبایل وارد شده نامعتبر است. لطفاً یک شماره صحیح وارد کنید."
                    ]);
                    return;
                }
    
                $this->db->updateExplorerField($chatId, $fieldKey, $newValue);
    
                // پاک کردن وضعیت
                $this->fileHandler->saveState($chatId, null);
    
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $this->sendRequest("editMessageText", [
                    "chat_id" => $chatId,
                    "message_id" => $messageId,
                    "text" => "✅ اطلاعات شما با موفقیت به روزرسانی شد."
                ]);
    
                sleep(2);
    
                $this->handleCallbackQuery([
                    "data" => "user_info",
                    "message" => ["chat" => ["id" => $chatId], "message_id" => $messageId],
                    "id" => $this->callbackQueryId ?? ''
                ]);
    
                return;
            } elseif ($state === 'awaiting_block_user_id_remove') {
                $this->deleteMessageWithDelay();
                $messageId = $this->fileHandler->getMessageId($this->chatId);
                $input     = trim($this->message['text']);
                $text      = "";
    
                if (strpos($input, "@") === 0) {
                    $username     = substr($input, 1);
                    $targetChatId = $this->db->getChatIdByUsername($username);
                    if ($targetChatId) {
                        $this->db->unblockUser($targetChatId);
                        $text = "✅ کاربر با موفقیت از لیست مسدودشده ها خارج شد.";
                    } else {
                        $text = "❌ کاربری با این آیدی یافت نشد.";
                    }
                } else {
                    if ($input) {
                        $this->db->unblockUser($input);
                        $text = "✅ کاربر با موفقیت از لیست مسدودشده ها خارج شد.";
                    } else {
                        $text = "❌ شناسه عددی معتبری وارد نشده است.";
                    }
                }
    
                $this->sendRequest("editMessageText", [
                    "chat_id"      => $this->chatId,
                    "message_id"   => $messageId,
                    "text"         => $text,
                    "reply_markup" => json_encode([
                        "inline_keyboard" => [
                            [['text' => '🔙 بازگشت به منو', 'callback_data' => 'block_user_menu']],
                        ],
                    ]),
                ]);
    
                $this->fileHandler->saveState($this->chatId, "null");
            }
        }
}
