#pragma once
#include <string>
#include <fnd/ISerialisable.h>
#include <es/ticket.h>

namespace es
{
	class SectionHeader_V2 :
		public fnd::ISerialisable
	{
	public:
		SectionHeader_V2();
		SectionHeader_V2(const SectionHeader_V2& other);

		void operator=(const SectionHeader_V2& other);
		bool operator==(const SectionHeader_V2& other) const;
		bool operator!=(const SectionHeader_V2& other) const;

		// export/import binary
		void toBytes();
		void fromBytes(const byte_t* data, size_t len);
		const fnd::Vec<byte_t>& getBytes() const;

		// variables
		virtual void clear();

		uint32_t getSectionOffset() const;
		void setSectionOffset(uint32_t offset);

		uint32_t getRecordSize() const;
		void setRecordSize(uint32_t size);

		uint32_t getSectionSize() const;
		void getSectionSize(uint32_t size);

		uint16_t getRecordNum() const;
		void setRecordNum(uint16_t record_num);

		ticket::SectionType getSectionType() const;
		void setSectionType(ticket::SectionType type);

	private:
		const std::string kModuleName = "SECTION_HEADER_V2";
		
		// raw binary
		fnd::Vec<byte_t> mRawBinary;

		// variables
		uint32_t mSectionOffset;
		uint32_t mRecordSize;
		uint32_t mSectionSize;
		uint16_t mRecordNum;
		ticket::SectionType mSectionType;
	};

}