package com.sonic.pigeon.service;

import com.netease.nim.server.sdk.im.v2.message.response.QueryMessageResponseV2;
import com.sonic.pigeon.lib.bo.AttachBo;
import com.sonic.pigeon.lib.input.HistoryMessageInput;
import com.sonic.pigeon.lib.input.SendAiCustomerMessageInput;
import com.sonic.pigeon.lib.input.SendAiTextMessageInput;
import com.sonic.pigeon.lib.output.HistoryMessageOutput;

import java.util.List;
import java.util.Map;

public interface ImMessageService {

    /**
     * 发送AI文本消息
     * @param input
     */
    void sendAiToUserTextMessage(SendAiTextMessageInput input);

    /**
     * 发送AI文本消息
     * @param input
     */
    void sendUserToAiTextMessage(SendAiTextMessageInput input);

    /**
     * 发送Im自定义消息
     * @param input
     */
    void sendAiToUserCustomerMessage(SendAiCustomerMessageInput input);

    /**
     * 发送Im自定义消息
     * @param input
     */
    void sendUserToAiCustomerMessage(SendAiCustomerMessageInput input);

    /**
     * 发送用户消息
     * @param input
     */
    void sendUserTextMessage(SendAiTextMessageInput input);

    /**
     * 获取历史消息
     * @param input
     * @return
     */
    List<HistoryMessageOutput> getUserToAiHistoryMessage(HistoryMessageInput input);

    /**
     * 获取历史消息
     * @param input
     * @return
     */
    List<HistoryMessageOutput> getAiToUserHistoryMessage(HistoryMessageInput input);

    /**
     * 获取AI发送的消息明细
     * @param aiId
     * @param userId
     * @param messageServerId
     * @return
     */
    QueryMessageResponseV2 getAiSendMessage(Long aiId, Long userId, Long messageServerId);

    /**
     * 更新AI发送的图片消息
     * @param aiId
     * @param userId
     * @param messageServerId
     * @param attachment
     */
    void updateAiSendCustomImageMessage(Long aiId, Long userId, Long messageServerId, AttachBo attachment);

    /**
     * 更新AI发送的消息扩展字段，追加扩展内容
     * @param aiId
     * @param userId
     * @param messageServerId
     * @param extension
     */
    void updateAiSendMessage(Long aiId, Long userId, Long messageServerId, Map<String, Object> extension);
}
