namespace SharpCompress.Compressors.Rar.UnpackV1.Decode
{
    internal static class PackDef
    {
        // 20171217 NOTE: these contants are gone from unrar src code
        // seems to be more dynamic
        public const int MAXWINSIZE = 0x400000;
        public const int MAXWINMASK = MAXWINSIZE - 1;

        public const uint MAX_LZ_MATCH = 0x1001;
        public const uint MAX3_LZ_MATCH = 0x101; // Maximum match length for RAR v3.
        public const int LOW_DIST_REP_COUNT = 16;

        public const int NC = 299; /* alphabet = {0, 1, 2, ..., NC - 1} */
        public const int DC = 60;
        public const int LDC = 17;
        public const int RC = 28;
        // 20171217: NOTE: these constants seem to have been updated in the unrar src code
        // at some unknown point.  updating causes decompression failure, not sure why.
        //        public const int NC    = 306; /* alphabet = {0, 1, 2, ..., NC - 1} */
        //        public const int DC    = 64;
        //        public const int LDC   = 16;
        //        public const int RC    = 44;
        public const int HUFF_TABLE_SIZE = NC + DC + RC + LDC;
        public const int BC = 20;

        public const uint NC30 = 299; /* alphabet = {0, 1, 2, ..., NC - 1} */
        public const uint DC30 = 60;
        public const uint LDC30 = 17;
        public const uint RC30 = 28;
        public const uint BC30 = 20;
        public const uint HUFF_TABLE_SIZE30 = NC30 + DC30 + RC30 + LDC30;

        public const int NC20 = 298; /* alphabet = {0, 1, 2, ..., NC - 1} */
        public const int DC20 = 48;
        public const int RC20 = 28;
        public const int BC20 = 19;
        public const int MC20 = 257;

        // Largest alphabet size among all values listed above.
        public const uint LARGEST_TABLE_SIZE = 306;

        //public enum {
        //    CODE_HUFFMAN, CODE_LZ, CODE_REPEATLZ, CODE_CACHELZ, CODE_STARTFILE,
        //    CODE_ENDFILE, CODE_FILTER, CODE_FILTERDATA
        //}
    }
}