/*
 * @Author: XianKaiQun
 * @LastEditors: ChenYaJin
 * @Date: 2020-10-28 16:40:43
 * @LastEditTime: 2023-01-09 17:16:27
 */
import 'package:app_package/app_package.dart';
import 'package:mobx/mobx.dart';
import 'package:wisdom_cli/wisdom_cli.dart';
export 'package:app_package/src/models/community.dart';
part 'community.g.dart';

///小区全局变量
class CommunityGlobalStore = _CommunityGlobalStore with _$CommunityGlobalStore;

const _key = 'storage-community';

abstract class _CommunityGlobalStore with Store {
  _CommunityGlobalStore() {
    final value = CommunityModel.fromJson(WisStorageUtil.get(key: _key) ?? {});
    _setdata(value);
  }
  @computed
  get data => _data;

  @observable
  CommunityModel? _data;
  @action
  _setdata(CommunityModel value) => _data = value;

  // @computed
  // List get noticeMenusRoute => _noticeMenusRoute;
  // @observable
  // List _noticeMenusRoute = [];
  // @action
  // Future getShowNoticeDot(id) async {
  //   if (id == null) return;
  //   var res = await RootApi.getMenusNotice({'communityId': id});
  //   var list = res.data ?? [];
  //   _noticeMenusRoute = [];
  //   list.forEach((item) => {
  //         if (item.showBadge == true) {_noticeMenusRoute.add(item.route)}
  //       });
  // }

  ///[intent]
  ///自动判断该不该跳转小区
  ///
  ///如果本地储存中没有community，Future中自动引导选择小区，一系列操作后返回一个[bool]。
  ///
  ///如果本地储存有community，则不会有任何反应，直接返回一个[true]。
  ///
  ///尽量避免一个页面中调用多次[intent]，如在页面类似init的生命周期调用一次判断即可，因为可能会push多个小区选择路由，注意保持await。
  ///
  ///如果返回[true],说明储存中存在小区，如果返回[fasle]可判定在一大堆引导后用户依然没有选择小区。
  ///需要用到小区id的业务建议读取到[fasle]后强行退出当前业务路由
  ///
  Future<bool> get intent async {
    if (data?.id == null) {
      await routeToPicker();
      data?.id == null && await WToastUtil.show('无法确认您工作小区');
    }
    return data?.id != null;
  }

  ///手动去选择小区
  routeToPicker() async {
    await WNavUtil.instance!.pushNamed('community');
  }

  ///设置小区储存
  @action
  Future<bool> setCommunity(CommunityModel data) async {
    Map _map = data.toJson();
    _setdata(data);
    return await WisStorageUtil.set(key: _key, data: _map);
  }

  ///移除小区储存
  @action
  Future<bool> removeCommunity() async {
    _setdata(CommunityModel());
    // _noticeMenusRoute = [];
    return await WisStorageUtil.remove(key: _key);
  }
}
