package com.fs.qw.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.fs.common.core.domain.R;
import com.fs.qw.domain.QwMsg;
import com.fs.qw.domain.QwSession;
import com.fs.qw.domain.QwUser;
import com.fs.qw.param.QwMsgSendParam;
import com.fs.qw.param.QwSessionParam;
import com.fs.qw.vo.QwContactListVO;
import com.fs.qw.vo.QwMessageListVO;
import com.fs.qwHookApi.vo.QwHookMsgVO;

import java.util.List;

/**
 * 企微聊天记录Service接口
 *
 * @author fs
 * @date 2024-12-17
 */
public interface IQwMsgService extends IService<QwMsg>
{
    /**
     * 查询企微聊天记录
     *
     * @param msgId 企微聊天记录主键
     * @return 企微聊天记录
     */
    public QwMsg selectQwMsgByMsgId(Long msgId);

    /**
     * 查询企微聊天记录列表
     *
     * @param qwMsg 企微聊天记录
     * @return 企微聊天记录集合
     */
    public List<QwMsg> selectQwMsgList(QwMsg qwMsg);

    /**
     * 新增企微聊天记录
     *
     * @param qwMsg 企微聊天记录
     * @return 结果
     */
    public int insertQwMsg(QwMsg qwMsg);

    /**
     * 修改企微聊天记录
     *
     * @param qwMsg 企微聊天记录
     * @return 结果
     */
    public int updateQwMsg(QwMsg qwMsg);

    /**
     * 批量删除企微聊天记录
     *
     * @param msgIds 需要删除的企微聊天记录主键集合
     * @return 结果
     */
    public int deleteQwMsgByMsgIds(Long[] msgIds);

    /**
     * 删除企微聊天记录信息
     *
     * @param msgId 企微聊天记录主键
     * @return 结果
     */
    public int deleteQwMsgByMsgId(Long msgId);


    /**
     * 查询消息列表
     * @param companyId
     * @return
     */
    List<QwMsg> getQwMessageList(Long companyId);
    /**
     * 查询会话
     * @param userId
     * @return
     */
    List<QwContactListVO> selectQwConversationByUserId(Long userId);

    List<QwMsg> selectQwMsgBySession(QwSessionParam param);

    List<QwMessageListVO> getQwMessageListBySession(QwSessionParam sessionId, List<QwMsg> list);

    R addQwMsg(QwHookMsgVO msgVo);

    R addAiMsg(QwSession session, String content, Integer msgType,QwUser user);

    List<QwUser> qwUserList(Long userId);

    R sendMsg(QwMsgSendParam param);

    QwContactListVO selectQwSessionBycId(String conversationId, Long qwUserId);
}
