
package com.tmerclub.cloud.im.service;

import com.tmerclub.cloud.api.auth.bo.UidInfoBO;

import com.tmerclub.cloud.api.multishop.bo.EsShopDetailBO;
import com.tmerclub.cloud.api.multishop.vo.ShopUserVO;
import com.tmerclub.cloud.api.platform.vo.SysUserVO;
import com.tmerclub.cloud.api.user.vo.UserApiVO;
import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.im.model.ImMsgBizUserHistory;
import com.tmerclub.cloud.im.vo.MessageInfoVO;
import com.tmerclub.cloud.im.vo.MsgItemVO;

/**
 * 店铺和用户历史聊天记录表
 *
 * @author tmerclub
 * @date 2021-08-25 13:58:56
 */
public interface ImMsgBizUserHistoryService {

    /**
     * 分页获取店铺和用户历史聊天记录表列表
     *
     * @param pageDTO 分页参数
     * @param sendType 发送类型
     * @param bizId 商家或平台id
     * @param employeeId 员工id
     * @param userId 用户id
     * @return 店铺和用户历史聊天记录表列表分页数据
     */
    PageVO<ImMsgBizUserHistory> pageBySendTypeBizIdUserId(PageDTO pageDTO, Integer sendType, Long bizId, Long employeeId, Long userId);

    /**
     * 根据店铺和用户历史聊天记录表id获取店铺和用户历史聊天记录表
     *
     * @param id 店铺和用户历史聊天记录表id
     * @return 店铺和用户历史聊天记录表
     */
    ImMsgBizUserHistory getById(Long id);

    /**
     * 根据店铺和用户历史聊天记录表参数获取店铺和用户历史聊天记录表
     *
     * @param imMsgBizUserHistory 店铺和用户历史聊天记录参数
     * @return 店铺和用户历史聊天记录表
     */
    ImMsgBizUserHistory getByParam(ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 保存店铺和用户历史聊天记录表
     *
     * @param imMsgBizUserHistory 店铺和用户历史聊天记录表
     */
    void save(ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 更新店铺和用户历史聊天记录表
     *
     * @param imMsgBizUserHistory 店铺和用户历史聊天记录表
     */
    void update(ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 根据店铺和用户历史聊天记录表id删除店铺和用户历史聊天记录表
     *
     * @param id 店铺和用户历史聊天记录表id
     */
    void deleteById(Long id);

    /**
     * 保存聊天记录
     *
     * @param sendType   聊天类型
     * @param bizId      平台或店铺id
     * @param userId     用户id
     * @param employeeId 员工id
     * @param type       消息类型
     * @param content    消息呢容
     * @param whoSend    发送人
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveHistory(Integer sendType, Long bizId, Long userId, Long employeeId, Integer type, String content, Integer whoSend);

    /**
     * 转换消息实体类
     *
     * @param user                用户信息
     * @param imMsgBizUserHistory 消息历史记录
     * @return 消息转换输出类
     */
    MsgItemVO getUserPlatformMsgItem(UserApiVO user, ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 转换消息实体类
     *
     * @param shopDetail     商家信息
     * @param user     用户信息
     * @param imMsgBizUserHistory 消息历史记录
     * @return 消息转换输出类
     */
    MsgItemVO getUserShopMsgItem(EsShopDetailBO shopDetail, UserApiVO user, ImMsgBizUserHistory imMsgBizUserHistory);

    /**
     * 获取用户与平台的聊天记录
     *
     * @param sysUser         平台信息
     * @param messageInfo   信息载体
     * @param bizId           平台或店铺id
     * @param userId          用户id
     * @param user 用户信息
     * @return 翻页聊天记录
     */
    PageVO<MsgItemVO> getUserPlatformHistory(SysUserVO sysUser, MessageInfoVO messageInfo, Long bizId, Long userId, UserApiVO user);

    /**
     * 获取用户与商家的聊天记录
     *
     * @param shopDetail      商家信息
     * @param messageInfo   信息载体
     * @param bizId           平台或店铺id
     * @param userId          用户id
     * @param user 用户信息
     * @return 翻页聊天记录
     */
    PageVO<MsgItemVO> getUserShopHistory(EsShopDetailBO shopDetail, MessageInfoVO messageInfo, Long bizId, Long userId, UserApiVO user);

    /**
     * 获取商家与用户的聊天记录
     *
     * @param uidInfoBO      商家信息
     * @param messageInfo 信息载体
     * @param user          用户信息
     * @param shopDetail          商家信息
     * @return 翻页聊天记录
     */
    PageVO<MsgItemVO> getShopUserHistory(UidInfoBO uidInfoBO, MessageInfoVO messageInfo, UserApiVO user, EsShopDetailBO shopDetail);

    /**
     * 获取平台与用户的聊天记录
     *
     * @param uidInfoBO       平台信息
     * @param sysUser       平台信息
     * @param messageInfo 信息载体
     * @param user          用户信息
     * @return 翻页聊天记录
     */
    PageVO<MsgItemVO> getPlatformUserHistory(UidInfoBO uidInfoBO, MessageInfoVO messageInfo, UserApiVO user, SysUserVO sysUser);

    /**
     * 用户标记已读
     *
     * @param userId        用户id
     * @return 消息历史记录实体类列表
     */
    int markUserPlatformRead(Long userId);

    /**
     * 用户标记已读
     *
     * @param bizId         平台或店铺id
     * @param userId        用户id
     * @return 消息历史记录实体类列表
     */
    int markUserShopRead(Long bizId, Long userId);

    /**
     * 标记用户发送消息已读(平台、商家端)
     *
     * @param sendType 发送类型 平台、商家
     * @param messageInfo 信息载体
     * @param uidInfoBO  平台信息
     * @param userId        用户id
     * @return 消息历史记录实体类列表
     */
    Integer markUserReadBySendType(Integer sendType, MessageInfoVO messageInfo, UidInfoBO uidInfoBO, Long userId);

    /**
     * 保存用户与平台的聊天记录
     *
     * @param messageInfo 信息载体
     * @param bizId         平台或店铺id
     * @param userId        用户id
     * @param employeeId
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveUserPlatformHistory(MessageInfoVO messageInfo, Long bizId, Long userId, Long employeeId);

    /**
     * 保存用户与商家的聊天记录
     *
     * @param messageInfo 信息载体
     * @param bizId         平台或店铺id
     * @param userId        用户id
     * @param employeeId    员工id
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveUserShopHistory(MessageInfoVO messageInfo, Long bizId, Long userId, Long employeeId);

    /**
     * 保存商家与用户的聊天记录
     *
     * @param messageInfo 信息载体
     * @param uidInfoBO      商家信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveShopUserHistory(MessageInfoVO messageInfo, UidInfoBO uidInfoBO);

    /**
     * 保存平台与用户的聊天记录
     *
     * @param messageInfo 信息载体
     * @param uidInfoBO       平台信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory savePlatformUserHistory(MessageInfoVO messageInfo, UidInfoBO uidInfoBO);

    /**
     * 商家切换客服系统提醒
     *
     * @param uidInfoBO        商家信息
     * @param shopUserVO 商家信息
     * @param user 用户信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory saveShopChangeEmployeeReply(UidInfoBO uidInfoBO, ShopUserVO shopUserVO, UserApiVO user);

    /**
     * 平台切换客服系统提醒
     * @param uidInfoBO  转接前平台客服信息
     * @param sysUser3        转接后平台客服信息
     * @param user 用户信息
     * @return 消息历史记录实体类
     */
    ImMsgBizUserHistory savePlatformChangeEmployeeReply(UidInfoBO uidInfoBO, SysUserVO sysUser3, UserApiVO user);
}
