#pragma once

#include "ehs/EHS.h"
#include "ehs/Str.h"
#include "ehs/Array.h"
#include "AnimBone.h"

namespace ehs
{
	class EHS_LIB_IO Animation
	{
	private:
		UInt_64 hashId;
		Str_8 id;
		float duration;
		Array<AnimBone> animated;

	public:
		Animation();

		Animation(Str_8 id, const float duration);

		Animation(Str_8 id, const float duration, UInt_64 size);

		Animation(Str_8 id, const float duration, Array<AnimBone> animated);

		Animation(Animation&& anim) noexcept;

		Animation(const Animation& anim);

		Animation& operator=(Animation&& anim) noexcept;

		Animation& operator=(const Animation& anim);

		UInt_64 GetHashId() const;

		void SetId(Str_8 newId);

		Str_8 GetId() const;

		float GetDuration() const;

		Array<AnimBone> GetAnimated() const;

		Array<AnimBone>& GetAnimated();

		Array<Mat4_f> Interpolate(const UInt_64 boneCount, const float elapsed) const;
	};
}