<?php
// توابع کمکی مشترک سیستم تیکت - مورد استفاده در user_tickets.php و admin_tickets.php

/**
 * ساخت متن مکالمه تیکت برای نمایش در edit message
 * @param mysqli $connection
 * @param int $chatRowId شناسه تیکت
 * @return array|null ['text' => متن HTML, 'ticket' => آرایه اطلاعات تیکت]
 */
function buildTicketConversation($connection, $chatRowId) {
    $stmt = $connection->prepare("SELECT * FROM `chats` WHERE `id` = ?");
    $stmt->bind_param("i", $chatRowId);
    $stmt->execute();
    $ticket = $stmt->get_result()->fetch_assoc();
    $stmt->close();
    if (!$ticket) return null;

    $title = htmlspecialchars($ticket['title']);
    $category = htmlspecialchars($ticket['category']);
    $userId = $ticket['user_id'];

    // دریافت نام و مشخصات کاربر فرستنده تیکت
    $stmtUser = $connection->prepare("SELECT `name`, `username` FROM `users` WHERE `userid` = ?");
    $stmtUser->bind_param("i", $userId);
    $stmtUser->execute();
    $uRow = $stmtUser->get_result()->fetch_assoc();
    $stmtUser->close();

    $uName = htmlspecialchars($uRow['name'] ?? "کاربر بی‌نام");
    $uUsername = (!empty($uRow['username']) && $uRow['username'] != "ندارد") ? " (@" . htmlspecialchars($uRow['username']) . ")" : "";

    // هدر تیکت همراه با اطلاعات کامل کاربر
    $text = "🎫 <b>تیکت #{$chatRowId}</b>\n";
    $text .= "👤 <b>کاربر:</b> {$uName} {$uUsername}\n";
    $text .= "🆔 <b>آیدی:</b> <code>{$userId}</code>\n";
    $text .= "💬 <b>عنوان:</b> {$title}\n";
    $text .= "📂 <b>دسته‌بندی:</b> {$category}\n";
    $text .= "━━━━━━━━━━━━━━\n\n";

    // پیام‌های مکالمه
    $stmt = $connection->prepare("SELECT * FROM `chats_info` WHERE `chat_id` = ? ORDER BY `sent_date` ASC");
    $stmt->bind_param("i", $chatRowId);
    $stmt->execute();
    $messages = $stmt->get_result();
    $stmt->close();

    $hasMessages = false;
    while ($msg = $messages->fetch_assoc()) {
        $hasMessages = true;
        $sender = (strtoupper($msg['msg_type']) == "USER") ? "👤 کاربر" : "👮 پشتیبانی";
        $textVal = $msg['text'];

        // بررسی فایل ارسالی و اضافه کردن لینک دانلود فایل
        $fileData = json_decode($textVal, true);
        if (is_array($fileData) && isset($fileData['file_id'])) {
            $fType = $fileData['file_type'] ?? 'فایل';
            $fCaption = !empty($fileData['caption']) ? " - " . htmlspecialchars($fileData['caption']) : "";
            switch ($fType) {
                case 'photo': $typeName = 'تصویر'; break;
                case 'video': $typeName = 'ویدیو'; break;
                case 'voice': $typeName = 'وویس'; break;
                default: $typeName = 'فایل'; break;
            }
            $textVal = "📎 [{$typeName}{$fCaption}] /dlPic" . $msg['id'];
        } else {
            $textVal = htmlspecialchars($textVal);
        }

        $text .= "<b>{$sender}:</b> <i>{$textVal}</i>\n";
    }

    if (!$hasMessages) {
        $text .= "<i>(هنوز پیامی ارسال نشده)</i>\n";
    }

    return ['text' => $text, 'ticket' => $ticket];
}

/**
 * ویرایش پیام مکالمه هر دو طرف (کاربر و ادمین) و بروزرسانی message_id ها
 * @param mysqli $connection
 * @param int $chatRowId شناسه تیکت
 * @param int $adminChatId آیدی عددی ادمین
 * @param bool $showCloseBtn نمایش دکمه بستن تیکت
 * @param string $senderType نوع فرستنده آخرین پیام ('USER' یا 'ADMIN')
 */
function updateConversationMessages($connection, $chatRowId, $adminChatId, $showCloseBtn = true, $senderType = 'USER') {
    $conv = buildTicketConversation($connection, $chatRowId);
    if (!$conv) return;

    $ticket = $conv['ticket'];
    $convText = $conv['text'];
    $userId = $ticket['user_id'];
    $userMsgId = $ticket['user_msg_id'] ?? null;
    $adminMsgId = $ticket['admin_msg_id'] ?? null;

    // دکمه‌های سمت کاربر
    $userBtns = [
        [
            ['text' => 'پاسخ در ربات 📝', 'callback_data' => "replySupport_{$chatRowId}"],
            getMiniAppBtn('مشاهده در مینی‌اپ 📱', "tickets-{$chatRowId}")
        ]
    ];
    if ($showCloseBtn) {
        $userBtns[] = [['text' => 'بستن تیکت 🗳', 'callback_data' => "closeTicket_{$chatRowId}"]];
    }
    $userKeys = json_encode(['inline_keyboard' => $userBtns]);

    // دکمه‌های سمت ادمین
    $adminBtns = [
        [
            ['text' => 'پاسخ در ربات ✍️', 'callback_data' => "reply_{$chatRowId}"],
            getMiniAppBtn('مشاهده در مینی‌اپ 📱', "tickets-{$chatRowId}")
        ]
    ];
    if ($showCloseBtn) {
        $adminBtns[] = [['text' => 'بستن تیکت 🔒', 'callback_data' => "closeTicket_{$chatRowId}"]];
    }
    $adminKeys = json_encode(['inline_keyboard' => $adminBtns]);

    // تغییر وضعیت تیکت به باز (0) در صورت ارسال پیام جدید
    if ($ticket['state'] == 2) {
        $reopenStmt = $connection->prepare("UPDATE `chats` SET `state` = 0 WHERE `id` = ?");
        $reopenStmt->bind_param("i", $chatRowId);
        $reopenStmt->execute();
        $reopenStmt->close();
    }

    // ویرایش یا ارسال پیام مکالمه کاربر
    if ($userMsgId) {
        $result = editText($userMsgId, $convText, $userKeys, "HTML", $userId);
        if (!$result || (isset($result->ok) && !$result->ok)) {
            $newMsg = sendMessage($convText, $userKeys, "HTML", $userId);
            $userMsgId = $newMsg->result->message_id ?? null;
        }
    } else {
        $newMsg = sendMessage($convText, $userKeys, "HTML", $userId);
        $userMsgId = $newMsg->result->message_id ?? null;
    }

    // ارسال نوتیفیکیشن اختصاصی برای کاربر در صورت پاسخ ادمین
    if ($senderType === 'ADMIN') {
        $lastMsgStmt = $connection->prepare("SELECT * FROM `chats_info` WHERE `chat_id` = ? AND `msg_type` = 'ADMIN' ORDER BY `id` DESC LIMIT 1");
        $lastMsgStmt->bind_param("i", $chatRowId);
        $lastMsgStmt->execute();
        $lastAdminMsg = $lastMsgStmt->get_result()->fetch_assoc();
        $lastMsgStmt->close();

        if ($lastAdminMsg) {
            $textVal = $lastAdminMsg['text'];
            $fileData = json_decode($textVal, true);
            if (is_array($fileData) && isset($fileData['file_id'])) {
                $fCaption = !empty($fileData['caption']) ? htmlspecialchars($fileData['caption']) : "";
                $textFormatted = "[ارسال فایل] " . $fCaption;
            } else {
                $textFormatted = htmlspecialchars($textVal);
                $textFormatted = preg_replace('/(vless|vmess|trojan|ss):\/\/[^\s]+/i', '<code>$0</code>', $textFormatted);
            }

            $notifyText = "💌 <b>تیکت شما توسط پشتیبانی پاسخ داده شد 😍</b>\n\n" .
                          "💬 <b>موضوع تیکت:</b> " . htmlspecialchars($ticket['title']) . "\n" .
                          "📂 <b>دسته‌بندی:</b> " . htmlspecialchars($ticket['category']) . "\n\n" .
                          "✍️ <b>پاسخ ادمین:</b>\n" .
                          "<blockquote><i>" . $textFormatted . "</i></blockquote>";

            $notifyKeys = json_encode(['inline_keyboard' => [
                [
                    ['text' => 'پاسخ در ربات 📝', 'callback_data' => "replySupport_{$chatRowId}"],
                    getMiniAppBtn('ادامه در مینی‌اپ 📱', "tickets-{$chatRowId}")
                ],
                [
                    ['text' => "بستن تیکت 🗳", 'callback_data' => "closeTicket_{$chatRowId}"]
                ]
            ]]);

            sendMessage($notifyText, $notifyKeys, "HTML", $userId);
        }
    }

    // ارسال نوتیفیکیشن به ادمین در صورت پاسخ کاربر
    if ($senderType === 'USER') {
        $lastMsgStmt = $connection->prepare("SELECT * FROM `chats_info` WHERE `chat_id` = ? AND `msg_type` = 'USER' ORDER BY `id` DESC LIMIT 1");
        $lastMsgStmt->bind_param("i", $chatRowId);
        $lastMsgStmt->execute();
        $lastUserMsg = $lastMsgStmt->get_result()->fetch_assoc();
        $lastMsgStmt->close();

        if ($lastUserMsg) {
            $textVal = $lastUserMsg['text'];
            $fileData = json_decode($textVal, true);
            if (is_array($fileData) && isset($fileData['file_id'])) {
                $fCaption = !empty($fileData['caption']) ? htmlspecialchars($fileData['caption']) : "";
                $textFormatted = "[ارسال فایل] " . $fCaption;
            } else {
                $textFormatted = htmlspecialchars($textVal);
                $textFormatted = preg_replace('/(vless|vmess|trojan|ss):\/\/[^\s]+/i', '<code>$0</code>', $textFormatted);
            }

            $adminNotifyText = "📩 <b>پاسخ جدید در تیکت #{$chatRowId}</b>\n\n" .
                               "👤 <b>کاربر:</b> <code>{$userId}</code>\n" .
                               "💬 <b>موضوع:</b> " . htmlspecialchars($ticket['title']) . "\n" .
                               "📂 <b>دسته‌بندی:</b> " . htmlspecialchars($ticket['category']) . "\n\n" .
                               "✍️ <b>متن پیام کاربر:</b>\n" .
                               "<blockquote><i>" . $textFormatted . "</i></blockquote>";

            $adminNotifyKeys = json_encode(['inline_keyboard' => [
                [
                    ['text' => 'پاسخ به تیکت ✍️', 'callback_data' => "reply_{$chatRowId}"],
                    getMiniAppBtn('مشاهده در مینی‌اپ 📱', "tickets-{$chatRowId}")
                ]
            ]]);

            sendMessage($adminNotifyText, $adminNotifyKeys, "HTML", $adminChatId);
        }
    }

    // ویرایش یا ارسال پیام مکالمه ادمین
    if ($adminMsgId) {
        $result = editText($adminMsgId, $convText, $adminKeys, "HTML", $adminChatId);
        if (!$result || (isset($result->ok) && !$result->ok)) {
            $newMsg = sendMessage($convText, $adminKeys, "HTML", $adminChatId);
            $adminMsgId = $newMsg->result->message_id ?? null;
        }
    } else {
        $newMsg = sendMessage($convText, $adminKeys, "HTML", $adminChatId);
        $adminMsgId = $newMsg->result->message_id ?? null;
    }

    // بروزرسانی message_id ها در دیتابیس
    $stmt = $connection->prepare("UPDATE `chats` SET `user_msg_id` = ?, `admin_msg_id` = ? WHERE `id` = ?");
    $stmt->bind_param("iii", $userMsgId, $adminMsgId, $chatRowId);
    $stmt->execute();
    $stmt->close();
}
