namespace Gma.QrCodeNet.Encoding
{
	/// <summary>
	/// Contain most of common constant variables. S
	/// </summary>
	public static class QRCodeConstantVariable
	{
		public const int MinVersion = 1;
		public const int MaxVersion = 40;

		public const string DefaultEncoding = "iso-8859-1";
		public const string UTF8Encoding = "utf-8";

		/// <summary>
		/// ISO/IEC 18004:2006(E) Page 45 Chapter Generating the error correction codewords
		/// Primative Polynomial = Bin 100011101 = Dec 285
		/// </summary>
		public const int QRCodePrimitive = 285;

		internal const int TerminatorNPaddingBit = 0;

		internal const int TerminatorLength = 4;

		/// <summary>
		/// 0xEC
		/// </summary>
		internal const int PadeCodewordsOdd = 0xec;

		/// <summary>
		/// 0x11
		/// </summary>
		internal const int PadeCodewordsEven = 0x11;

		internal const int PositionStencilWidth = 7;

		internal static bool[] PadeOdd = new bool[]
		{
			true, true, true, false,
			true, true, false, false
		};

		internal static bool[] PadeEven = new bool[]
		{
			false, false, false, true,
			false, false, false, true
		};

		/// <summary>
		/// URL:http://en.wikipedia.org/wiki/Byte-order_mark
		/// </summary>
		public static byte[] UTF8ByteOrderMark => new byte[] { 0xEF, 0xBB, 0xBF };
	}
}
