package cn.axzo.msg.center.inside.notices.service;


import cn.axzo.core.domain.PageResult;
import cn.axzo.msg.center.api.request.CmsMsgQueryReq;
import cn.axzo.msg.center.api.request.MessageModuleStatisticReq;
import cn.axzo.msg.center.api.request.MessagePageQueryReq;
import cn.axzo.msg.center.api.request.MessageReadAllReq;
import cn.axzo.msg.center.api.request.MessageStatisticReq;
import cn.axzo.msg.center.api.response.MessageDetailRes;
import cn.axzo.msg.center.api.response.MessageModuleStatisticRes;
import cn.axzo.msg.center.api.response.MessageNewRes;
import cn.axzo.msg.center.api.response.MessageStatisticRes;
import cn.axzo.msg.center.api.response.MessageTotalRes;
import cn.axzo.msg.center.domain.enums.UserTypeEnum;
import cn.azxo.framework.common.model.Page;

import java.util.List;

/**
 * @author : liuchuntao
 * @date : 2022/3/28 11:48
 * @description : 消息中心新接口相关
 */
public interface MessageCoreService {

    /**
     * 获取所有业务(按业务规则)合计未读消息数量
     *
     * @return
     */
    MessageTotalRes statisticsMsg(Long personId, Long identityId, UserTypeEnum userTypeEnum);


    PageResult<MessageNewRes> listMsgInfo(CmsMsgQueryReq req);


    PageResult<MessageNewRes> listMsgInfo4Trade(CmsMsgQueryReq req);

    /**
     * 个人消息按类型统计待办/未读数量
     *
     * @param request  个人信息及消息类型
     * @return 待办/未读数量
     */
    MessageStatisticRes countPersonMessage(MessageStatisticReq request);

    /**
     * 个人消息按模块分组统计
     *
     * @param request  个人信息及消息类型
     * @return 待展示的统计信息
     */
    List<MessageModuleStatisticRes> statisticPersonModuleMessage(MessageModuleStatisticReq request);

    /**
     * 将未读消息全部置为已读
     *
     * @param request  个人信息
     */
    void readAllMessages(MessageReadAllReq request);

    /**
     * 消息的分页查询
     *
     * @param request 分页查询相关入参
     * @return 消息的分页数据
     */
    Page<MessageDetailRes> pageQueryMessageRecords(MessagePageQueryReq request);
}
