package cn.axzo.msg.center.notices.manager.api;

import cn.axzo.msg.center.domain.entity.MNSMessage;
import cn.axzo.msg.center.domain.entity.MNSMessageRedo;
import cn.axzo.msg.center.notices.common.domain.MessageContext;
import cn.axzo.msg.center.notices.common.lang.Page;
import cn.axzo.msg.center.notices.manager.api.dto.request.MessageRedoQueryRequestDto;

import java.util.Date;

/**
 * 消息重试
 */
public interface MessageRedoManger {

  /**
   * 查询重试消息
   * @param requestDto
   * @return
   */
  Page<MNSMessageRedo> queryPageByMessageRedoQueryRequestDto(MessageRedoQueryRequestDto requestDto);

  /**
   * 根据重试单号和手机号查询重试消息信息
   * @param redoOrderNo
   * @param phoneNumber
   * @return
   */
  MNSMessageRedo queryMessageRedoByRedoOrderNoAndPhoneNumber(String redoOrderNo, String bizId, String phoneNumber);

  /**
   * 根据id更新重试状态
   * @param id
   * @param oldStatus
   * @param newStatus
   * @return
   */
  boolean updateMessageRedoStatusById(Long id, String oldStatus, String newStatus);

  /**
   * 通过message来新增
   * @param message
   */
  void saveByMessage(MNSMessage message);

  boolean lockMessage(MessageContext context, Long id);

  boolean updateRetry(Date retryAt, Long id);

  boolean updateExceptionToFail(Long id, String messageOrderNo);

  /**
   * 更新重试渠道回执id
   * @param id
   * @param bizId
   * @return
   */
  boolean updateMessageRedoChannelById(Long id, String bizId,String redoMessageNo);
}
