// Copyright: © 2026 TWWIM UG. All rights reserved. (www.twwim.com)
import { Bot, User, Headset, AlertCircle } from 'lucide-react';
import { useTranslation } from '@/i18n/TranslationProvider';
import type { ConversationMessage } from '../lib/types';
interface MessageBubbleProps {
message: ConversationMessage;
}
function formatTime(date: Date | string, locale: string): string {
const d = typeof date === 'string' ? new Date(date) : date;
return d.toLocaleTimeString(locale, { hour: '2-digit', minute: '2-digit' });
}
export function MessageBubble({ message }: MessageBubbleProps) {
const { t, locale } = useTranslation();
if (message.role === 'system') {
return (
{t(`conversations.systemEvent.${message.content}`)}
);
}
const isVisitor = message.role === 'user';
const isOperator = message.role === 'operator';
const icon = isVisitor ? : isOperator ? : ;
const authorLabel = isVisitor
? t('conversations.author.visitor')
: isOperator
? message.operatorName ?? t('conversations.author.operator')
: t('conversations.author.assistant');
const bubbleColor = isVisitor
? 'bg-slate-100 text-slate-900'
: isOperator
? 'bg-violet-600 text-white'
: 'bg-emerald-600 text-white';
const alignment = isVisitor ? 'items-start' : 'items-end';
const bubbleAlignment = isVisitor ? 'self-start' : 'self-end';
const iconBg = isVisitor ? 'bg-slate-200 text-slate-600' : isOperator ? 'bg-violet-100 text-violet-700' : 'bg-emerald-100 text-emerald-700';
return (
{icon}
{authorLabel}
·
{formatTime(message.createdAt, locale)}
{message.content}
);
}