// Copyright (C) 2023 WYATT GROUP
// Please see the AUTHORS file for details.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.

import 'dart:convert';

import 'package:flutter/services.dart';

/// A class that contains utility methods for assets.
abstract class AssetsUtils {
  /// Checks if the given [assetPath] is a local asset.
  ///
  /// In fact, this method loads the asset and checks if it is null.
  static Future<bool> assetExists(String assetPath) async {
    final encoded = utf8.encoder.convert(
      Uri(path: Uri.encodeFull(assetPath)).path,
    );
    final asset = await ServicesBinding.instance.defaultBinaryMessenger
        .send('flutter/assets', encoded.buffer.asByteData());

    return asset != null;
  }

  /// Cleans the given [path] by removing all the consecutive slashes.
  /// For example, `///a///b///c///` becomes `/a/b/c/`.
  /// It also removes the first slash if it exists.
  static String cleanPath(String path) =>
      path.replaceAll(RegExp(r'\/+'), '/').replaceFirst(RegExp(r'^\/'), '');
}
