#pragma once
#include <filesystem>
#include <list>
#include "random.hpp"
#include "string-util.hpp"
namespace a83 {
/// получить имя файла (без расширения)
a83::Str get_filename(const a83::Str& str) {
  std::filesystem::path path(str);
  return path.stem().string();
}
/// получить расширение файла
a83::Str get_fileext(const a83::Str& str) {
  std::filesystem::path path(str);
  return path.extension().string();
}
//! получить путь до файла. перед вызовом переконвертируй сепараторы
a83::Str get_filedir(CN(a83::Str) str)
  { return str.substr(0, str.find_last_of(SEPARATOR)); }
//! генерит рандомное название файла по имени другого файла
a83::Str get_rand_filename(const a83::Str& str) {
  return get_filedir(str) + SEPARATOR + get_filename(str) +
    "_" + n2s(irand()) + get_fileext(str);
}
//! получить имена файлов в директории
std::list<a83::Str> files_in_dir(const a83::Str& path) {
  std::list<a83::Str> ret = {};
  for (cnauto entry : std::filesystem::directory_iterator(path))
    ret.push_back(entry.path().string());
  return ret;
}
//! создаёт папку, если её нет
void make_dir_if_not_exist(CN(a83::Str) dir) {
  namespace fs = std::filesystem;
  // Check if src folder exists
  if ( !fs::is_directory(dir) || !fs::exists(dir))
    fs::create_directory(dir);
}
} // a83