#pragma once

#include "ehs/Types.h"
#include "ehs/Str.h"
#include "ehs/Vec2.h"
#include "ehs/BaseObj.h"

namespace ehs
{
	class EHS_LIB_IO Resource : public BaseObj
	{
	private:
		ehs::UInt_64 hashId;
		ehs::Str_8 id;

	public:
		Resource();

		Resource(ehs::Str_8 id);

		Resource(Resource&& rsrc) noexcept;

		Resource(const Resource& rsrc);

		Resource& operator=(Resource&& rsrc) noexcept;

		Resource& operator=(const Resource& rsrc);

		bool operator==(ehs::UInt_64 otherHashId) const;

		bool operator!=(ehs::UInt_64 otherHashId) const;

		virtual void Release();

		void SetId(ehs::Str_8 newId);

		ehs::UInt_64 GetHashId() const;

		ehs::Str_8 GetId() const;

		virtual bool IsValid() const;

		Resource* Clone() const override;
	};
}