runSchedulingDiagnostics method

Future<Map<String, dynamic>> runSchedulingDiagnostics()

Runs comprehensive diagnostics for scheduled notifications debugging.

Implementation

Future<Map<String, dynamic>> runSchedulingDiagnostics() async {
  if (!_isInitialized) {
    return <String, dynamic>{
      'error': 'Notification manager not initialized',
      'initialized': false,
    };
  }

  final Map<String, dynamic> diagnostics = <String, dynamic>{
    'initialized': _isInitialized,
    'user_preferences': _userPreferences?.toMap(),
    'current_time': DateTime.now().toIso8601String(),
  };

  // Check permissions
  final (NotificationFailure? permissionError, PermissionStatus status) =
      await checkPermissionStatus();
  diagnostics['permission_status'] = status.toString();
  if (permissionError != null) {
    diagnostics['permission_error'] = permissionError.message;
  }

  // Check pending notifications
  final (
    NotificationFailure? pendingError,
    List<NotificationEntity>? pending,
  ) = await getPendingNotifications();
  diagnostics['pending_notifications_count'] = pending?.length ?? 0;
  if (pendingError != null) {
    diagnostics['pending_error'] = pendingError.message;
  }

  // Test a simple scheduled notification
  try {
    final DateTime testTime = DateTime.now().add(const Duration(seconds: 10));
    final NotificationPayload testPayload = NotificationPayload(
      id: 'diagnostic_test_${DateTime.now().millisecondsSinceEpoch}',
      title: '🧪 Scheduling Test',
      body: 'This is a diagnostic test notification',
      importance: NotificationImportance.high,
      priority: NotificationPriority.high,
    );

    final NotificationFailure? testError = await scheduleNotification(
      testPayload,
      testTime,
      respectUserPreferences: false,
    );

    diagnostics['test_scheduling'] = <String, dynamic>{
      'success': testError == null,
      'error': testError?.message,
      'scheduled_time': testTime.toIso8601String(),
    };

    // Clean up test notification
    if (testError == null) {
      await cancelNotification(testPayload.id);
    }
  } catch (e) {
    diagnostics['test_scheduling'] = <String, dynamic>{
      'success': false,
      'error': 'Exception during test: $e',
    };
  }

  return diagnostics;
}