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

import com.red.circle.common.business.core.enums.SysOriginPlatformEnum;
import com.red.circle.other.inner.enums.material.PropsCommodityType;
import com.red.circle.other.inner.model.dto.material.props.NobleVipAbility;
import com.red.circle.other.inner.model.dto.material.props.ProductProps;
import com.red.circle.other.inner.model.dto.material.props.PropsResources;
import com.red.circle.other.inner.model.dto.material.props.PropsStoreCommodity;
import com.red.circle.other.inner.model.dto.material.props.UserBackpackProps;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 道具仓库.
 *
 * @author pengliang on 2021/5/27
 */
public interface PropsStoreGateway {

  /**
   * 赠送随机道具.
   *
   * @param userId 用户id
   * @param days   天数
   * @return 背包数据
   */
  UserBackpackProps randomGiveawayCheapestProps(Long userId, Integer days);

  /**
   * 赠送指定道具.
   *
   * @param propsId 用户id
   * @param userId 用户id
   * @param days   天数
   * @return 背包数据
   */
  UserBackpackProps randomGiveawayCheapestPropsById(Long userId, Integer days, Long propsId);

  /**
   * 获取资源id.
   *
   * @param id 记录id
   * @return ignore
   */
  PropsResources getPropsResourcesById(Long id);

  /**
   * 获取道具商品.
   */
  PropsStoreCommodity getStoreCommodity(Long id);

  /**
   * 获取指定已发布类型商品列表.
   */
  List<PropsStoreCommodity> listReleaseStoreCommodity(SysOriginPlatformEnum sysOrigin,
      PropsCommodityType propsType);

  /**
   * 获取用户道具背包.
   *
   * @param userId    用户id
   * @param propsType 道具类型
   * @return 背包道具
   */
  List<UserBackpackProps> listUserPropsBackpack(Long userId, PropsCommodityType propsType);

  /**
   * 获取用户使用的贵族和靓号ID.
   *
   * @param userIds    用户id集合
   * @param propsTypes 道具类型
   * @return map
   */
  Map<Long, List<UserBackpackProps>> mapUserUsePropsByIdTypes(Set<Long> userIds,
      List<PropsCommodityType> propsTypes);

  /**
   * 用户使用的道具.
   *
   * @param userIds    用户id
   * @param propsTypes 道具类型
   * @return list
   */
  List<UserBackpackProps> listUserUsePropsByIdTypes(Set<Long> userIds,
      List<PropsCommodityType> propsTypes);

  /**
   * 用户使用的道具.
   *
   * @param userId 用户id
   * @return 背包道具
   */
  List<UserBackpackProps> listUserUseProps(Long userId);

  /**
   * 发货商品-道具.
   */
  void shippingProductProps(ProductProps productProps);

  /**
   * 获取贵族vip能力.
   *
   * @param sourceId 资源id
   * @return ignore
   */
  NobleVipAbility getNobleVipAbility(Long sourceId);

}
