initialize method

Future<NotificationFailure?> initialize({
  1. bool autoRequestPermissions = true,
  2. UserPreferencesModel? userPreferences,
})

Initializes the notification manager and sets up all repositories.

Implementation

Future<NotificationFailure?> initialize({
  bool autoRequestPermissions = true,
  UserPreferencesModel? userPreferences,
}) async {
  try {
    if (_isInitialized) {
      safeDebugLog('Comprehensive notification manager already initialized');
      return null;
    }

    safeDebugLog('Initializing comprehensive notification manager');

    // Initialize both repositories
    final NotificationFailure? firebaseError = await _firebaseRepository
        .initialize();
    final NotificationFailure? localError = await _localRepository
        .initialize();

    if (firebaseError != null && localError != null) {
      safeDebugLog(
        '''Failed to initialize both repositories: Firebase: ${firebaseError.message}, Local: ${localError.message}''',
      );
      return NotificationFailure.initialization(
        details:
            '''Both Firebase and Local initialization failed. Firebase: ${firebaseError.message}, Local: ${localError.message}''',
      );
    }

    if (firebaseError != null) {
      safeDebugLog(
        'Firebase initialization failed: ${firebaseError.message}',
      );
    }

    if (localError != null) {
      safeDebugLog('Local initialization failed: ${localError.message}');
    }

    // Set up user preferences
    if (userPreferences != null) {
      _userPreferences = userPreferences;
    }

    // Request permissions if enabled
    if (autoRequestPermissions) {
      final (NotificationFailure? permissionError, PermissionStatus status) =
          await _permissionManager.requestAllPermissions();
      if (permissionError != null) {
        safeDebugLog('Permission request failed: ${permissionError.message}');
      } else {
        safeDebugLog('Permission status: $status');
      }
    }

    // Set up automatic foreground notification display for Firebase messages
    _setupForegroundNotificationDisplay();

    // Initialize foreground notification manager
    final ForegroundNotificationManager? foregroundManager =
        _foregroundManager;
    if (foregroundManager != null) {
      final NotificationFailure? foregroundError = foregroundManager
          .initialize();
      if (foregroundError != null) {
        safeDebugLog(
          '''Foreground manager initialization failed: ${foregroundError.message}''',
        );
      } else {
        safeDebugLog('Foreground notification manager initialized');
      }
    }

    _isInitialized = true;
    safeDebugLog(
      'Comprehensive notification manager initialized successfully',
    );
    return null;
  } catch (e, stackTrace) {
    safeDebugLog('Failed to initialize notification manager: $e');
    return NotificationFailure.initialization(
      details: e.toString(),
      stackTrace: stackTrace,
    );
  }
}