<?php
function getOrders($user_id, $page = 1, $limit = 1)
{
    global $pdo;
    $offset   = ($page - 1) * $limit;
    $hideDays = settings('resubscribe_hide_days', 5);
    $whereClause = "WHERE `status` = 'running'
                    AND `user_id` <> ?
                    AND NOT EXISTS (
                        SELECT 1 FROM `memberships` m
                        WHERE m.`user_id` = ?
                        AND m.`order_id` = `orders`.`order_id`
                    )
                    AND NOT EXISTS (
                        SELECT 1 FROM `memberships` m2
                        WHERE m2.`user_id` = ?
                        AND m2.`coins_received` > 0
                        AND m2.`joined_at` >= DATE_SUB(NOW(), INTERVAL $hideDays DAY)
                        AND m2.`channel_name` = `orders`.`channel_name`
                    )";
    $stmt = $pdo->prepare("SELECT COUNT(*) as total FROM `orders` $whereClause");
    $stmt->execute([$user_id, $user_id, $user_id]);
    $total = $stmt->fetch()->total;
    $query = "SELECT * FROM `orders`
              $whereClause
              ORDER BY `is_vip` DESC, (`boost_manual` > 0) DESC, `created_at` ASC
              LIMIT $limit OFFSET $offset";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$user_id, $user_id, $user_id]);
    $orders = $stmt->fetchAll();
    return ['orders' => $orders, 'total' => $total];
}


function getReportReasonText($code)
{
    $reasons = getReportReasons();
    return $reasons[$code] ?? 'نامشخص';
}


function getReportReasons()
{
    return [
        1 => 'محتوای نامناسب',
        2 => 'لینک خراب/منقضی',
        3 => 'کلاهبرداری/دروغ',
        4 => 'عدم تطابق موضوع',
        5 => 'اسکم/اسپم',
        6 => 'محتوای تکراری',
        7 => 'تبلیغات مزاحم',
        8 => 'توهین/نژادپرستی',
        9 => 'نقض قوانین',
        10 => 'سایر موارد'
    ];
}


function getDynamicReward($order)
{
    $baseReward = settings('cost_per_join', 0.5);
    $orderAgeHours = (time() - strtotime($order->created_at)) / 3600;
    $bonusPercent = 0;

if($orderAgeHours > 48) {
        $bonusPercent = 0.25; 
} elseif ($orderAgeHours > 24) {
        $bonusPercent = 0.10; 
}

    return $baseReward + ($baseReward * $bonusPercent);
}


function checkLoyaltyBonus($user_id)
{
    global $pdo;
    $stmt = $pdo->prepare("SELECT COUNT(*) FROM `memberships` WHERE `user_id` = ? AND DATE(`joined_at`) = CURDATE() AND `status` = 'active'");
    $stmt->execute([$user_id]);
    $todayCount = intval($stmt->fetchColumn());
    $milestones = [
        20  => 10,   
        50  => 25,  
        100 => 75   
    ];

foreach($milestones as $count => $bonus) {

if($todayCount == $count) {
            $stmt = $pdo->prepare("UPDATE `users` SET `coins` = `coins` + ? WHERE `user_id` = ?");
            $stmt->execute([$bonus, $user_id]);
            $msg = "🎊 *پاداش وفاداری!*\n\n" .
                   "تبریک! شما امروز به حد نصاب *$count* عضویت رسیدید.\n\n" .
                   "🎁 هدیه شما: *$bonus* سکه رایگان\n\n" .
                   "🔥 به موجودی شما اضافه شد. همینطور ادامه بدید!";
            sendMessage($user_id, $msg);
            break; 
}

}

}


function autoCancelOrderIfReported($order_id, $reasonText)
{
    global $pdo;
    $stmtCount = $pdo->prepare("SELECT COUNT(DISTINCT `user_id`) FROM `reports` WHERE `order_id` = ?");
    $stmtCount->execute([$order_id]);
    $reportersCount = intval($stmtCount->fetchColumn() ?? 0);

if($reportersCount < 5) {
        return;
}

    $stmtOrd = $pdo->prepare("SELECT * FROM `orders` WHERE `order_id` = ? LIMIT 1");
    $stmtOrd->execute([$order_id]);
    $order = $stmtOrd->fetch();

if(!$order) {
        return;
}


if(in_array($order->status, ['cancelled', 'completed'], true)) {
        return;
}

    $stmtCancel = $pdo->prepare("UPDATE `orders` SET `status` = 'cancelled', `finished_at` = NOW() WHERE `order_id` = ?");
    $stmtCancel->execute([$order_id]);
    $msg = "❌ سفارش شما لغو شد.\n\n" .
        "📦 سفارش: #{$order_id}\n" .
        "📝 دلیل: {$reasonText}";
    sendMessage($order->user_id, $msg);
}


if(isset($user->step) && strpos($user->step, 'report_description:') === 0 && $text && $text != "/start" && $text != "🔙 بازگشت به منو قبل") {
    $parts       = explode(':', $user->step);
    $order_id    = $parts[1];
    $reason_code = $parts[2];
    $reasonText  = getReportReasonText($reason_code);
    $finalReason = "$reasonText - $text";
    $stmtCheck = $pdo->prepare("SELECT id FROM `reports` WHERE `user_id` = ? AND `order_id` = ?");
    $stmtCheck->execute([$chat_id, $order_id]);

if(!$stmtCheck->fetch()) {
        $stmt = $pdo->prepare("INSERT INTO `reports` (`user_id`, `order_id`, `report_reason`, `created_at`) VALUES (?, ?, ?, NOW())");
        $stmt->execute([$chat_id, $order_id, $finalReason]);
        autoCancelOrderIfReported($order_id, $reasonText);
        $stmtOrd = $pdo->prepare("SELECT * FROM `orders` WHERE `order_id` = ?");
        $stmtOrd->execute([$order_id]);
        $ord    = $stmtOrd->fetch();
        $chLink = $ord ? ($ord->invite_link ?? "نامشخص") : "نامشخص";
        $logMsg = "🔔 *گزارش تخلف جدید*\n\n" .
            "👤 کاربر: *$chat_id*\n" .
            "🆔 سفارش: *$order_id*\n" .
            "🔗 لینک کانال: $chLink\n" .
            "📝 دلیل: *$reasonText*\n" .
            "📄 توضیحات: $text";
        sendLogChannel($logMsg);
}

    setStep($chat_id, 'none');
    $responseText = "✅ *گزارش شما ثبت شد*\n\n" .
        "با تشکر از همکاری شما در بهبود کیفیت خدمات.\n" .
        "تیم مدیریت به زودی این مورد را بررسی خواهد کرد. 🌹";
    $keyboard = [
        "inline_keyboard" => [
            [['text' => '🔙 بازگشت به منو قبل', 'callback_data' => "reload_earn_coins"]]
        ]
    ];
    sendMessage($chat_id, $responseText, json_encode($keyboard));
    die;
}


if($text == "💰 جمع آوری سکه") {
    $page   = 1;
    $result = getOrders($from_id, $page);
    $orders = $result['orders'];
    $total  = $result['total'];

if($total > 0 && !empty($orders)) {
        $order     = $orders[0];
        $userCoins = isset($user->coins) ? intval($user->coins) : 0;
        $reward    = getDynamicReward($order);
        $channelName  = $order->channel_name;
        $inviteLink   = $order->invite_link;
        $responseText = "💰 *جمع‌آوری سکه*\n\n" .
            "💎 موجودی سکه: *" . number_format($userCoins, 2) . "* سکه\n\n" .
            "📢 کانال: *$channelName*\n" .
            "🎁 پاداش عضویت: *" . number_format($reward, 2) . "* سکه" . "\n\n" .
            "🔗 لینک عضویت:\n$inviteLink\n\n" .
            "💡 *راهنمایی:*\n" .
            "1️⃣ روی لینک بالا کلیک کنید\n" .
            "2️⃣ عضو کانال شوید\n" .
            "3️⃣ دکمه «عضو شدم» را بزنید";
         $keyboard     = [
            "inline_keyboard" => [
                [['text' => '👈 عضو شدم 👉', 'callback_data' => "joined_order:{$order->order_id}:$page"]],
                [
                    ['text' => 'رد کردن ➡️', 'callback_data' => "skip_order:" . ($page + 1)],
                    ['text' => '🚫 گزارش تخلف', 'callback_data' => "report_order:{$order->order_id}"]
                ]
            ]
        ];
        sendMessage($chat_id, $responseText, json_encode($keyboard));
} else {
        $responseText = "❌ *سفارشی یافت نشد*\n\n" .
            "در حال حاضر سفارش فعالی برای انجام وجود ندارد.\n\n" .
            "لطفاً چند دقیقه دیگر مجدداً تلاش کنید.";
        $keyboard     = [
            "inline_keyboard" => [
                [['text' => '🔄 بارگذاری مجدد', 'callback_data' => "reload_earn_coins"]]
            ]
        ];
        sendMessage($chat_id, $responseText, json_encode($keyboard));
}

    die;
}


if(strpos($data, 'report_order:') === 0) {
    $order_id = substr($data, strlen('report_order:'));
    $stmt     = $pdo->prepare("SELECT * FROM `reports` WHERE `user_id` = ? AND `order_id` = ?");
    $stmt->execute([$chat_id, $order_id]);

if($stmt->fetch()) {
        answerCallbackQuery($query_id, "❌ شما قبلاً این سفارش را گزارش کرده‌اید.", true);
        die;
}

    $responseText = "⚠️ *گزارش تخلف*\n\n" .
        "لطفاً دلیل گزارش خود را از لیست زیر انتخاب کنید:\n\n" .
        "📝 این گزارش به تیم مدیریت ارسال خواهد شد و بررسی می‌شود.";
    $inline       = [];
    $row          = [];

foreach(getReportReasons() as $code => $label) {
        $row[] = ['text' => $label, 'callback_data' => "select_report_reason:$order_id:$code"];

if(count($row) == 2) {
            $inline[] = $row;
            $row      = [];
}

}


if(!empty($row)) {
        $inline[] = $row;
}

    $inline[] = [['text' => '🔙 بازگشت به منو قبل', 'callback_data' => "reload_earn_coins"]];
    $keyboard = ["inline_keyboard" => $inline];
    editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
    die;
}


if(strpos($data, 'select_report_reason:') === 0) {
    $parts       = explode(':', $data);
    $order_id    = $parts[1];
    $reason_code = $parts[2];
    setStep($chat_id, "report_description:$order_id:$reason_code");
    $responseText = "📝 *توضیحات تکمیلی*\n\n" .
        "لطفاً توضیحات خود را در مورد این تخلف بنویسید.\n" .
        "این کار به ما کمک می‌کند سریع‌تر رسیدگی کنیم.\n\n" .
        "اگر توضیحی ندارید، دکمه «رد کردن» را بزنید.";
    $keyboard     = [
        "inline_keyboard" => [
            [['text' => '⏭ رد کردن', 'callback_data' => "skip_report_desc:$order_id:$reason_code"]]
        ]
    ];
    editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
    die;
}


if(strpos($data, 'skip_report_desc:') === 0) {
    $parts       = explode(':', $data);
    $order_id    = $parts[1];
    $reason_code = $parts[2];
    $reasonText  = getReportReasonText($reason_code);
    $stmt        = $pdo->prepare("INSERT INTO `reports` (`user_id`, `order_id`, `report_reason`, `created_at`) VALUES (?, ?, ?, NOW())");
    $stmt->execute([$chat_id, $order_id, $reasonText]);
    autoCancelOrderIfReported($order_id, $reasonText);
    $stmtOrd = $pdo->prepare("SELECT * FROM `orders` WHERE `order_id` = ?");
    $stmtOrd->execute([$order_id]);
    $ord    = $stmtOrd->fetch();
    $chLink = $ord ? ($ord->invite_link ?? "نامشخص") : "نامشخص";
    $logMsg = "🔔 *گزارش تخلف جدید*\n\n" .
        "👤 کاربر: *$chat_id*\n" .
        "🆔 سفارش: *$order_id*\n" .
        "🔗 لینک کانال: $chLink\n" .
        "📝 دلیل: *$reasonText*\n" .
        "📄 توضیحات: (بدون توضیحات تکمیلی)";
    sendLogChannel($logMsg);
    setStep($chat_id, 'none');
    $responseText = "✅ *گزارش شما ثبت شد!*\n\nبا تشکر از همکاری شما. تیم مدیریت به زودی این مورد را بررسی خواهد کرد. 🌹";
    $keyboard     = [
        "inline_keyboard" => [
            [['text' => '💰 ادامه جمع‌آوری سکه', 'callback_data' => "reload_earn_coins"]]
        ]
    ];
    editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
    die;
}


if($data == 'reload_earn_coins') {
    $page   = 1;
    $result = getOrders($from_id, $page);
    $orders = $result['orders'];
    $total  = $result['total'];

if($total > 0 && !empty($orders)) {
        $order     = $orders[0];
        $userCoins = isset($user->coins) ? intval($user->coins) : 0;
        $reward    = settings('cost_per_join', 0.5);
        $channelName  = $order->channel_name;
        $inviteLink   = $order->invite_link;
        $responseText = "💰 *جمع‌آوری سکه*\n\n" .
            "💎 موجودی سکه: *" . number_format($userCoins, 2) . "* سکه\n\n" .
            "📢 کانال: *$channelName*\n" .
            "🎁 پاداش عضویت: *" . number_format($reward, 2) . "* سکه" . "\n\n" .
            "🔗 لینک عضویت:\n$inviteLink\n\n" .
            "💡 *راهنمایی:*\n" .
            "1️⃣ روی لینک بالا کلیک کنید\n" .
            "2️⃣ عضو کانال شوید\n" .
            "3️⃣ دکمه «عضو شدم» را بزنید";
         $keyboard     = [
            "inline_keyboard" => [
                [['text' => '👈 عضو شدم 👉', 'callback_data' => "joined_order:{$order->order_id}:$page"]],
                [
                    ['text' => 'رد کردن ➡️', 'callback_data' => "skip_order:" . ($page + 1)],
                    ['text' => '🚫 گزارش تخلف', 'callback_data' => "report_order:{$order->order_id}"]
                ]
            ]
        ];
        editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
} else {
        $responseText = "❌ *سفارشی یافت نشد*\n\n" .
            "در حال حاضر سفارش فعالی برای انجام وجود ندارد.\n\n" .
            "لطفاً چند دقیقه دیگر مجدداً تلاش کنید.";
        $keyboard     = [
            "inline_keyboard" => [
                [['text' => '🔄 بارگذاری مجدد', 'callback_data' => "reload_earn_coins"]]
            ]
        ];
        editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
        answerCallbackQuery($query_id, "🔄 لیست بروزرسانی شد، اما سفارش جدیدی یافت نشد.", false);
}

    die;
}


if(strpos($data, 'skip_order:') === 0) {
    $page   = intval(substr($data, strlen('skip_order:')));
    $result = getOrders($from_id, $page);
    $orders = $result['orders'];
    $total  = $result['total'];

if(empty($orders)) {

if($total > 0) {
            $page   = 1;
            $result = getOrders($from_id, $page);
            $orders = $result['orders'];
}

}


if(!empty($orders)) {
        $order     = $orders[0];
        $userCoins = isset($user->coins) ? intval($user->coins) : 0;
        $reward    = getDynamicReward($order);
        $channelName  = $order->channel_name;
        $inviteLink   = $order->invite_link;
        $responseText = "💰 *جمع‌آوری سکه*\n\n" .
            "💎 موجودی سکه: *" . number_format($userCoins, 2) . "* سکه\n\n" .
            "📢 کانال: *$channelName*\n" .
            "🎁 پاداش عضویت: *" . number_format($reward, 2) . "* سکه" . "\n\n" .
            "🔗 لینک عضویت:\n$inviteLink\n\n" .
            "💡 *راهنمایی:*\n" .
            "1️⃣ روی لینک بالا کلیک کنید\n" .
            "2️⃣ عضو کانال شوید\n" .
            "3️⃣ دکمه «عضو شدم» را بزنید";
         $keyboard     = [
            "inline_keyboard" => [
                [['text' => '👈 عضو شدم 👉', 'callback_data' => "joined_order:{$order->order_id}:$page"]],
                [
                    ['text' => 'رد کردن ➡️', 'callback_data' => "skip_order:" . ($page + 1)],
                    ['text' => '🚫 گزارش تخلف', 'callback_data' => "report_order:{$order->order_id}"]
                ]
            ]
        ];
        $keyboard     = [
            "inline_keyboard" => [
                [['text' => '👈 عضو شدم 👉', 'callback_data' => "joined_order:{$order->order_id}:$page"]],
                [
                    ['text' => 'رد کردن ➡️', 'callback_data' => "skip_order:" . ($page + 1)],
                    ['text' => '🚫 گزارش تخلف', 'callback_data' => "report_order:{$order->order_id}"]
                ]
            ]
        ];
        editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
} else {
        $responseText = "❌ *سفارشی یافت نشد*\n\n" .
            "در حال حاضر سفارش فعالی برای انجام وجود ندارد.\n\n" .
            "لطفاً چند دقیقه دیگر مجدداً تلاش کنید.";
        $keyboard     = [
            "inline_keyboard" => [
                [['text' => '🔄 بارگذاری مجدد', 'callback_data' => "reload_earn_coins"]]
            ]
        ];
        editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
}

    die;
}


if(strpos($data, 'joined_order:') === 0) {
    $parts       = explode(':', $data);
    $orderId     = isset($parts[1]) ? intval($parts[1]) : 0;
    $currentPage = isset($parts[2]) ? intval($parts[2]) : 1;

if($orderId <= 0 || $orderId > 99999) {
        answerCallbackQuery($query_id, "❌ شناسه سفارش نامعتبر است.", true);
        die;
}

    $pdo->beginTransaction();
    $stmt = $pdo->prepare("SELECT * FROM `orders` WHERE `order_id` = ? FOR UPDATE");
    $stmt->execute([$orderId]);
    $currentOrder = $stmt->fetch();

if($currentOrder) {
        $stmtCh = $pdo->prepare("SELECT * FROM `channels` WHERE `channel_name` = ? OR `invite_link` = ? LIMIT 1");
        $stmtCh->execute([$currentOrder->channel_name, $currentOrder->invite_link]);
        $channelInfo = $stmtCh->fetch();

if($channelInfo) {
            $channelIdentity = $channelInfo->channel_username ? "@{$channelInfo->channel_username}" : null;
}


if(!$channelIdentity && preg_match('/ble\.ir\/([a-zA-Z0-9_]+)/', $currentOrder->invite_link, $matches)) {

if(strpos($matches[1], '+') === false) {
                $channelIdentity = "@$matches[1]";
}

}

        $isMember = false;

if($channelIdentity) {
            $botMember  = getChatMember(strtolower($channelIdentity), BOT_ID);
            $botIsAdmin = false;

if(isset($botMember->result)) {
                $status = $botMember->result->status;

if($status == 'administrator' || $status == 'creator') {
                    $botIsAdmin = true;
}

}


if(!$botIsAdmin) {
                $remainingMembers = $currentOrder->members_count - $currentOrder->members_done;

if($remainingMembers > 0 && $currentOrder->status !== 'cancelled') {
                    $refundAmount = $remainingMembers * $currentOrder->coin_per_member;
                    $stmt         = $pdo->prepare("UPDATE `users` SET `coins` = `coins` + ? WHERE `user_id` = ?");
                    $stmt->execute([$refundAmount, $currentOrder->user_id]);
                    $stmt = $pdo->prepare("UPDATE `orders` SET `status` = 'cancelled', `finished_at` = NOW() WHERE `order_id` = ?");
                    $stmt->execute([$orderId]);
                    $pdo->commit();
                    $responseText = "❌ سفارش #$orderId شما لغو شد.\n\n" .
                        "دلیل: ربات دسترسی ادمین را از دست داده است.\n" .
                        "💰 مبلغ بازگشتی: " . intval($refundAmount) . " سکه";
                    sendMessage($currentOrder->user_id, $responseText);
} else {
                    $pdo->rollBack();
}

                answerCallbackQuery($query_id, "❌ این سفارش به دلیل مشکل فنی (عدم دسترسی ربات) لغو شد.", true);
                $responseText = "❌ این سفارش دیگر فعال نیست.";
                $keyboard     = [
                    "inline_keyboard" => [
                        [['text' => '🔄 بارگذاری مجدد', 'callback_data' => "reload_earn_coins"]]
                    ]
                ];
                editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
                die;
}

            $memberCheck = getChatMember(strtolower($channelIdentity), $from_id);

if(isset($memberCheck->result)) {
                $status = $memberCheck->result->status;

if(in_array($status, ['member', 'administrator', 'creator'])) {
                    $isMember = true;
}

}

}

        $pdo->commit();
} else {
        $pdo->rollBack();
}


if($isMember) {
        $channelName     = $currentOrder->channel_name;
        $channelUsername = $channelIdentity ? str_replace('@', '', $channelIdentity) : '';
        $reward          = getDynamicReward($currentOrder);
        try {
            $pdo->beginTransaction();
            $stmtOrderCheck = $pdo->prepare("SELECT `status`, `members_done`, `members_count` FROM `orders` WHERE `order_id` = ? FOR UPDATE");
            $stmtOrderCheck->execute([$orderId]);
            $orderStatus = $stmtOrderCheck->fetch();

if(!$orderStatus || $orderStatus->status !== 'running') {
                $pdo->rollBack();
                answerCallbackQuery($query_id, "❌ این سفارش دیگر فعال نیست.", true);
                die;
}


if($orderStatus->members_done >= $orderStatus->members_count) {
                $pdo->rollBack();
                answerCallbackQuery($query_id, "❌ این سفارش قبلاً تکمیل شده است.", true);
                die;
}

            $stmtCheck = $pdo->prepare("SELECT `id`, `coins_received`, `status` FROM `memberships` WHERE `user_id` = ? AND `order_id` = ? LIMIT 1 FOR UPDATE");
            $stmtCheck->execute([$chat_id, $orderId]);
            $existingMembership = $stmtCheck->fetch();

if($existingMembership && $existingMembership->status === 'active') {
                $pdo->rollBack();
                answerCallbackQuery($query_id, "⚠️ شما قبلاً برای این سفارش سکه دریافت کرده‌اید.", false);
                die;
}


if($existingMembership) {
                $previousStatus = $existingMembership->status;
                $stmt           = $pdo->prepare("UPDATE `memberships` SET `status` = 'active', `joined_at` = NOW() WHERE `id` = ?");
                $stmt->execute([$existingMembership->id]);
                $reward = 0;
} else {
                $stmt = $pdo->prepare("INSERT INTO `memberships` 
                    (`user_id`, `order_id`, `channel_username`, `channel_name`, `coins_received`, `status`, `joined_at`) 
                    VALUES (?, ?, ?, ?, ?, 'active', NOW())");
                $stmt->execute([$chat_id, $orderId, $channelUsername, $channelName, $reward]);
                $stmt = $pdo->prepare("UPDATE `orders` SET `members_done` = `members_done` + 1 WHERE `order_id` = ?");
                $stmt->execute([$orderId]);
}


if($reward > 0) {
                $stmt = $pdo->prepare("UPDATE `users` SET `coins` = `coins` + ? WHERE `user_id` = ?");
                $stmt->execute([$reward, $chat_id]);
}

            $stmtUpdated = $pdo->prepare("SELECT `status`, `members_count`, `members_done` FROM `orders` WHERE `order_id` = ?");
            $stmtUpdated->execute([$orderId]);
            $updatedOrder = $stmtUpdated->fetch();

if($updatedOrder && $updatedOrder->status == 'running' && intval($updatedOrder->members_done) >= intval($updatedOrder->members_count)) {
                $stmt = $pdo->prepare("UPDATE `orders` SET `status` = 'completed', `finished_at` = NOW() WHERE `order_id` = ? AND `status` = 'running'");
                $stmt->execute([$orderId]);

if($stmt->rowCount() > 0) {
                    $ownerId               = $currentOrder->user_id;
                    $requestedCount        = $updatedOrder->members_count;
                    $channelNameReport     = $currentOrder->channel_name;
                    $channelUsernameReport = $currentOrder->invite_link;
                    $stmtActive            = $pdo->prepare("SELECT COUNT(*) FROM `memberships` WHERE `order_id` = ? AND `status` = 'active'");
                    $stmtActive->execute([$orderId]);
                    $activeCount = intval($stmtActive->fetchColumn());
                    $stmtLeft    = $pdo->prepare("SELECT COUNT(*) FROM `memberships` WHERE `order_id` = ? AND `status` = 'left_refunded'");
                    $stmtLeft->execute([$orderId]);
                    $leftCount    = intval($stmtLeft->fetchColumn());
                    $joinedCount  = $activeCount;
                    $responseText = "✅ *سفارش شما تکمیل شد!*\n\n" .
                        "📋 شماره سفارش: #$orderId\n" .
                        "📢 کانال: $channelNameReport\n" .
                        "👥 تعداد ممبر درخواستی: $requestedCount ممبر\n" .
                        "〽️ تعداد ریزش: $leftCount ممبر\n\n" .
                        "با تشکر از اعتماد شما 🌹";
                    sendMessage($ownerId, $responseText);
                    $logMsg = "✅ *سفارش تکمیل شد*\n\n" .
                        "🆔 سفارش: #$orderId\n" .
                        "👤 کاربر: [$ownerId](uid:$ownerId)\n" .
                        "📢 کانال:" . $channelNameReport . " | " . $channelUsernameReport . "\n" .
                        "👥 تعداد درخواست: $requestedCount\n" .
                        "〽️ تعداد ریزش: $leftCount ممبر\n";
                    sendLogChannel($logMsg);
}

}

            $pdo->commit();
            checkLoyaltyBonus($chat_id);
            answerCallbackQuery($query_id, "✅ عضویت تایید شد! " . number_format($reward, 2) . " سکه به حساب شما اضافه شد.", false);
            $result = getOrders($from_id, $currentPage);
            $orders = $result['orders'];
            $total  = $result['total'];

if(empty($orders) && $total > 0) {
                $currentPage = 1;
                $result      = getOrders($from_id, $currentPage);
                $orders      = $result['orders'];
}


if(!empty($orders)) {
                $order    = $orders[0];
                $stmtUser = $pdo->prepare("SELECT coins FROM users WHERE user_id = ?");
                $stmtUser->execute([$chat_id]);
                $freshUser   = $stmtUser->fetch();
                $userCoins   = $freshUser ? $freshUser->coins : 0;
                $channelName = $order->channel_name;
                $inviteLink  = $order->invite_link;
                $nextReward  = getDynamicReward($order);
                $responseText = "💰 *جمع‌آوری سکه*\n\n" .
                    "💎 موجودی سکه: *" . number_format($userCoins, 2) . "* سکه\n\n" .
                    "📢 کانال: *$channelName*\n" .
                    "🎁 پاداش عضویت: *" . number_format($nextReward, 2) . "* سکه" . "\n\n" .
                    "🔗 لینک عضویت:\n$inviteLink\n\n" .
                    "💡 *راهنمایی:*\n" .
                    "1️⃣ روی لینک بالا کلیک کنید\n" .
                    "2️⃣ عضو کانال شوید\n" .
                    "3️⃣ دکمه «عضو شدم» را بزنید";
                $keyboard     = [
                    "inline_keyboard" => [
                        [['text' => '👈 عضو شدم 👉', 'callback_data' => "joined_order:{$order->order_id}:$currentPage"]],
                        [
                            ['text' => 'رد کردن ➡️', 'callback_data' => "skip_order:" . ($currentPage + 1)],
                            ['text' => '🚫 گزارش تخلف', 'callback_data' => "report_order:{$order->order_id}"]
                        ]
                    ]
                ];
                editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
} else {
                $responseText = "🚫 *لیست خالی*\n\nدر حال حاضر سفارشی موجود نیست. لطفاً دقایقی دیگر مجدداً بررسی کنید.";
                $keyboard     = [
                    "inline_keyboard" => [
                        [['text' => '🔄 بارگذاری مجدد', 'callback_data' => "reload_earn_coins"]]
                    ]
                ];
                editMessage($chat_id, $message_id, $responseText, json_encode($keyboard));
}

} catch (Exception $e) {

if($pdo->inTransaction()) {
                $pdo->rollBack();
}

            answerCallbackQuery($query_id, "❌ خطا در پردازش درخواست. لطفاً دوباره تلاش کنید.", true);
            die;
}

} else {
        answerCallbackQuery($query_id, "❌ شما هنوز عضو این کانال نشده‌اید.\nلطفاً ابتدا عضو شوید.");
}

    die;
}

