package com.red.circle.other.domain.gateway;

import com.red.circle.other.domain.redpacket.RoomRedPacket;
import com.red.circle.other.domain.redpacket.RoomRedPacketStatus;

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

/**
 * 房间红包网关
 */
public interface RoomRedPacketGateway {

    /**
     * 保存红包
     */
    void save(RoomRedPacket redPacket);

    /**
     * 根据红包ID查询
     */
    RoomRedPacket findByPacketId(String packetId);

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

    /**
     * 更新红包状态
     */
    void updateStatus(String packetId, RoomRedPacketStatus status);

    /**
     * 更新退款状态
     */
    void updateRefundStatus(String packetId, Integer refundStatus);

    /**
     * 查询过期且未退款的红包
     */
    List<RoomRedPacket> findExpiredAndNotRefunded(LocalDateTime now);

    /**
     * 查询房间红包列表（分页）
     */
    List<RoomRedPacket> findByRoomId(Long roomId, Integer current, Integer size);
}
