namespace Gma.QrCodeNet.Encoding
{
	public struct VersionDetail
	{
		internal VersionDetail(int version, int numTotalBytes, int numDataBytes, int numECBlocks)
			: this()
		{
			Version = version;
			NumTotalBytes = numTotalBytes;
			NumDataBytes = numDataBytes;
			NumECBlocks = numECBlocks;
		}

		internal int Version { get; private set; }
		internal int NumTotalBytes { get; private set; }
		internal int NumDataBytes { get; private set; }
		internal int NumECBlocks { get; private set; }

		internal int MatrixWidth => Width(Version);

		internal int ECBlockGroup1 => NumECBlocks - ECBlockGroup2;

		internal int ECBlockGroup2 => NumTotalBytes % NumECBlocks;

		internal int NumDataBytesGroup1 => NumDataBytes / NumECBlocks;

		internal int NumDataBytesGroup2 => NumDataBytesGroup1 + 1;

		internal int NumECBytesPerBlock => (NumTotalBytes - NumDataBytes) / NumECBlocks;

		internal static int Width(int version) => 17 + (4 * version);

		public override string ToString() => $"{Version};{NumTotalBytes};{NumDataBytes};{NumECBlocks}";
	}
}
