

/// Created by Haoyi on 2022/5/23

// mixin AccountAware on LifecycleController {
//   final accountDataStore = Injector.provide<AccountDataStore>();
//
//   Stream<AccountProfile?> get observableAccountProfile => accountDataStore.observableAccountProfile;
//
//   String? get saasToken => accountDataStore.saasToken;
//
//   String? get uid => accountDataStore.uid;
//
//   AccountProfile? get accountProfile => accountDataStore.accountProfile;
//
//   String? get nickname => accountDataStore.nickname;
//
//   String? get countryCode => accountDataStore.countryCode;
//
//   SaasUser? get user => accountDataStore.user;
//
//   DeviceInfo? get currentDevice => accountDataStore.currentDevice;
//
//   String? get userAvatar => accountProfile?.avatar;
//
//   CumulativeInt? get bestScore => accountProfile?.bestScore;
//
//   bool get accountInitialized => accountDataStore.initialized;
//
//   Stream<String?> get observableNickname =>
//       observableAccountProfile.map<String?>((accountProfile) => accountProfile?.nickname);
//
//   Stream<bool> get observableAccountInitialized => accountDataStore.observableInitialized;
//
//   void initAccount() {
//     Injector.provide<AccountService>().init();
//   }
//
//   Future<bool> updateAccountProfile(
//       {String? nickname, String? avatar, CumulativeInt? bestScore, String? countryCode}) async {
//     final accountService = Injector.provide<AccountService>();
//     // final rankService = Injector.provide<RankService>();
//     return await accountService.modifyProfile(
//         nickname: nickname, avatar: avatar, bestScore: bestScore, countryCode: countryCode);
//     // if (result) {
//     //   await rankService.refreshAccountProfile();
//     // }
//     return true;
//   }
//
//   Future<bool> uploadBestScore() async {
//     final accountService = Injector.provide<AccountService>();
//     final rankService = Injector.provide<RankService>();
//     final latestBestScore = StatisticManager.instance.peekBestScore();
//     final accountBestScore = bestScore ?? CumulativeInt.zero;
//
//     Log.w("uploadBestScore latestBestScore! $latestBestScore $accountBestScore",
//         syncFirebase: true);
//     if (latestBestScore > accountBestScore) {
//       String? changedCountryCode = DeviceUtils.buildLocaleInfo().countryCode.toUpperCase();
//       if (DartExt.isBlank(changedCountryCode) || countryCode == changedCountryCode) {
//         changedCountryCode = null;
//       }
//       try {
//         await accountService.modifyProfile(
//             bestScore: latestBestScore, countryCode: changedCountryCode);
//       } catch (error, stacktrace) {
//         Log.w("modifyProfile error!", error: error, stackTrace: stacktrace, syncFirebase: true);
//       }
//     }
//     await rankService.uploadBestScore(latestBestScore);
//     return true;
//   }
//
//   RankData buildEmptyRankData(String boardId, {CumulativeInt? bestScore}) {
//     return RankData(
//         boardId,
//         uid ?? "",
//         -1,
//         bestScore ?? this.bestScore,
//         LbUserInfo(
//             nickname: nickname ?? "",
//             countryCode: DeviceUtils.buildLocaleInfo().countryCode.toUpperCase(),
//             avatar: "avatar_1",
//             attr: UserAttr.real));
//   }
// }
