#pragma once
#include <cstdint>
#include <string>

#include "IFileSystemEntity.h"

namespace System::IO {
class File : public IFileSystemEntity {
private:
  std::wstring path;

public:
  explicit File(const std::wstring &filePath);
  ~File() override = default;

  std::wstring GetPath() const override;
  static DWORD GetAttributes(const std::wstring &path);
  static bool SetAttributes(const std::wstring &path, DWORD attributes);

  static bool Exists(const std::wstring &path);
  static bool Copy(const std::wstring &source, const std::wstring &destination,
                   bool overwrite = false);
  static bool Delete(const std::wstring &path);
  static bool Move(const std::wstring &source, const std::wstring &destination);
  static uint64_t GetSize(const std::wstring &path);
};
} // namespace System::IO
