import 'package:domain/constants/api_constants.dart';
import 'package:domain/repository/auth_repository.dart';
import 'package:domain/repository/job_repository.dart';
import 'package:domain/repository/labour_repository.dart';
import 'package:plugin_basic/basic_export.dart';
import 'package:plugin_basic/dio_interceptors/interceptor_auth_dio.dart';
import 'package:plugin_basic/dio_interceptors/interceptor_status_code_dio.dart';
import 'package:plugin_basic/service/user_service.dart';
import 'package:plugin_platform/http/http_provider.dart';
import 'package:shared/utils/log_utils.dart';

/*
   全局服务 Service 的初始化入口

   1. 默认注入网络请求Provider与Domain的Repository
   2. 留下高阶函数的入口，方便加入其他的全局服务

   全局单例服务的注入，在 main.dart 入口就可直接调用，注意手动调用
 */
class GlobalServicesInjection {
  /// init
  static void init({void Function()? additionalDependencies}) {
    Log.d('----ConfigServicesInjection------start-----');

    //全局单例的 HttpProvider 用于发起网络请求
    Get.put(
        HttpProvider(
          ApiConstants.baseUrl,
          interceptors: [StatusCodeDioInterceptors(), AuthDioInterceptors()], //需要加上与App关联的一些拦截处理
        ),
        permanent: true);

    //全局单例的用户数据仓库
    Get.put(AuthRepository(httpProvider: Get.find()));

    //其他的数据仓库注入
    Get.lazyPut(() => JobRepository(httpProvider: Get.find()));
    Get.lazyPut(() => LabourRepository(httpProvider: Get.find()));

    // 用户信息服务（用户信息相关业务类）
    Get.put(UserService(Get.find()));

    // 调用额外的依赖注入逻辑（如果提供了）
    if (additionalDependencies != null) {
      additionalDependencies();
    }

    Log.d('----ConfigServicesInjection------end-----');
  }

  // 切换应用的BaseUrl的逻辑
  static void switchBaseUrl(String baseUrl) {
    Get.replace(
      HttpProvider(
        baseUrl, // 使用新的 baseUrl
        interceptors: [StatusCodeDioInterceptors(), AuthDioInterceptors()],
      ),
    );
  }
}
