package com.red.circle.other.infra.database.rds.service.dynamic;

import com.red.circle.framework.dto.PageQuery;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.framework.mybatis.service.BaseService;
import com.red.circle.other.infra.database.rds.entity.dynamic.DynamicGift;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.Map;

/**
 * 动态-礼物 服务类.
 *
 * @author pengshigang
 * @since 2025-01-29
 */
public interface DynamicGiftService extends BaseService<DynamicGift> {

  /**
   * 保存或更新动态礼物（累加数量）.
   *
   * @param dynamicContentId 动态内容ID
   * @param giftId           礼物ID
   * @param createUser       送礼用户
   * @param quantity         数量
   * @param giftUrl          礼物URL
   * @param unitPrice        单价
   */
  void saveOrUpdate(Long dynamicContentId, Long giftId, Long createUser, 
      Integer quantity, String giftUrl, BigDecimal unitPrice);

  /**
   * 保存动态礼物.
   * @param dynamicContentId 动态内容ID
   * @param giftId           礼物ID
   * @param createUser       送礼用户
   * @param quantity         数量
   * @param giftUrl          礼物URL
   * @param unitPrice        单价
   */
  void save1(Long dynamicContentId, Long giftId, Long createUser,
                    Integer quantity, String giftUrl, BigDecimal unitPrice);

  /**
   * 分页查询动态礼物列表（按更新时间倒序）.
   *
   * @param pageQuery 分页参数
   * @param contentId 动态内容ID
   */
  PageResult<DynamicGift> pageByUpdateTimeDesc(PageQuery pageQuery, Long contentId);

  /**
   * 统计动态礼物数量（所有用户送的总数）.
   *
   * @param contentIds 动态内容ID集合
   * @return key: contentId, value: 礼物总数
   */
  Map<Long, Long> mapGiftQuantity(Collection<Long> contentIds);

}
