package com.yushu.system.mapper;

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

/**
 * 会话Mapper接口
 * 
 * @author yushu
 * @date 2025-11-12
 */
public interface SysConversationMapper 
{
    /**
     * 查询会话
     * 
     * @param conversationId 会话主键
     * @return 会话
     */
    public SysConversation selectSysConversationByConversationId(String conversationId);

    /**
     * 查询会话列表
     * 
     * @param sysConversation 会话
     * @return 会话集合
     */
    public List<SysConversation> selectSysConversationList(SysConversation sysConversation);

    /**
     * 获取用户的会话列表
     * 
     * @param userId 用户ID
     * @return 会话列表
     */
    public List<Map<String, Object>> selectUserConversationList(@Param("userId") Long userId);

    /**
     * 新增会话
     * 
     * @param sysConversation 会话
     * @return 结果
     */
    public int insertSysConversation(SysConversation sysConversation);

    /**
     * 修改会话
     * 
     * @param sysConversation 会话
     * @return 结果
     */
    public int updateSysConversation(SysConversation sysConversation);

    /**
     * 删除会话
     * 
     * @param conversationId 会话主键
     * @return 结果
     */
    public int deleteSysConversationByConversationId(String conversationId);

    /**
     * 批量删除会话
     * 
     * @param conversationIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteSysConversationByConversationIds(String[] conversationIds);

    /**
     * 创建私聊会话
     * 
     * @param user1Id 用户1ID
     * @param user2Id 用户2ID
     * @return 会话ID
     */
    public String createPrivateConversation(@Param("user1Id") Long user1Id, @Param("user2Id") Long user2Id);

    /**
     * 添加会话成员
     * 
     * @param conversationId 会话ID
     * @param userId 用户ID
     * @param userName 用户名
     * @param nickName 昵称
     * @return 结果
     */
    public int addConversationMember(@Param("conversationId") String conversationId, 
                                   @Param("userId") Long userId, 
                                   @Param("userName") String userName, 
                                   @Param("nickName") String nickName);

    /**
     * 更新会话成员备注
     * 
     * @param conversationId 会话ID
     * @param userId 用户ID
     * @param remarkName 备注名称
     * @return 结果
     */
    public int updateMemberRemark(@Param("conversationId") String conversationId, 
                                @Param("userId") Long userId, 
                                @Param("remarkName") String remarkName);

    /**
     * 更新会话最后消息
     * 
     * @param conversationId 会话ID
     * @param messageId 消息ID
     * @return 结果
     */
    public int updateLastMessage(@Param("conversationId") String conversationId, @Param("messageId") Long messageId);

    /**
     * 获取会话的所有成员ID
     * 
     * @param conversationId 会话ID
     * @return 成员ID列表
     */
    public List<Long> selectConversationMemberIds(@Param("conversationId") String conversationId);
}
