package com.njcn.msgpush.module.push.service.message;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageRecordReqVO;
import com.njcn.msgpush.module.push.controller.admin.message.vo.MessageSendResultVO;
import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
import com.njcn.msgpush.module.push.enums.ChannelTypeEnum;
import com.njcn.msgpush.module.push.enums.RetrySourceEnum;

import java.util.List;

public interface MessageRecordService extends IService<MessageRecordDO> {

    /**
     * 发送消息（包括email、sms、app）
     *
     * @param reqVOList
     * @param systemName
     * @return channelTypeEnum
     * @return 发送的结果
     */
    List<MessageSendResultVO> send(List<MessageRecordReqVO> reqVOList, ChannelTypeEnum channelTypeEnum, String systemName);

    /**
     * 处理发送消息
     *
     * @param messageRecordDOList
     * @param retrySource
     * @return 发送的结果
     */
    List<MessageSendResultVO> processSendMsg(List<MessageRecordDO> messageRecordDOList, RetrySourceEnum retrySource);

    /**
     * 添加消息记录
     *
     * @param messageRecordSendReqVO
     * @return
     */
    boolean add(MessageRecordReqVO messageRecordSendReqVO);


    Page<MessageRecordDO> getPage(MessageRecordReqVO reqVO);

    /**
     * 更新消息记录重试次数
     *
     * @param id
     * @return
     */
    boolean updateRetryCount(Long id);
}
