import { TicketMessage } from "@frontend/kitui"; import { useUserStore } from "@root/stores/user"; interface UseMessageOwnershipProps { message: TicketMessage; sessionId?: string; ticketUserId?: string; } interface UseMessageOwnershipResult { isOwnMessage: boolean; isUnread: boolean; } export const useMessageOwnership = ({ message, sessionId, ticketUserId }: UseMessageOwnershipProps): UseMessageOwnershipResult => { const userId = useUserStore((state) => state.user?._id); // Определяем владельца сообщения const isOwnMessage = (sessionId || userId || ticketUserId) === message.user_id; // Сообщение считается непрочитанным если: // 1. Оно не моё // 2. Не отмечено как прочитанное (shown.me !== 1) // 3. Не является системным (ticket_id !== "111") const isUnread = !isOwnMessage && message.shown?.me !== 1 && message.ticket_id !== "111"; return { isOwnMessage, isUnread }; }; interface UseUnreadMessagesCountProps { messages: TicketMessage[]; sessionId?: string; ticketUserId?: string; } export const useUnreadMessagesCount = ({ messages, sessionId, ticketUserId }: UseUnreadMessagesCountProps): number => { const userId = useUserStore((state) => state.user?._id); // Считаем непрочитанные сообщения до первого прочитанного или своего let unreadCount = 0; for (const message of messages) { const isOwnMessage = (sessionId || userId || ticketUserId) === message.user_id; // Если это моё сообщение - прерываем подсчет if (isOwnMessage) { break; } // Если это чужое сообщение и оно не прочитано и не системное - увеличиваем счетчик if (!isOwnMessage && message.shown?.me !== 1 && message.ticket_id !== "111") { unreadCount++; } // Если встретили прочитанное сообщение - прерываем подсчет if (message.shown?.me === 1) { break; } } return unreadCount; };