package com.njcn.msgpush.module.push.dal.mysql.retry;

import com.njcn.msgpush.framework.mybatis.core.mapper.BaseMapperX;
import com.njcn.msgpush.module.push.dal.dataobject.retry.MessageRetryQueueDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

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

@Mapper
public interface MessageRetryQueueMapper extends BaseMapperX<MessageRetryQueueDO> {

    /**
     * 查询需要重试的消息列表（按下次重试时间升序）
     *
     * @param currentTime 当前时间
     * @param limit       限制数量
     * @return 待重试消息列表
     */
    List<MessageRetryQueueDO> selectNeedRetryMessages(@Param("currentTime") LocalDateTime currentTime,
                                                      @Param("limit") int limit);

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

    /**
     * 删除成功的重试记录
     *
     * @param messageId 消息ID
     * @return 影响行数
     */
    int deleteByMessageId(@Param("messageId") String messageId);

    /**
     * 批量删除多个消息ID的重试记录
     *
     * @param messageIds 消息ID列表
     * @return 影响行数
     */
    int deleteByMessageIds(@Param("messageIds") List<String> messageIds);
}
