package com.red.circle.other.app.inner.service.material.gift;

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.inner.model.cmd.sys.GiftQryCmd;
import com.red.circle.other.inner.model.dto.gift.UserGiftWallDTO;
import com.red.circle.other.inner.model.dto.material.GiftConfigDTO;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author pengliang on 2023/5/24
 */
public interface GiftConfigClientService {

  /**
   * 获取一个指定到礼物配置信息.
   */
  GiftConfigDTO getById(Long id);

  /**
   * 获取一批指定礼物信息.
   *
   * @param ids 编号id
   * @return ignore
   */
  Map<Long, GiftConfigDTO> mapByIds(Set<Long> ids);

  /**
   * 获取一组指定的礼物id.
   */
  List<GiftConfigDTO> listByIds(Set<Long> ids);

  /**
   * 获取cp礼物.
   */
  GiftConfigDTO getPairCpGive(SysOriginPlatformEnum sysOrigin);

  /**
   * 获取指定平台礼物信息.
   */
  List<GiftConfigDTO> listBySysOrigin(String sysOrigin);

  /**
   * 获取礼物分页信息.
   */
  PageResult<GiftConfigDTO> pageGiftInfo(GiftQryCmd giftQryCmd);

  /**
   * 修改礼物信息.
   */
  Boolean updateGift(GiftConfigDTO giftConfigDTO);

  /**
   * 移除礼物缓存.
   */
  void removeGiftCache();

  /**
   * 移除幸运礼物缓存.
   */
  void removeRemainingInventory(Long id, Long standardId);

  /**
   * 新增礼物.
   */
  Boolean saveGift(GiftConfigDTO giftConfig);

  /**
   * 上下架礼物.
   */
  Boolean switchDelStatus(Long id, Boolean status);

  /**
   * 礼物列表.
   */
  List<GiftConfigDTO> listByTab(String sysOrigin, String giftTab);

  /**
   * 礼物列表.
   */
  List<GiftConfigDTO> listByTabV2(GiftQryCmd giftQryCmd);

  /**
   * 获取赠送Cp组合礼物ID.
   */
  String getPairCpGiveGiftId(String sysOrigin);

  /**
   * 保存赠送Cp组合礼物ID.
   */
  void pushPairCpGiveGiftId(String sysOrigin, Long giftId);

  /**
   * 获取用户礼物墙
   */
  List<UserGiftWallDTO> listGiftWallByUser(Long userId);

  List<GiftConfigDTO> listByExpiredTime(Timestamp now);
}
