/*
 * @Author: XianKaiQun
 * @Date: 2020-04-03 16:06:52
 * @LastEditors  : WuWei
 * @LastEditTime : 2021-07-14 11:22:18
 * @Descripttion: 位置定位--全局
 */

// import 'dart:async';
// import 'dart:io';

// import 'package:amap_location_fluttify/amap_location_fluttify.dart';
// import 'package:amap_map_fluttify/amap_map_fluttify.dart' as amap_map;
// import 'package:amap_map_fluttify/amap_map_fluttify.dart';
// import 'package:app_package/app_package.dart';
// // import 'package:background_location/background_location.dart';
// import 'package:flutter/widgets.dart';
// import 'package:get_it/get_it.dart';
// import 'package:track_package/src/api/ground.dart';
// import 'package:track_package/src/assets.gen.dart';
// import 'package:track_package/src/models/groundSign/byEmployeeId.dart'
//     as byEmployeeId;
// import 'package:track_package/src/util/foreground_service.dart';
// import 'package:track_package/src/util/parse.dart';
// import 'package:track_package/src/widget/text.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:wisdom_cli/wisdom_cli.dart';

// class GlobalGroundStore with ChangeNotifier {
//   final BuildContext context;

//   static GlobalGroundStore of(BuildContext context, {listen = true}) {
//     return Provider.of<GlobalGroundStore>(context, listen: listen);
//   }

//   GlobalGroundStore(this.context) {
//     ///关闭高德地图控制台打印
//     enableFluttifyLog(false);
//     AmapService.init(
//       androidKey: APPConfig.amapKey,
//       iosKey: APPConfig.amapKey,
//     );

//     amap_map.AmapService.init(
//       iosKey: APPConfig.amapKey,
//       androidKey: APPConfig.amapKey,
//     );
//     if (Platform.isAndroid) {
//       _reqPermissionAndroid();
//     }

//     ///监听登录事件   登录成功立刻检测是否签到，已签到要上传位置
//     final authGlobalStore = GetIt.I.get<AuthGlobalStore>();
//     authGlobalStore.addLoginListener(getLastSign);

//     ///退出登录要取消位置实时上传
//     authGlobalStore.addLogoutListener(
//       () => timer?.cancel(),
//     );
//   }
//   final authGlobalStore = GetIt.I.get<AuthGlobalStore>();

//   Timer timer;

//   @override
//   void dispose() {
//     AmapLocation.instance.stopLocation();
//     AmapLocation.instance.dispose();
//     super.dispose();
//   }

//   //当前员工的id
//   dynamic get employeeId => WisStorageUtil.get(key: 'storage-user-id');

//   ///最后一条签到信息
//   byEmployeeId.Data lastSign;

//   ///签到按钮的状态
//   String get btnText => lastSign?.signStatus == 'signIn' ? '签退' : '签到';

//   ///获取最后一条签到信息
//   Future getLastSign() async {
//     var res = await GroundApi.byEmployeeId(employeeId);
//     lastSign = res.data ?? byEmployeeId.Data();
//     notifyListeners();
//     uploadLocation();
//   }

//   ///签到
//   signIn() async {
//     var location = await AmapLocation.instance.fetchLocation(
//       timeout: Duration(seconds: 10),
//     );

//     ///高德转百度
//     var latLng = ParseUtil.bdEncrypt(
//       latitude: location.latLng.latitude,
//       longitude: location.latLng.longitude,
//     );
//     if (latLng.latitude == null) {
//       WToastUtil.show('获取定位失败');
//       return;
//     }
//     var res = await GroundApi.signIn({
//       'employeeId': employeeId,
//       'inLongitude': latLng.longitude,
//       'inLatitude': latLng.latitude
//     });
//     if (res.status != null) {
//       WToastUtil.show(res?.responseJson?.message ?? '未知错误');
//     } else {
//       WToastUtil.showWidget(
//         child: Container(
//           height: 120.pt,
//           width: 120.pt,
//           child: Column(
//             mainAxisAlignment: MainAxisAlignment.center,
//             children: <Widget>[
//               Image(
//                 image: AssetList.$chgIcon3x_png_image,
//                 height: 50.pt,
//               ),
//               ExtText.white('签到成功', 17.pt, bold: true, height: 1.8)
//             ],
//           ),
//         ),
//       );
//     }
//     getLastSign();
//   }

//   ///签退
//   signOut() async {
//     var location = await AmapLocation.instance.fetchLocation(
//       timeout: Duration(seconds: 10),
//     );

//     ///高德转百度
//     var latLng = ParseUtil.bdEncrypt(
//       latitude: location.latLng.latitude,
//       longitude: location.latLng.longitude,
//     );
//     var res = await GroundApi.signOut(
//       lastSign.id,
//       {'outLongitude': latLng.longitude, 'outLatitude': latLng.latitude},
//     );
//     if (res.status != null) {
//       WToastUtil.show(res?.responseJson?.message ?? '未知错误');
//     } else {
//       WModalUtil.showFormWidgetSync(
//         canCancel: false,
//         content: Column(
//           children: <Widget>[
//             Image.asset('lib/assets/chg_icon@3x.png',
//                 package: 'track_package', height: 50.pt),
//             ExtText.black('签退成功', 18.pt, bold: true, height: 1.8),
//             ExtText.dark(
//               '共执勤${AppParseUtil.ms2str(res.data)}',
//               16.pt,
//               height: 2,
//             ),
//           ],
//         ),
//       );
//       getLastSign();
//     }
//   }

//   ///位置上传
//   ///
//   ///先监听位置变化--存下当前定位
//   ///然后在另起一个timer定时上传
//   ///因为位置变化的时间间隔不一定跟后端需要的上传频率一样
//   uploadLocation() async {
//     ///防止多个定时任务
//     timer?.cancel();
//     timer = null;
//     var b = await reqPermission();
//     if (b == false) {
//       return;
//     }

//     if (lastSign?.signStatus == 'signIn') {
//       ///前台服务
//       if (Platform.isAndroid) {
//         ForegroundServiceUtil.start();
//       }

//       // timeInterval  后端定制的上传频率
//       timer = Timer.periodic(
//         Duration(seconds: lastSign?.timeInterval ?? 5),
//         (_timer) async {
//           var res = await AmapLocation.instance.fetchLocation(
//             timeout: Duration(seconds: 10),
//           );
//           var latLng = res?.latLng;

//           ///高德转百度
//           if (latLng?.latitude != null && latLng?.longitude != null) {
//             var _latLng = ParseUtil.bdEncrypt(
//               latitude: latLng.latitude,
//               longitude: latLng.longitude,
//             );
//             await GroundApi.userLocation({
//               "latitude": _latLng.latitude,
//               "longitude": _latLng.longitude,
//               "type": "BD09",
//             });
//           }
//         },
//       );
//     }

//     ///关闭位置监听
//     else {
//       ///前台服务
//       if (Platform.isAndroid) {
//         ForegroundServiceUtil.stop();
//       }

//       AmapLocation.instance.stopLocation();
//     }
//   }

//   ///系统权限
//   Future<bool> reqPermission() async {
//     if (Platform.isAndroid) {
//       return _reqPermissionAndroid();
//     } else {
//       return _reqPermissionIos();
//     }
//   }

//   ///ios注册权限
//   Future<bool> _reqPermissionIos() async {
//     var permissionStatus = await Permission.locationAlways.status;

//     if (permissionStatus != PermissionStatus.granted) {
//       var res = await Permission.locationAlways.request();
//       if (res.isGranted != true) {
//         WModalUtil.showSync(
//           '绘管家需要实时获取您的位置信息，以便就近安排工作任务，请选择“始终允许”',
//           canCancel: false,
//         ).then(
//           (_) {
//             openAppSettings();
//           },
//         );
//         return false;
//       } else {
//         return true;
//       }
//     } else {
//       return true;
//     }
//   }

//   ///requestPermissions注册权限，如果已经够了权限 是不会有任何反应的，所以可以用递归
//   ///
//   ///注册后检查，如果权限为“不允许 or  不再提示”，则用户需要跳转到系统设置中设置
//   ///
//   ///均有权限后才会去跳转login
//   ///
//   ///没有权限就退出app
//   Future<bool> _reqPermissionAndroid() async {
//     final locationAlwaysStatus = await Permission.locationAlways.request();
//     final batteryStatus = await Permission.ignoreBatteryOptimizations.request();

//     if (locationAlwaysStatus != PermissionStatus.restricted) {
//       if (batteryStatus == PermissionStatus.denied) {
//         await WModalUtil.showSync(
//           '绘管家地勤功能需要保持后台运行，请在电池优化白名单中选中“绘管家”。',
//           title: '授权提示',
//           canCancel: false,
//         );
//         await openAppSettings();

//         // ///退出app
//         // await SystemChannels.platform.invokeMethod('SystemNavigator.pop');
//       }
//       return true;
//     } else {
//       return false;
//     }
//   }
// }
