import MarkdownIt from "markdown-it" import { translateCurrentMessage } from "@/i18n/messages" export type MessageAssetPayload = { assetId: string filename?: string fileSize?: number mimeType?: string url?: string } const messageMarkdown = new MarkdownIt({ html: false, linkify: true, breaks: true, }) function t(key: string) { return translateCurrentMessage(key) } export function parseMessageAssetPayload(payload?: string): MessageAssetPayload | null { if (!payload?.trim()) { return null } try { const parsed = JSON.parse(payload) as MessageAssetPayload if (!parsed?.assetId?.trim()) { return null } return parsed } catch { return null } } export function renderIMMessageHTML(message: { messageType: string content: string payload?: string }) { if (message.messageType === "html") { return message.content } const asset = parseMessageAssetPayload(message.payload) if (message.messageType === "image") { if (asset?.url) { return `
${escapeHTML(t("kefu.imageSummary"))}
` } if (message.messageType === "attachment") { if (asset?.url) { const title = escapeHTML(asset.filename || message.content || t("kefu.attachmentSummary")) const meta = formatFileSize(asset.fileSize ?? 0) const metaHTML = meta ? `` : "" return `` } return `${escapeHTML(message.content || t("kefu.attachmentSummary"))}
` } return renderTextMessageHTML(message.content || "") } export function summarizeIMMessage(message: { messageType: string content: string payload?: string }) { if (message.messageType === "image") { return t("kefu.imageSummary") } if (message.messageType === "attachment") { const asset = parseMessageAssetPayload(message.payload) return asset?.filename?.trim() ? `${t("kefu.attachmentSummary")} ${asset.filename.trim()}` : t("kefu.attachmentSummary") } if (message.messageType === "html") { const text = extractTextFromHTML(message.content) if (text.trim()) { return text.substring(0, 100) } if (message.content.includes("