package com.red.circle.other.app.inner.service.user.user;

import com.red.circle.framework.core.dto.PageCommand;
import com.red.circle.framework.dto.PageResult;
import com.red.circle.other.inner.model.cmd.user.PhotoWallApprovalTableQryCmd;
import com.red.circle.other.inner.model.cmd.user.UpdateUserAvatarBatchCmd;
import com.red.circle.other.inner.model.cmd.user.UpdateUserNicknameBatchCmd;
import com.red.circle.other.inner.model.cmd.user.UserBaseInfoCmd;
import com.red.circle.other.inner.model.cmd.user.UserProfileListQryCmd;
import com.red.circle.other.inner.model.dto.user.PetRelationshipFriendDTO;
import com.red.circle.other.inner.model.dto.user.UserPhotoWallDTO;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import com.red.circle.other.inner.model.dto.user.UserRegisterInfoDTO;
import com.red.circle.other.inner.model.dto.user.UserRunProfileDTO;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 用户资料服务.
 *
 * @author pengliang on 2023/6/5
 */
public interface UserProfileClientService {

  /**
   * 移除用户缓存.
   */
  void removeCacheAll(Long userId);

  /**
   * 移除用户缓存-批量.
   */
  void removeCacheAll(Set<Long> userIds);

  /**
   * 移除用户缓存-批量.
   */
  void removeCache(Set<Long> userIds);

  /**
   * 获取用户资料.
   */
  UserProfileDTO getByUserId(Long userId);

  /**
   * 获取用户资料.
   */
  UserProfileDTO getByAccount(String sysOrigin, String account);

  /**
   * 获取账号信息.
   */
  List<UserProfileDTO> getByAccount(String account);

  /**
   * 根据账号获取用户基础信息
   */
  UserProfileDTO getByAccountOne(String account);

  /**
   * 分页查询用户资料
   */
  PageResult<UserProfileDTO> pageListQuery(UserProfileListQryCmd query);

  /**
   * 获取用户资料集合.
   */
  Map<Long, UserProfileDTO> mapByUserIds(Set<Long> userIds);

  /**
   * 根据id查询用户集合.
   */
  List<UserProfileDTO> listByUserId(Set<Long> userIds);

  /**
   * 查询同系统指定account一组用户.
   */
  List<UserProfileDTO> listByAccount(String sysOrigin, Set<String> userIds);

  /**
   * 注册信息映射.
   */
  Map<Long, UserRegisterInfoDTO> mapRegisterInfo(Set<Long> userIds);


  /**
   * 查询注册信息
   */
  UserRegisterInfoDTO getRegisterInfo(Long userId);

  /**
   * 获取用户的运行资料
   */
  UserRunProfileDTO getRunProfileById(Long id);

  /**
   * 获取用户语言.
   */
  String getLanguage(Long userId);

  /**
   * 系统来源.
   */
  String getSysOrigin(Long userId);

  /**
   * 切换用户使用的道具.
   */
  void switchUseProps(Long userId, Long propsId);

  /**
   * 移除使用道具.
   */
  void removeUseProps(Long userId, String propsType);

  /**
   * 获取宠物余额最高的top.
   *
   * @param userId  用户id
   * @param topSize 数量
   * @return ignore
   */
  List<PetRelationshipFriendDTO> listPetBeanTop(Long userId, Integer topSize);

  /**
   * 用户贵族vip权益.
   */
  List<String> listUserPropsVipActualEquity(Long userId);

  /**
   * 修改头像.
   */
  void updateUserAvatar(Long id, String avatar);

  /**
   * 修改头像, 批量.
   */
  void updateUserAvatarBatch(UpdateUserAvatarBatchCmd cmd);

  /**
   * 修改昵称，批量.
   */
  void updateUserNicknameBatch(List<UpdateUserNicknameBatchCmd> cmd);

  /**
   * 修改用户签名为空.
   */
  void updateBatchUserAutographEmpty(Collection<Long> ids);

  /**
   * 获取用户语言.
   */
  Map<Long, String> mapLanguage(Set<Long> userIds);

  /**
   * 修改用户信息
   */
  void updateSelectiveById(UserBaseInfoCmd dto);

  /**
   * 还原删除用户
   */
  void restoreDelById(Long id);

  void deletePhotoWall(Long id);

  PageResult<UserPhotoWallDTO> pageUserPhotoWall(PageCommand command);

  List<UserPhotoWallDTO> listUserPhotoWall(Long userId);

  UserPhotoWallDTO userPhotoWall(Long id);

  List<UserPhotoWallDTO> listUserPhotoWallNormal(Long userId);

  PageResult<UserPhotoWallDTO> pageUserDetailsPhotoWall(
      PhotoWallApprovalTableQryCmd cmd);

  void removeRunProfileById(Long id);

  List<UserProfileDTO> listRandomVest(int size);

  void restoreAuthDelByUserId(Long userId);
}
