#pragma once
#include <string>
#include <cstring>
#include <fnd/IByteModel.h>
#include <nn/hac/define/cnmt.h>

namespace nn
{
namespace hac
{
	class ContentInfo :
		public fnd::IByteModel
	{
	public:
		ContentInfo();
		ContentInfo(const ContentInfo& other);

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

		// IByteModel
		void toBytes();
		void fromBytes(const byte_t* bytes, size_t len);
		const fnd::Vec<byte_t>& getBytes() const;

		// variables
		void clear();

		const fnd::sha::sSha256Hash& getContentHash() const;
		void setContentHash(const fnd::sha::sSha256Hash& hash);

		const cnmt::sContentId& getContentId() const;
		void setContentId(const cnmt::sContentId& content_id);

		size_t getContentSize() const;
		void setContentSize(size_t size);

		cnmt::ContentType getContentType() const;
		void setContentType(cnmt::ContentType type);

		byte_t getIdOffset() const;
		void setIdOffset(byte_t id_offset);

	private:
		const std::string kModuleName = "CONTENT_INFO";

		// binary blob
		fnd::Vec<byte_t> mRawBinary;

		// variables
		fnd::sha::sSha256Hash mHash;
		cnmt::sContentId mContentId;
		size_t mSize;
		cnmt::ContentType mType;
		byte_t mIdOffset;
	};
}
}