import { Message } from "~/types/chat"; import { ProductCardData } from "~/types/product"; /** * Generates a unique message ID * Uses timestamp + random suffix to avoid collisions */ function generateMessageId(): string { return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`; } /** * Creates a welcome message from bot data * @param content - Welcome message content * @returns Welcome message object */ export function createWelcomeMessage(content: string): Message { return { id: generateMessageId(), type: "welcome", timestamp: new Date(), content, }; } /** * Creates a user message * @param message - User's message text (what user typed, for display) * @param imageUrl - Optional image URL * @param repliedProduct - Optional product being replied to * @param fullMessage - Optional full message with context (for backend) * @returns User message object */ export function createUserMessage( message: string, imageUrl?: string, repliedProduct?: ProductCardData, fullMessage?: string ): Message { return { id: generateMessageId(), type: "user", content: fullMessage || message, // Full message for backend/storage displayContent: fullMessage ? message : undefined, // Clean message for UI (only set if different) timestamp: new Date(), repliedProduct: repliedProduct, imageUrl: imageUrl, }; } /** * Creates a loading message (thinking state) * @param content - Loading message text * @returns Loading message object */ export function createLoadingMessage(content: string): Message { return { id: generateMessageId(), type: "loading", content, timestamp: new Date(), }; } /** * Creates a bot message (Mori's response) * @param content - Bot's message text * @returns Bot message object */ export function createBotMessage(content: string): Message { return { id: generateMessageId(), type: "mori", content, timestamp: new Date(), }; } /** * Creates a product message * @param products - Array of product data * @param toolCallId - Optional tool call ID for tracking * @returns Product message object */ export function createProductMessage( products: ProductCardData[], toolCallId?: string ): Message { return { id: generateMessageId(), type: "products", content: "محصولات پیشنهادی:", timestamp: new Date(), products, tool_call_id: toolCallId || "", }; } /** * Creates a suggestion message * @param suggestions - Array of suggestion strings * @returns Suggestion message object */ export function createSuggestionMessage(suggestions: string[]): Message { return { id: generateMessageId(), type: "suggestions", content: "پیشنهادات:", timestamp: new Date(), suggestions, }; } /** * Creates an error message * @param content - Error message text * @returns Error message object (as bot message) */ export function createErrorMessage(content: string): Message { return { id: generateMessageId(), type: "mori", content, timestamp: new Date(), }; }