package com.yushu.system.mapper;

import java.util.List;
import com.yushu.system.domain.SysChatMessage;
import org.apache.ibatis.annotations.Param;

/**
 * 对话消息Mapper接口
 * 
 * @author yushu
 * @date 2025-11-12
 */
public interface SysChatMessageMapper 
{
    /**
     * 查询对话消息
     * 
     * @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(@Param("conversationId") String conversationId, 
                                                          @Param("pageNum") Integer pageNum, 
                                                          @Param("pageSize") Integer pageSize);

    /**
     * 查询会话的所有消息（不分页）
     * 
     * @param conversationId 会话ID
     * @return 消息列表
     */
    public List<SysChatMessage> selectAllConversationMessages(@Param("conversationId") String conversationId);

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

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

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

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

    /**
     * 统计会话未读消息数
     * 
     * @param conversationId 会话ID
     * @param userId 用户ID
     * @return 未读消息数
     */
    public int countUnreadMessages(@Param("conversationId") String conversationId, @Param("userId") Long userId);

    /**
     * 标记会话为已读
     * 
     * @param conversationId 会话ID
     * @param userId 用户ID
     * @return 结果
     */
    public int markConversationAsRead(@Param("conversationId") String conversationId, @Param("userId") Long userId);

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

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