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

import com.red.circle.other.inner.model.dto.material.props.NobleVipAbility;
import com.red.circle.other.inner.model.dto.material.props.PropsNobleVipAbilityDTO;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 贵族vip.
 *
 * @author pengliang on 2021/5/27
 */
public interface PropsNobleVipGateway {

  /**
   * 添加或修改贵族能力.
   */
  void addOrUpdateAbility(PropsNobleVipAbilityDTO dto);

  /**
   * 是否存在没有过期的vip.
   *
   * @param userId 用户id
   * @return true 存在 false 不存在
   */
  boolean existsNotExpiredNobleVip(Long userId);

  /**
   * 获取用户最大VIP 配置信息.
   *
   * @param userId 用户id
   */
  PropsNobleVipAbilityDTO getUserMaxAbilityDTO(Long userId);

  /**
   * 获取贵族vip能力.
   *
   * @param sourceId 资源id
   */
  PropsNobleVipAbilityDTO getAbilityDTO(Long sourceId);

  /**
   * 获取贵族vip能力.
   */
  List<PropsNobleVipAbilityDTO> listAbilityDTOByIds(Set<Long> sourceIds);

  /**
   * 获取贵族vip能力.
   */
  Map<Long, PropsNobleVipAbilityDTO> mapAbilityDTOByIds(Set<Long> sourceIds);

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

  /**
   * 获取贵族vip能力.
   *
   * @param sourceIds 资源id
   * @return ignore
   */
  List<NobleVipAbility> listAbility(Set<Long> sourceIds);

  /**
   * 获取贵族vip能力.
   *
   * @param sourceIds 资源id
   */
  Map<Long, NobleVipAbility> mapAbility(Set<Long> sourceIds);

}
