import 'dart:io';
import 'dart:async';
import 'package:amap_map_fluttify/amap_map_fluttify.dart';
import 'package:fluro/fluro.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bugly/flutter_bugly.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:liftmanager/internal/home/splash_page.dart';
import 'package:liftmanager/provider/theme_provider.dart';
import 'package:liftmanager/routers/application.dart';
import 'package:liftmanager/routers/routers.dart';
import 'package:liftmanager/utils/toast.dart';
import 'package:oktoast/oktoast.dart';
import 'package:provider/provider.dart';
import 'package:liftmanager/internal/bbs/provide/websocket.dart';
import 'package:flutter_picker/flutter_picker.dart';
// import 'package:amap_location_fluttify/amap_location_fluttify.dart';
import 'package:fake_push/fake_push.dart';
import 'package:uni_links/uni_links.dart';
import 'package:liftmanager/routers/fluro_navigator.dart';
import 'package:orientation/orientation.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  FlutterBugly.postCatchedException(() async {
    // 强制竖屏
    SystemChrome.setPreferredOrientations(
        [DeviceOrientation.portraitUp]);
    // OrientationPlugin.forceOrientation(DeviceOrientation.portraitUp);
    FlutterBugly.init(androidAppId: "ae4e3d567d", iOSAppId: "4f09cdc82c");
    // 透明状态栏
    if (Platform.isAndroid) {
      SystemUiOverlayStyle systemUiOverlayStyle =
          SystemUiOverlayStyle(statusBarColor: Colors.transparent);
      SystemChrome.setSystemUIOverlayStyle(systemUiOverlayStyle);
    }
    await AmapService.init(
        iosKey: '7724c41be3ebe0cb7e5db4d79edc51b7',
        androidKey: '9eaae78b5b6b4ba78460b2e2539b798d');
    //下面是之前测试的
    // await AmapService.init(
    //     iosKey: '7724c41be3ebe0cb7e5db4d79edc51b7',
    //     androidKey: '28e7c3353ae0d66cdda8650a02d685c5');

    /// Fluttify引擎的日志
    await enableFluttifyLog(false); // 关闭log
    // runApp(
    //   MultiProvider(
    //     providers: [
    //       // 环境配置
    //       ChangeNotifierProvider(
    //         create: (BuildContext context) => WebSocketProvide(),
    //       ),
    //     ],
    //     child: MyApp(), // App 挂载
    //   ),
    // );
    
    runZoned(() {
      runApp(
      MultiProvider(
        providers: [
          // 环境配置
          ChangeNotifierProvider(
            create: (BuildContext context) => WebSocketProvide(),
          ),
        ],
        child: MyApp(), // App 挂载
      ),
    );
    }, onError: (Object error, StackTrace stack) {
      // print(error);
      // print(stack);
    });
  });
}

class MyApp extends StatefulWidget {
  final Widget home;
  MyApp({this.home}) {
    final router = Router();
    Routers.configureRouters(router);
    Application.router = router;
  }
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
// class _MyAppState extends State<MyApp> with AmapLocationDisposeMixin {

  Push _push = Push();
  StreamSubscription<String> _receiveDeviceToken;
  StreamSubscription<Message> _receiveMessage;
  StreamSubscription<Message> _receiveNotification;
  StreamSubscription<String> _launchNotification;
  StreamSubscription<String> _resumeNotification;

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _receiveDeviceToken =
        _push.receiveDeviceToken().listen(_handleReceiveDeviceToken);
    _receiveMessage = _push.receiveMessage().listen(_handleReceiveMessage);
    _receiveNotification =
        _push.receiveNotification().listen(_handleReceiveNotification);
    _launchNotification =
        _push.launchNotification().listen(_handleLaunchNotification);
    _resumeNotification =
        _push.resumeNotification().listen(_handleResumeNotification);
    _push.areNotificationsEnabled().then((l){
      print("是否开启通知：$l");
    });

//    _push.openNotificationsSettings();
    _push.startWork(enableDebug: false);
  }

  

  

  void _handleReceiveDeviceToken(String deviceToken) async {
    if(deviceToken != null){
      print('receiveDeviceToken: $deviceToken - ${await _push.getDeviceToken()}');
      _showTips('receiveDeviceToken', deviceToken);
    }
  }

  void _handleReceiveMessage(Message message) {
    print(
        'receiveMessage: ${message.title} - ${message.content} - ${message.customContent}');
    _showTips('receiveMessage',
        '${message.title} - ${message.content} - ${message.customContent}');
  }

  void _handleReceiveNotification(Message notification) {
    print(
        'receiveNotification: ${notification.title} - ${notification.content} - ${notification.customContent}');
    _showTips('receiveNotification',
        '${notification.title} - ${notification.content} - ${notification.customContent}');
  }

  void _handleLaunchNotification(String customContent) {
    print('launchNotification: $customContent');
    _showTips('launchNotification', customContent);
  }

  void _handleResumeNotification(String customContent) {
    print('resumeNotification: $customContent');
    _showTips('resumeNotification', customContent);
  }

  void _showTips(String title, String content) {
//    showToast(content);
  }

  @override
  void dispose() {
    if (_receiveDeviceToken != null) {
      _receiveDeviceToken.cancel();
    }
    if (_receiveMessage != null) {
      _receiveMessage.cancel();
    }
    if (_receiveNotification != null) {
      _receiveNotification.cancel();
    }
    if (_launchNotification != null) {
      _launchNotification.cancel();
    }
    if (_resumeNotification != null) {
      _resumeNotification.cancel();
    }
    super.dispose();
  }


  @override
  Widget build(BuildContext context) {
    return OKToast(
        child: ChangeNotifierProvider<ThemeProvider>(
          create: (_) => ThemeProvider(),
          child: Consumer<ThemeProvider>(
            builder: (_, provider, __) {
              return MaterialApp(
                  title: '电梯管家',
                  //showPerformanceOverlay: true, //显示性能标签
                  //debugShowCheckedModeBanner: false,
                  //checkerboardRasterCacheImages: true,
                  theme: provider.getTheme(),
                  darkTheme: provider.getTheme(isDarkMode: true),
                  home: widget.home ?? SplashPage(),
                  onGenerateRoute: Application.router.generator,
                  localizationsDelegates: const [
                    GlobalMaterialLocalizations.delegate,
                    GlobalWidgetsLocalizations.delegate,
                    GlobalCupertinoLocalizations.delegate,
                  ],
                  supportedLocales: const [
//                    Locale('zh', 'CH'),
//                    Locale('en', 'US')
                    const Locale('zh', 'Hans'), // China
                    const Locale('zh', ''), // China
                  ]);
            },
          ),
        ),
        backgroundColor: Colors.black54,
        textPadding:
            const EdgeInsets.symmetric(horizontal: 16.0, vertical: 10.0),
        radius: 20.0,
        position: ToastPosition.bottom);
  }
}
