#pragma once
#include "header.h"

namespace ID3v2_21
{
#pragma pack(push, 1)
	struct ExtendedHeaderData
	{
		uint32_t size;
	};
#pragma pack(pop)

	class ExtendedHeaderBase
	{
	public:
		ExtendedHeaderBase(const ID3v2::Header &_tagHeader);
		int Parse(const void *_data, size_t len, size_t *bytes_read);
		enum
		{
			SIZE=4,
		};
	protected:
		uint32_t Size() const;
		void *data;
		size_t data_size;
		ExtendedHeaderData headerData;
		const ID3v2::Header &tagHeader;
	};
}

namespace ID3v2_3
{
	class ExtendedHeader : public ID3v2_21::ExtendedHeaderBase
	{
	public:
		ExtendedHeader(const ID3v2::Header &_tagHeader);
	};
}

namespace ID3v2_4
{
	class ExtendedHeader : public ID3v2_21::ExtendedHeaderBase
	{
	public:
		ExtendedHeader(const ID3v2::Header &_tagHeader);
		int Parse(const void *_data, size_t len, size_t *bytes_read);

	protected:
		uint32_t Size() const;

	};
}