package com.red.circle.console.app.service.app.user;


import com.red.circle.common.business.enums.ConsoleAccountStatusEnum;
import com.red.circle.console.app.dto.clienobject.user.UserIdentityCO;
import com.red.circle.console.app.dto.clienobject.user.UserProfileDetailCO;
import com.red.circle.console.app.dto.clienobject.user.UserProfileListCO;
import com.red.circle.console.app.dto.clienobject.user.UserVipEquityCO;
import com.red.circle.framework.dto.ResultResponse;
import com.red.circle.other.inner.model.cmd.count.PropsSaleQuotaQryCmd;
import com.red.circle.other.inner.model.cmd.count.SysOriginUserQryCmd;
import com.red.circle.other.inner.model.cmd.tools.UserRoomRegionUpdateCmd;
import com.red.circle.other.inner.model.dto.pet.UserBaseInfoDTO;
import com.red.circle.other.inner.model.dto.user.SysUserBaseInfoDTO;
import com.red.circle.tool.core.tuple.ImmutableKeyValuePair;
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.cmd.user.UserProfileUpdateCmd;
import com.red.circle.other.inner.model.dto.user.UserLatestDeviceAssociatedDTO;
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
import java.util.List;

/**
 * 用户基本信息.
 *
 * @author pengshigang on 2022/12/5
 */
public interface UserBaseInfoService {

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

  /**
   * 查询系统用户数量
   */
  ResultResponse<List<SysUserBaseInfoDTO>> userListQuery(SysOriginUserQryCmd qryCmd);

  /**
   * 查询用户信息
   */
  UserProfileDetailCO getByUserId(Long userId);

  /**
   * 根据账号查询用户信息
   */
  List<UserProfileDTO> getByAccount(String account);

  /**
   * 修改APP用户信息
   */
  void updateUserProfile(UserProfileUpdateCmd param);

  /**
   * 修改ai视频用户信息
   */
  void updateVestUserInfo(UserBaseInfoCmd cmd);

  /**
   * im签名获取.
   */
  ImmutableKeyValuePair<String, String> imUserLogin(String phoneNumber, String password);

  /**
   * 用户当前账号状态
   */
  ImmutableKeyValuePair<ConsoleAccountStatusEnum, String> listAccountStatus(Long userId);

  /**
   * 获取用户设备imei.
   */
  UserLatestDeviceAssociatedDTO getDeviceByUserId(Long userId);

  /**
   * 获取用户最新版本号.
   */
  String getImeiByUserId(Long userId);

  /**
   * 用户身份信息.
   */
  UserIdentityCO getUserIdentity(Long userId);

  /**
   * 获得用户VIP权益.
   */
  UserVipEquityCO getUserVipEquityCO(Long userId);

  /**
   * 还原注销用户
   */
  ResultResponse<Void> reductionUserProfile(UserRoomRegionUpdateCmd cmd);
}
