initialize method

Future<void> initialize()

Initialize Firebase services

Implementation

Future<void> initialize() async {
  if (_isInitialized) {
    FinanceSdkLogger.info('Firebase already initialized');
    return;
  }

  try {
    FinanceSdkLogger.info('Initializing Firebase services...');

    // Initialize Firebase Core using MyPluginFirebase configuration (named app)
    final FirebaseApp app = await MyPluginFirebase.initialize();

    // Initialize Firestore bound to the plugin's Firebase app
    _firestore = FirebaseFirestore.instanceFor(app: app);

    // Initialize Remote Config bound to the plugin's Firebase app
    _remoteConfig = FirebaseRemoteConfig.instanceFor(app: app);
    await _remoteConfig!.setConfigSettings(RemoteConfigSettings(
      fetchTimeout: const Duration(minutes: 1),
      minimumFetchInterval: const Duration(hours: 1),
    ));

    // Initialize SharedPreferences for caching
    _prefs = await SharedPreferences.getInstance();

    // Load cached data
    await _loadCachedData();

    // Load base URL override if exists
    final override = _prefs!.getString('${_cacheKeyBaseUrl}_override');
    if (override != null) {
      _baseUrlOverride = override;
      FinanceSdkLogger.info('Loaded base URL override: $override');
    }

    // Load bearer token if exists
    final token = _prefs!.getString(_cacheKeyBearerToken);
    if (token != null) {
      _bearerToken = token;
      FinanceSdkLogger.info('Loaded bearer token');
    }

    // Fetch fresh data
    await _fetchAllData();

    _isInitialized = true;
    FinanceSdkLogger.info('Firebase services initialized successfully');
  } catch (e) {
    FinanceSdkLogger.error('Failed to initialize Firebase services', e);
    rethrow;
  }
}