#pragma once

#include "ehs/EHS.h"
#include "ehs/Vec2.h"
#include "ehs/Rect.h"
#include "ehs/Serializer.h"

namespace ehs
{
	class Glyph
	{
	private:
		Char_32 code;
		Vec2_u64 pos;
		Vec2_u64 scale;
		Rect_f uv;
		Vec2_64 bearing;
		Vec2_64 advance;

	public:
		Glyph();

		Glyph(Serializer<>& ser);

		Glyph(const Char_32 code);

		Glyph(const Glyph& glyph);

		Glyph& operator=(const Glyph& glyph);

		bool operator==(const Glyph& glyph) const;

		bool operator!=(const Glyph& glyph) const;

		Char_32 GetCode() const;

		void SetPos(const Vec2_u64& newPos);

		Vec2_u64 GetPos() const;

		void SetScale(const Vec2_u64& newScale);

		Vec2_u64 GetScale() const;

		void SetUV(const Rect_f& newUV);

		Rect_f GetUV() const;

		void SetBearing(const Vec2_64& newBearing);

		Vec2_32 GetBearing() const;

		void SetAdvance(const Vec2_64& newAdvance);

		Vec2_32 GetAdvance() const;

		void Serialize(Serializer<>& ser) const;
	};
}