import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:plugin_platform/engine/directory/directory_util.dart';
import 'package:plugin_platform/engine/sp/sp_util.dart';
import 'package:plugin_platform/engine/cache/local_cache_manager.dart';
import 'package:shared/utils/log_utils.dart';
import 'package:plugin_basic/provider/app_config/app_config_service.dart';

/*
 * Main函数入口的初始化
 */
class AppInitializer {
  // 私有的构造函数,防止实例化
  AppInitializer._();

  /*
   * 1.入口初始化方法 - Platform 插件中的Engine其他功能初始化
   * main.dart 中宿主的配置
   */
  static void initialize() async {
    //FT框架初始化
    WidgetsFlutterBinding.ensureInitialized();

    //初始化SP
    await SPUtil.getInstance();

    //Log框架初始化
    Log.init(isDebug: !kReleaseMode);

    //指定页面的展示方向为哪一种,常用的三种屏幕方向,支持横屏
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      // DeviceOrientation.landscapeLeft,
      // DeviceOrientation.landscapeRight,
    ]);

    //处理显示区域
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);
  }

  /*
   * 2.延迟初始化,一般是在用户同意隐私权限之后再调用
   * 同意权限之后的其他插件初始化,用于宿主的配置
   */
  static Future<void> delayInitialize({
    List<Future<void> Function()>? futureTasks,
    List<void Function()>? normalTasks,
  }) async {
    // 路径管理工具类 (SD卡,沙盒等路径获取)
    setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false);

    // 收集所有需要等待的Future
    final List<Future> futures = [
      Future.delayed(const Duration(milliseconds: 1000)), // 默认1秒延时

      DirectoryUtil.getInstance(), // SD卡管控

      localCache.init(), //Hive本地缓存初始化

      //AppConfig服务
      AppConfigService.getInstance().initAsync(),
    ];

    // 如果提供了 futureTasks,调用并添加到 futures 列表
    if (futureTasks != null) {
      for (var task in futureTasks) {
        futures.add(task());
      }
    }

    // 如果提供了 normalTasks,将它们包装成 Future 并添加到 futures 列表
    if (normalTasks != null) {
      for (var task in normalTasks) {
        futures.add(Future(() {
          task();
        }));
      }
    }

    // 等待所有 Future 完成
    await Future.wait(futures);
  }

  /*
   * 3.入口初始化方法 - Platform 插件中的Engine其他功能初始化
   * 独立运行模块中的 main.dart 配置,用于测试
   */
  static Future initializeRunalone() async {
    //FT框架初始化
    WidgetsFlutterBinding.ensureInitialized();

    //初始化SP
    await SPUtil.getInstance();

    //Log框架初始化
    Log.init(isDebug: !kReleaseMode);

    //延迟初始化的插件在独立运行的时候一起初始化了
    setInitDir(initTempDir: true, initAppDocDir: true, initAppSupportDir: true, initStorageDir: false);
    DirectoryUtil.getInstance(); //SD卡管控

    localCache.init(); //Hive本地缓存初始化

    //AppConfig服务
    await AppConfigService.getInstance().initAsync();

    //指定页面的展示方向为哪一种,常用的三种屏幕方向
    SystemChrome.setPreferredOrientations([
      DeviceOrientation.portraitUp,
      // DeviceOrientation.landscapeLeft,
      // DeviceOrientation.landscapeRight,
    ]);

    //处理显示区域
    SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: [SystemUiOverlay.top, SystemUiOverlay.bottom]);
  }
}