package com.yushu.system.service;

import java.util.List;
import com.yushu.system.domain.SysChatMessage;

/**
 * 对话消息Service接口
 * 
 * @author yushu
 * @date 2025-11-12
 */
public interface ISysChatMessageService 
{
    /**
     * 查询对话消息
     * 
     * @param messageId 对话消息主键
     * @return 对话消息
     */
    public SysChatMessage selectSysChatMessageByMessageId(Long messageId);

    /**
     * 查询对话消息列表
     * 
     * @param sysChatMessage 对话消息
     * @return 对话消息集合
     */
    public List<SysChatMessage> selectSysChatMessageList(SysChatMessage sysChatMessage);

    /**
     * 查询会话的消息列表
     * 
     * @param conversationId 会话ID
     * @param pageNum 页码
     * @param pageSize 页大小
     * @return 消息列表
     */
    public List<SysChatMessage> selectConversationMessages(String conversationId, Integer pageNum, Integer pageSize);

    /**
     * 新增对话消息
     * 
     * @param sysChatMessage 对话消息
     * @return 结果
     */
    public int insertSysChatMessage(SysChatMessage sysChatMessage);

    /**
     * 修改对话消息
     * 
     * @param sysChatMessage 对话消息
     * @return 结果
     */
    public int updateSysChatMessage(SysChatMessage sysChatMessage);

    /**
     * 批量删除对话消息
     * 
     * @param messageIds 需要删除的对话消息主键集合
     * @return 结果
     */
    public int deleteSysChatMessageByMessageIds(Long[] messageIds);

    /**
     * 删除对话消息信息
     * 
     * @param messageId 对话消息主键
     * @return 结果
     */
    public int deleteSysChatMessageByMessageId(Long messageId);

    /**
     * 发送消息
     * 
     * @param conversationId 会话ID
     * @param content 消息内容
     * @return 结果
     */
    public int sendMessage(String conversationId, String content);

    /**
     * 统计会话未读消息数
     * 
     * @param conversationId 会话ID
     * @return 未读消息数
     */
    public int countUnreadMessages(String conversationId);

    /**
     * 获取会话的最后一条消息
     * 
     * @param conversationId 会话ID
     * @return 最后一条消息
     */
    public SysChatMessage selectLastMessage(String conversationId);

    /**
     * 标记会话为已读
     * 
     * @param conversationId 会话ID
     * @return 结果
     */
    public int markConversationAsRead(String conversationId);

    /**
     * 增加用户的未读消息数
     * 
     * @param conversationId 会话ID
     * @param userId 用户ID
     * @return 结果
     */
    public int incrementUnreadCount(String conversationId, Long userId);
}
