package com.red.circle.other.infra.database.rds.dao.redpacket;

import com.red.circle.other.infra.database.rds.entity.RoomRedPacketEntity;
import org.apache.ibatis.annotations.Param;

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

/**
 * 房间红包DAO
 */
public interface RoomRedPacketDAO {

    /**
     * 插入
     */
    int insert(RoomRedPacketEntity entity);

    /**
     * 根据红包ID查询
     */
    RoomRedPacketEntity selectByPacketId(@Param("packetId") String packetId);

    /**
     * 扣减红包（乐观锁）
     */
    int decrementPacket(@Param("packetId") String packetId, @Param("amount") Long amount);

    /**
     * 更新状态
     */
    int updateStatus(@Param("packetId") String packetId, @Param("status") Integer status);

    /**
     * 更新退款状态
     */
    int updateRefundStatus(@Param("packetId") String packetId, @Param("refundStatus") Integer refundStatus);

    /**
     * 查询过期且未退款的红包
     */
    List<RoomRedPacketEntity> selectExpiredAndNotRefunded(@Param("now") LocalDateTime now);

    /**
     * 根据房间ID查询红包列表
     */
    List<RoomRedPacketEntity> selectByRoomId(@Param("roomId") Long roomId, @Param("offset") Integer offset, @Param("size") Integer size);
}
