package com.red.circle.other.inner.endpoint.material.props.api;

import com.red.circle.common.business.enums.SendPropsOrigin;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.model.dto.material.RoomThemeUserBackpackDTO;
import java.util.Collection;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

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

  String API_PREFIX = "/room/theme/client";


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

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

  /**
   * 清空用户使用主题.
   *
   * @param userId 用户id
   */
  @GetMapping("/cleanUseTheme")
  ResultResponse<Boolean> cleanUseTheme(@RequestParam("userId") Long userId);

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

  /**
   * 发送房间主题.
   *
   * @param userId  用户id
   * @param themeId 主题id
   * @param days    发送天
   * @param origin  来源
   */
  @GetMapping("/sendRoomTheme")
  ResultResponse<Void> sendRoomTheme(
      @RequestParam("userId") Long userId,
      @RequestParam("themeId") Long themeId,
      @RequestParam("days") Integer days,
      @RequestParam("origin") SendPropsOrigin origin
  );

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

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

}
