import 'package:yumi/shared/business_logic/models/res/join_room_res.dart' hide WearBadge;

import 'package:yumi/shared/business_logic/models/req/sc_mobile_auth_cmd.dart';
import 'package:yumi/shared/business_logic/models/res/sc_edit_room_info_res.dart';
import 'package:yumi/shared/business_logic/models/res/follow_room_res.dart' hide WearBadge;
import 'package:yumi/shared/business_logic/models/res/follow_user_res.dart' hide WearBadge;
import 'package:yumi/shared/business_logic/models/res/sc_gold_record_res.dart';
import 'package:yumi/shared/business_logic/models/res/login_res.dart';
import 'package:yumi/shared/business_logic/models/res/message_friend_user_res.dart';
import 'package:yumi/shared/business_logic/models/res/my_room_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_prop_coupon_list_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_prop_coupon_record_list_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_public_message_page_res.dart';
import 'package:yumi/shared/business_logic/models/res/room_black_list_res.dart';
import 'package:yumi/shared/business_logic/models/res/room_res.dart' hide WearBadge;
import 'package:yumi/shared/business_logic/models/req/sc_user_profile_cmd.dart';
import 'package:yumi/shared/business_logic/models/res/sc_rtc_token_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_sign_in_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_task_list_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_user_counter_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_user_identity_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_user_level_exp_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_user_red_packet_grab_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_user_red_packet_send_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_violation_handle_res.dart';

abstract class SocialChatUserRepository {
  Future<SocialChatLoginRes> getUser(String id);

  ///账号登录
  Future<SocialChatLoginRes> loginForAccount(String account, String pwd);

  ///渠道登录谷歌 苹果
  Future<SocialChatLoginRes> loginForChannel(String authType, String openId);

  ///注册
  Future<SocialChatLoginRes> regist(
    String type,
    String openId,
    SCUserProfileCmd userProfileCmd, {
    SCMobileAuthCmd? mobileAuthCmd,
    String invitePeople,
  });

  ///关注的房间
  Future<List<FollowRoomRes>> followRoomList({String? lastId});

  ///历史记录
  Future<List<FollowRoomRes>> trace({String? lastId});

  ///加入的房间
  Future<List<FollowRoomRes>> joined();

  ///我的房间
  Future<MyRoomRes> myProfile();

  ///创建房间
  Future<SocialChatRoomRes> createRoom();

  ///加入房间
  Future<JoinRoomRes> entryRoom(String roomId, {String? pwd});

  ///发送心跳
  Future heartbeat(String status, bool upMick, {String? roomId});

  ///上麦心跳
  Future anchorHeartbeat(String roomId);

  ///声网token
  Future<SCRtcTokenRes> getRtcToken(String channel, String userId);

  ///退出房间
  Future<bool> quitRoom(String roomId);

  ///修改房间信息
  Future<SCEditRoomInfoRes> editRoomInfo(
    String roomId,
    String roomCover,
    String roomName,
    String roomDesc,
    String event,
  );

  ///获取指定用户信息
  Future<SocialChatUserProfile> loadUserInfo(String userId);

  ///关注房间
  Future<bool> followRoom(String roomId);

  ///关注用户
  Future<bool> followUser(String userId);

  ///获取我的金币余额
  Future<double> balance();

  ///搜索用户
  Future<SocialChatUserProfile> searchUser(String account);

  ///设置密码
  Future pwdReset(String pwd);

  ///账号是否绑定
  Future<bool> accountIsBind();

  ///绑定账号
  Future bind(String pwd);

  ///修改密码
  Future updatePwd(String pwd, String oldPwd);

  ///房间用户黑名单
  Future<List<RoomBlackListRes>> roomBlacklist(String roomId, String lastId);

  ///修改用户信息
  Future<SocialChatUserProfile> updateUserInfo({
    String? userAvatar,
    String? userNickname,
    num? userSex,
    num? age,
    num? bornYear,
    num? bornMonth,
    num? bornDay,
    String? countryId,
    String? hobby,
    String? autograph,
    List<String>? backgroundPhotos,
    List<String>? personalPhotos,
  });

  ///关注列表
  Future<List<FollowUserRes>> followMyList({String? account, String? lastId});

  ///粉丝列表
  Future<List<FollowUserRes>> fansMyList({String? account, String? lastId});

  ///金币记录
  Future<List<SCGoldRecordRes>> goldRecord({num? type, String? lastId});

  ///获取身份
  Future<SCUserIdentityRes> userIdentity({String? userId});

  ///获取用户关系计数 SUBSCRIPTION:订阅、FANS:粉丝、FRIEND:朋友,访客.
  Future<List<SCUserCounterRes>> userCounter(String userId);


  ///用户等级
  Future<SCUserLevelExpRes> userLevelConsumptionExp(String userId, String type);

  ///是否已经签到
  Future<bool> checkInToday();

  ///签到列表
  Future<SCSignInRes> sginListAward();

  ///签到领奖
  Future<int> checkInReceive(String id, String resourceGroupId);

  ///添加代理
  Future<bool> teamCreate(String ownUserId);

  ///分页查询公共消息列表.
  Future<SCPublicMessagePageRes> publicMessagePage(
    String type,
    num pageNo,
    num pageSize,
  );

  ///好友列表
  Future<List<MessageFriendUserRes>> friendList({String? lastId});

  ///好友搜索
  Future<List<MessageFriendUserRes>> friendSearch(String account);

  ///代理邀请成为主播-处理
  Future<bool> inviteHost(String id, String status);

  ///代理邀请成为Agent-处理
  Future<bool> inviteAgent(String id, String status);

  ///代理邀请成为BD-处理
  Future<bool> inviteBD(String id, String status);

  ///代理邀请成为BDLeader-处理
  Future<bool> inviteBDLeader(String id, String status);

  ///处理邀请-邀请充值代理.
  Future<bool> inviteRechargeAgent(String id, String status);

  ///检测我是否有关注指定用户.
  Future<bool> followCheck(String userId);

  ///系统消息专用关注接口
  Future<bool> followNew(String userId);

  ///任务列表
  Future<List<SCTaskListRes>> tasks();

  ///领取奖励
  Future<bool> taskReward(num taskId);

  ///我的访客列表
  Future<List<FollowUserRes>> visitorList(num pageNumber);

  ///查询我的道具券列表
  Future<SCPropCouponListRes> propCouponList(
    num size,
    num current, {
    int? couponType,
  });

  ///查询道具券使用记录
  Future<SCPropCouponRecordListRes> couponRecordList(
    num size,
    num current, {
    int? couponType,
    int? status,
  });

  ///使用道具券
  Future<bool> couponUse(String couponNo);

  ///赠送道具券
  Future<bool> couponSend(String couponNo, String receiverId);


  ///处理用户违规
  Future<SCViolationHandleRes> userViolationHandle(
    String userId,
    int violationType,
    int operationType,
    String description, {
    List<String>? imageUrls,
  });


  ///验证是否是好友
  Future<bool> friendRelationCheck(String userId);

  ///发送用户红包
  Future<SCUserRedPacketSendRes> userRedPacketSend(
    String receiverUserId,
    String totalAmount,
  );

  ///查询红包详情
  Future<SCUserRedPacketSendRes> userRedPacketDetail(String packetId);

  ///领取用户红包
  Future<SCUserRedPacketGrabRes> userRedPacketGrab(String packetId);

  ///查询黑名单列表.
  Future<List<MessageFriendUserRes>> userBlacklistList({
    String? account,
    String? lastId,
  });

  ///检测是否在黑名单.
  Future<bool> blacklistCheck(String shieldUserId);

  ///添加黑名单
  Future<bool> addUserBlacklist(String shieldUserId);

  ///删除黑名单
  Future<bool> deleteUserBlacklist(String shieldUserId);

  ///注销账号
  Future<bool> logoutAccount();

}
