package com.red.circle.mq.rocket.business.failmessage;

/**
 * RocketMQ 失败消息重试策略
 */
public class RocketMqFailMessageRetryStrategy {

    /**
     * 重试间隔：1分钟、5分钟、30分钟
     */
    private static final long[] RETRY_INTERVALS = {
            60 * 1000L,      // 第1次：1分钟后
            5 * 60 * 1000L,  // 第2次：5分钟后
            30 * 60 * 1000L  // 第3次：30分钟后
    };

    /**
     * 最大重试次数
     */
    public static final int MAX_RETRY_COUNT = 3;

    /**
     * 获取下次重试间隔
     *
     * @param retryCount 当前重试次数
     * @return 重试间隔（毫秒）
     */
    public static long getNextRetryInterval(int retryCount) {
        if (retryCount >= RETRY_INTERVALS.length) {
            return RETRY_INTERVALS[RETRY_INTERVALS.length - 1];
        }
        return RETRY_INTERVALS[retryCount];
    }

    /**
     * 计算下次重试时间
     *
     * @param retryCount 当前重试次数
     * @return 下次重试时间（毫秒时间戳）
     */
    public static long calculateNextRetryTime(int retryCount) {
        return System.currentTimeMillis() + getNextRetryInterval(retryCount);
    }
}
