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

import com.njcn.msgpush.framework.common.pojo.PageResult;
import com.njcn.msgpush.module.push.controller.admin.retry.vo.MessageRetryQueueReqVO;
import com.njcn.msgpush.module.push.dal.dataobject.message.MessageRecordDO;
import com.njcn.msgpush.module.push.dal.dataobject.retry.MessageRetryQueueDO;

import java.time.LocalDateTime;
import java.util.List;

public interface MessageRetryQueueService {
    /**
     * 添加消息到重试队列
     *
     * @param message 消息
     */
    void saveOrUpdateRetryMessage(MessageRecordDO message);

    /**
     * 批量处理重试消息
     *
     * @param channel 渠道类型
     */
    void processRetryBatch(String channel);

    /**
     * 手动触发重试
     *
     * @param messageIds 消息ID列表
     * @return 是否成功
     */
    void manualRetry(List<String> messageIds);


    /**
     * 分页查询重试队列
     *
     * @param reqVO 查询条件
     * @return 分页结果
     */
    PageResult<MessageRetryQueueDO> getPage(MessageRetryQueueReqVO reqVO);

    /**
     * 更新重试信息
     *
     * @param messageId     消息ID
     * @param retryCount    重试次数
     * @param nextRetryTime 下次重试时间
     * @param lastRetryTime 最后重试时间
     * @param lastErrorMsg  最后错误信息
     */
    boolean updateRetryInfo(String messageId, int retryCount, LocalDateTime nextRetryTime, LocalDateTime lastRetryTime, String lastErrorMsg);

    boolean deleteByMessageIds(List<String> messageIds);
}
