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 com.njcn.msgpush.module.push.enums.RetryStrategyEnum;

import java.util.List;

public interface MessageRetryQueueService {
    /**
     * 添加消息到重试队列
     *
     * @param message  消息
     * @param strategy 重试策略
     */
    void addRetryMessage(MessageRecordDO message, RetryStrategyEnum strategy);

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

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

    /**
     * 移除重试记录
     *
     * @param messageId 消息ID
     * @return 是否成功
     */
    boolean removeRetryRecord(String messageId);

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