package org.xyzh.ai.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.xyzh.common.dto.ai.TbAiMessage;

import java.util.List;

/**
 * @description 对话消息数据访问层
 * @filename AiMessageMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface AiMessageMapper extends BaseMapper<TbAiMessage> {

    /**
     * 插入消息
     */
    int insertMessage(TbAiMessage message);

    /**
     * 更新消息（动态更新非null字段）
     */
    int updateMessage(TbAiMessage message);

    /**
     * 逻辑删除消息
     */
    int deleteMessage(TbAiMessage message);

    /**
     * 根据ID查询消息
     */
    TbAiMessage selectMessageById(@org.apache.ibatis.annotations.Param("messageId") String messageId);

    /**
     * 根据会话ID查询消息列表（按时间正序）
     */
    List<TbAiMessage> selectMessagesByConversationId(
            @org.apache.ibatis.annotations.Param("conversationId") String conversationId
    );

    /**
     * 统计会话的消息数量
     */
    long countConversationMessages(@org.apache.ibatis.annotations.Param("conversationId") String conversationId);

    /**
     * 查询会话的最后一条消息
     */
    TbAiMessage selectLastMessage(@org.apache.ibatis.annotations.Param("conversationId") String conversationId);

    /**
     * 搜索消息内容（全文搜索）
     */
    List<TbAiMessage> searchMessagesByContent(
            @org.apache.ibatis.annotations.Param("userId") String userId,
            @org.apache.ibatis.annotations.Param("keyword") String keyword,
            @org.apache.ibatis.annotations.Param("conversationId") String conversationId,
            @org.apache.ibatis.annotations.Param("pageParam") org.xyzh.common.core.page.PageParam pageParam
    );

    /**
     * 统计搜索消息数量
     */
    long countSearchMessages(
            @org.apache.ibatis.annotations.Param("userId") String userId,
            @org.apache.ibatis.annotations.Param("keyword") String keyword,
            @org.apache.ibatis.annotations.Param("conversationId") String conversationId
    );

    /**
     * 统计会话的评分分布
     */
    List<java.util.Map<String, Object>> countMessageRatings(@org.apache.ibatis.annotations.Param("conversationId") String conversationId);

    /**
     * @description 查询对话消息列表
     * @param filter 过滤条件
     * @return List<TbAiMessage> 对话消息列表
     * @author yslg
     * @since 2025-10-15
     */
    List<TbAiMessage> selectAiMessages(TbAiMessage filter);
}
