import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:huixiang/utils/bridge.dart';
import 'package:shared_preferences/shared_preferences.dart';

abstract class BaseState<T extends StatefulWidget> extends State<T>
    with WidgetsBindingObserver {
  int lastTime = DateTime.now().millisecondsSinceEpoch;

  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this);
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    print("-didChangeAppLifecycleState-" + state.toString());
    switch (state) {
      case AppLifecycleState.inactive: // 处于这种状态的应用程序应该假设它们可能在任何时候暂停。
        break;
      case AppLifecycleState.resumed: //从后台切换前台,界面可见
        pushRoute();
        if (DateTime.now().millisecondsSinceEpoch - lastTime > 300000)
          Navigator.of(context).popAndPushNamed('/router/main_page');
        break;
      case AppLifecycleState.paused: // 界面不可见,后台
        lastTime = DateTime.now().millisecondsSinceEpoch;
        break;
      case AppLifecycleState.detached: // APP结束时调用
        break;
    }
  }

  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  pushRoute() async {
    String startIntent = await Bridge.getStartIntent();
    SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
    print("intent:$startIntent");
    String pushData = "";
    if (startIntent != null && startIntent != "") {
      pushData = startIntent;
    } else {
      pushData = sharedPreferences.getString("pushData");
    }
    if (pushData == null || pushData == "") return;
    Map<String, dynamic> pushMap = jsonDecode(pushData);
    if (pushMap != null) {
      String routeName = "";
      Map<String, dynamic> params = {};
      switch (pushMap["typed"].toString()) {
        case "1":
        case "ARTICLE":
          routeName = "/router/web_page";
          params["articleId"] = pushMap["info"];
          break;
        case "2":
        case "ACTIVITY":
          routeName = "/router/web_page";
          params["activityId"] = pushMap["info"];
          break;
        case "3":
        case "SHOP":
          routeName = "/router/store_order";
          params["id"] = pushMap["info"];
          params["tenant"] = pushMap["tenant"];
          params["storeName"] = pushMap["storeName"];
          break;
        case "4":
        case "CREDIT_GOODS":
          routeName = "/router/integral_store_page";
          params["goodsId"] = pushMap["info"];
          break;
        case "5":
        case "ORDER":
          routeName = "/router/order_details";
          params["id"] = pushMap["info"];
          break;
        case "6":
        case "MEMBER":
          routeName = "/router/community_details";
          params["businessId"] = pushMap["info"];
          break;
        case "8":
        case "WALLET":
          routeName = "/router/mine_wallet";
          params["id"] = pushMap["info"];
          break;
        case "9":
        case "WELFARE":
          routeName = "/router/welfare_page";
          params["id"] = pushMap["info"];
          break;
        case "12":
        case "COUPON":
          routeName = "/router/coupon_page";
          params["id"] = pushMap["info"];
          break;
        case "13":
        case "CATE_BEAN":
          routeName = "/router/trading_card_page";
          params["id"] = pushMap["info"];
          break;
      }
      sharedPreferences.setString("pushData", "");
      print("xgPushClickAction: routeName: $routeName");
      if (routeName != "") {
        Navigator.of(context).pushNamed(routeName, arguments: params);
      }
    }
  }
}