mirrored_repositories/AppFlowy/frontend/appflowy_flutter/lib
import 'dart:io';

import 'package:flutter/material.dart';

import 'package:appflowy/shared/patterns/common_patterns.dart';

extension StringExtension on String {
  static const _specialCharacters = r'\/:*?"<>| ';

  /// Encode a string to a file name.
  ///
  /// Normalizes the string to remove special characters and replaces the "\/:*?"<>|" with underscores.
  String toFileName() {
    final buffer = StringBuffer();
    for (final character in characters) {
      if (_specialCharacters.contains(character)) {
        buffer.write('_');
      } else {
        buffer.write(character);
      }
    }
    return buffer.toString();
  }

  /// Returns the file size of the file at the given path.
  ///
  /// Returns null if the file does not exist.
  int? get fileSize {
    final file = File(this);
    if (file.existsSync()) {
      return file.lengthSync();
    }
    return null;
  }

  /// Returns true if the string is a appflowy cloud url.
  bool get isAppFlowyCloudUrl => appflowyCloudUrlRegex.hasMatch(this);
}
