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

import com.red.circle.common.business.enums.SendPropsOrigin;
import com.red.circle.other.inner.model.dto.material.RoomThemeUserBackpackDTO;
import java.util.Collection;
import java.util.List;

/**
 * 用户房间主题背包 服务类.
 *
 * @author pengliang on 2023/6/6
 */
public interface RoomThemeBackpackClientService {

  /**
   * 获取用户主题背包
   *
   * @param userId 用户id
   * @return ignore
   */
  List<RoomThemeUserBackpackDTO> listByUserIdOrderByUseThemeDesc(Long userId);

  /**
   * 用户切换使用主题
   *
   * @param userId     用户id
   * @param useThemeId 主题id
   * @param isFree     true 免费，false 不免费
   */
  boolean switchUseTheme(Long userId, Long useThemeId, Boolean isFree);

  /**
   * 清空用户使用主题.
   *
   * @param userId 用户id
   */
  boolean cleanUseTheme(Long userId);

  /**
   * 获取用户主题信息 & 还在有效期之内的主题.
   *
   * @param userId  用户id
   * @param themeId 主题id
   */
  RoomThemeUserBackpackDTO getNotExpireTimeByUserAndThemeId(Long userId, Long themeId);

  /**
   * 发送房间主题.
   *
   * @param userId  用户id
   * @param themeId 主题id
   * @param days    发送天
   * @param origin  来源
   */
  void sendRoomTheme(Long userId,
      Long themeId,
      Integer days,
      SendPropsOrigin origin);

  /**
   * 获取用户正在使用主题.
   *
   * @param userId 用户id
   * @return ignore
   */
  RoomThemeUserBackpackDTO getByUserUseTheme(Long userId);

  /**
   * 获取一组用户正在使用背包.
   *
   * @param userIds 用户id集合
   * @return ignore
   */
  List<RoomThemeUserBackpackDTO> listByUserUseTheme(Collection<Long> userIds);

}
