formatForUI static method

Map<String, dynamic> formatForUI(
  1. dynamic rulesResult, {
  2. bool includeTimestamp = true,
  3. bool includeRawResult = true,
  4. String? customMessage,
})

Process rules result keeping raw format and adding organized arrays

Implementation

static Map<String, dynamic> formatForUI(
  dynamic rulesResult, {
  bool includeTimestamp = true,
  bool includeRawResult = true,
  String? customMessage,
}) {
  // Handle null case
  if (rulesResult == null) {
    return {
      'success': false,
      'error': 'No result provided',
      'tags': <Map<String, dynamic>>[],
      'variables': <Map<String, dynamic>>[],
      'actions': <Map<String, dynamic>>[],
      'metrics': <Map<String, dynamic>>[],
      if (includeTimestamp)
        'timestamp': DateTime.now().millisecondsSinceEpoch,
    };
  }

  // If it's a RulesResult object, use its built-in toMap() method
  if (rulesResult.runtimeType.toString().contains('RulesResult')) {
    final baseMap = rulesResult.toMap();

    // Add extra fields as needed
    if (includeTimestamp) {
      baseMap['timestamp'] = DateTime.now().millisecondsSinceEpoch;
    }

    if (includeRawResult && rulesResult.rawResult != null) {
      baseMap['rawResult'] = rulesResult.rawResult;
    }

    if (customMessage != null) {
      baseMap['message'] = customMessage;
    }

    return baseMap;
  }

  // If it's already a Map (rawResult), handle different formats
  if (rulesResult is Map) {
    // Convert any Map type (including IdentityMap) to Map<String, dynamic>
    final cleanMap = Map<String, dynamic>.from(rulesResult);
    return _formatFromRawMap(
      cleanMap,
      includeTimestamp: includeTimestamp,
      includeRawResult: includeRawResult,
      customMessage: customMessage,
    );
  }

  // Fallback - convert to string representation
  return {
    'success': false,
    'error': 'Unknown result format: ${rulesResult.runtimeType}',
    'rawResult': rulesResult.toString(),
    'tags': <Map<String, dynamic>>[],
    'variables': <Map<String, dynamic>>[],
    'actions': <Map<String, dynamic>>[],
    'metrics': <Map<String, dynamic>>[],
    if (includeTimestamp) 'timestamp': DateTime.now().millisecondsSinceEpoch,
  };
}