#pragma once

#include <optional>
#include <filesystem>
#include <unordered_map>

#include "content/file/file.hpp"

// данный буфер позволяетпо ключу найти состояние history и preview
// key - это откуда ты идешь
// value - это то, что тебя там ждет.
// т.е. буфер хранит наши прошщлые похождения
// и это отображается в history
namespace rrr
{
  struct content_hash 
  {
    std::size_t operator()(const std::optional<file>& f) const 
    {
      return f ? std::filesystem::hash_value(f.value().path) : 0;
    }
  };

  struct opt_path_hash 
  {
    std::size_t operator()(const std::optional<std::filesystem::path>& path) const 
    {
      return path ? std::filesystem::hash_value(path.value()) : 0;
    }
  };

  struct buffers
  {
    using single_buffer_t = std::map<int, file>;
    using path_buffer_t = std::unordered_map<std::filesystem::path, file, opt_path_hash>;

    single_buffer_t single_copy_buffer; // для хранения отмеченный файлов. в моменте может быть только один файл
    single_buffer_t single_cut_buffer; // для хранения отмеченный файлов. в моменте может быть только один файл
    path_buffer_t path_buffer; // для хранения истории пути пользователя

    static buffers& get_instance()
    {
      static buffers bf;
      return bf;
    }
  };
}

