import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:vitalapp/database/db.dart';
import 'package:vnote_device_plugin/vnote_device_plugin_platform_interface.dart';
import 'package:vitalapp/architecture/network_connectivity.dart';
import 'package:vitalapp/architecture/utils/prompt_box.dart';
import 'package:vitalapp/managers/index.dart';
import 'package:vitalapp/managers/interfaces/permission.dart';
import 'package:vitalapp/rpc.dart';
import 'package:vitalapp/store/store.dart';
import 'package:fis_common/logger/logger.dart';

import 'architecture/app_parameters.dart';

abstract class Global {
  static Future<void> init() async {
    logger.i("Global init start...");

    // 锁定横屏
    await SystemChrome.setPreferredOrientations([
      DeviceOrientation.landscapeLeft,
      DeviceOrientation.landscapeRight,
    ]);

    // SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle.light);

    SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
    SystemChrome.setSystemUIChangeCallback((systemOverlaysAreVisible) async {
      await Future.delayed(const Duration(seconds: 1));
      SystemChrome.setEnabledSystemUIMode(SystemUiMode.immersive);
    });
    SystemChrome.setSystemUIOverlayStyle(
      const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarIconBrightness: Brightness.light,
      ),
    );
    // SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);

    // 日志
    if (kReleaseMode) {
      // 生产环境
      Get.isLogEnable = false;
    } else {
      // debug/profile 环境
      logger.setMinimumLevel(LogLevel.Degbug);
    }
    await logger.init();

    // Loading工具
    PromptBox.init();

    /// 预设配置
    await AppParameters.load();

    // 状态
    await Store.init();

    // 开始检测网络状态
    netChecker.run();

    await db.init();

    _initRpc();

    /// 全局管理器中心
    ManagerCenter.load();

    /// 初始化动态权限
    _initPermission();

    /// 设备测量插件初始化
    await VnoteDevicePluginPlatform.instance.init();

    logger.i("Global init finish...");
  }

  static void _initRpc() {
    _updateRpcHostPath(Store.app.serverUrl);
  }

  static void _updateRpcHostPath(String hostPath) {
    final uri = Uri.parse(hostPath);
    rpc.setServerHost("${uri.host}:${uri.port}", uri.scheme == 'https');
    rpc.clearCache();
  }

  static Future<void> _initPermission() async {
    IPermissionManager permissionManager = Get.find<IPermissionManager>();

    await permissionManager.requestLocationPermission();
    await permissionManager.requestBluetoothConnectPermission();
    await permissionManager.requestBluetoothAdvertisePermission();
    await permissionManager.requestBluetoothScanPermission();
  }
}
