# frozen-string-literal: true

module Plum
  module HPACK
    # RFC7541 Appendix A
    # index is starting from 0
    STATIC_TABLE = [
      [":authority", ""],
      [":method", "GET"],
      [":method", "POST"],
      [":path", "/"],
      [":path", "/index.html"],
      [":scheme", "http"],
      [":scheme", "https"],
      [":status", "200"],
      [":status", "204"],
      [":status", "206"],
      [":status", "304"],
      [":status", "400"],
      [":status", "404"],
      [":status", "500"],
      ["accept-charset"],
      ["accept-encoding", "gzip, deflate"],
      ["accept-language", ""],
      ["accept-ranges", ""],
      ["accept", ""],
      ["access-control-allow-origin", ""],
      ["age", ""],
      ["allow", ""],
      ["authorization", ""],
      ["cache-control", ""],
      ["content-disposition", ""],
      ["content-encoding", ""],
      ["content-language", ""],
      ["content-length", ""],
      ["content-location", ""],
      ["content-range", ""],
      ["content-type", ""],
      ["cookie", ""],
      ["date", ""],
      ["etag", ""],
      ["expect", ""],
      ["expires", ""],
      ["from", ""],
      ["host", ""],
      ["if-match", ""],
      ["if-modified-since", ""],
      ["if-none-match", ""],
      ["if-range", ""],
      ["if-unmodified-since", ""],
      ["last-modified", ""],
      ["link", ""],
      ["location", ""],
      ["max-forwards", ""],
      ["proxy-authenticate", ""],
      ["proxy-authorization", ""],
      ["range", ""],
      ["referer", ""],
      ["refresh", ""],
      ["retry-after", ""],
      ["server", ""],
      ["set-cookie", ""],
      ["strict-transport-security", ""],
      ["transfer-encoding", ""],
      ["user-agent", ""],
      ["vary", ""],
      ["via", ""],
      ["www-authenticate", ""],
    ].freeze

    STATIC_TABLE_SIZE = STATIC_TABLE.size

    HUFFMAN_TABLE = [
      "1111111111000",
      "11111111111111111011000",
      "1111111111111111111111100010",
      "1111111111111111111111100011",
      "1111111111111111111111100100",
      "1111111111111111111111100101",
      "1111111111111111111111100110",
      "1111111111111111111111100111",
      "1111111111111111111111101000",
      "111111111111111111101010",
      "111111111111111111111111111100",
      "1111111111111111111111101001",
      "1111111111111111111111101010",
      "111111111111111111111111111101",
      "1111111111111111111111101011",
      "1111111111111111111111101100",
      "1111111111111111111111101101",
      "1111111111111111111111101110",
      "1111111111111111111111101111",
      "1111111111111111111111110000",
      "1111111111111111111111110001",
      "1111111111111111111111110010",
      "111111111111111111111111111110",
      "1111111111111111111111110011",
      "1111111111111111111111110100",
      "1111111111111111111111110101",
      "1111111111111111111111110110",
      "1111111111111111111111110111",
      "1111111111111111111111111000",
      "1111111111111111111111111001",
      "1111111111111111111111111010",
      "1111111111111111111111111011",
      "010100",
      "1111111000",
      "1111111001",
      "111111111010",
      "1111111111001",
      "010101",
      "11111000",
      "11111111010",
      "1111111010",
      "1111111011",
      "11111001",
      "11111111011",
      "11111010",
      "010110",
      "010111",
      "011000",
      "00000",
      "00001",
      "00010",
      "011001",
      "011010",
      "011011",
      "011100",
      "011101",
      "011110",
      "011111",
      "1011100",
      "11111011",
      "111111111111100",
      "100000",
      "111111111011",
      "1111111100",
      "1111111111010",
      "100001",
      "1011101",
      "1011110",
      "1011111",
      "1100000",
      "1100001",
      "1100010",
      "1100011",
      "1100100",
      "1100101",
      "1100110",
      "1100111",
      "1101000",
      "1101001",
      "1101010",
      "1101011",
      "1101100",
      "1101101",
      "1101110",
      "1101111",
      "1110000",
      "1110001",
      "1110010",
      "11111100",
      "1110011",
      "11111101",
      "1111111111011",
      "1111111111111110000",
      "1111111111100",
      "11111111111100",
      "100010",
      "111111111111101",
      "00011",
      "100011",
      "00100",
      "100100",
      "00101",
      "100101",
      "100110",
      "100111",
      "00110",
      "1110100",
      "1110101",
      "101000",
      "101001",
      "101010",
      "00111",
      "101011",
      "1110110",
      "101100",
      "01000",
      "01001",
      "101101",
      "1110111",
      "1111000",
      "1111001",
      "1111010",
      "1111011",
      "111111111111110",
      "11111111100",
      "11111111111101",
      "1111111111101",
      "1111111111111111111111111100",
      "11111111111111100110",
      "1111111111111111010010",
      "11111111111111100111",
      "11111111111111101000",
      "1111111111111111010011",
      "1111111111111111010100",
      "1111111111111111010101",
      "11111111111111111011001",
      "1111111111111111010110",
      "11111111111111111011010",
      "11111111111111111011011",
      "11111111111111111011100",
      "11111111111111111011101",
      "11111111111111111011110",
      "111111111111111111101011",
      "11111111111111111011111",
      "111111111111111111101100",
      "111111111111111111101101",
      "1111111111111111010111",
      "11111111111111111100000",
      "111111111111111111101110",
      "11111111111111111100001",
      "11111111111111111100010",
      "11111111111111111100011",
      "11111111111111111100100",
      "111111111111111011100",
      "1111111111111111011000",
      "11111111111111111100101",
      "1111111111111111011001",
      "11111111111111111100110",
      "11111111111111111100111",
      "111111111111111111101111",
      "1111111111111111011010",
      "111111111111111011101",
      "11111111111111101001",
      "1111111111111111011011",
      "1111111111111111011100",
      "11111111111111111101000",
      "11111111111111111101001",
      "111111111111111011110",
      "11111111111111111101010",
      "1111111111111111011101",
      "1111111111111111011110",
      "111111111111111111110000",
      "111111111111111011111",
      "1111111111111111011111",
      "11111111111111111101011",
      "11111111111111111101100",
      "111111111111111100000",
      "111111111111111100001",
      "1111111111111111100000",
      "111111111111111100010",
      "11111111111111111101101",
      "1111111111111111100001",
      "11111111111111111101110",
      "11111111111111111101111",
      "11111111111111101010",
      "1111111111111111100010",
      "1111111111111111100011",
      "1111111111111111100100",
      "11111111111111111110000",
      "1111111111111111100101",
      "1111111111111111100110",
      "11111111111111111110001",
      "11111111111111111111100000",
      "11111111111111111111100001",
      "11111111111111101011",
      "1111111111111110001",
      "1111111111111111100111",
      "11111111111111111110010",
      "1111111111111111101000",
      "1111111111111111111101100",
      "11111111111111111111100010",
      "11111111111111111111100011",
      "11111111111111111111100100",
      "111111111111111111111011110",
      "111111111111111111111011111",
      "11111111111111111111100101",
      "111111111111111111110001",
      "1111111111111111111101101",
      "1111111111111110010",
      "111111111111111100011",
      "11111111111111111111100110",
      "111111111111111111111100000",
      "111111111111111111111100001",
      "11111111111111111111100111",
      "111111111111111111111100010",
      "111111111111111111110010",
      "111111111111111100100",
      "111111111111111100101",
      "11111111111111111111101000",
      "11111111111111111111101001",
      "1111111111111111111111111101",
      "111111111111111111111100011",
      "111111111111111111111100100",
      "111111111111111111111100101",
      "11111111111111101100",
      "111111111111111111110011",
      "11111111111111101101",
      "111111111111111100110",
      "1111111111111111101001",
      "111111111111111100111",
      "111111111111111101000",
      "11111111111111111110011",
      "1111111111111111101010",
      "1111111111111111101011",
      "1111111111111111111101110",
      "1111111111111111111101111",
      "111111111111111111110100",
      "111111111111111111110101",
      "11111111111111111111101010",
      "11111111111111111110100",
      "11111111111111111111101011",
      "111111111111111111111100110",
      "11111111111111111111101100",
      "11111111111111111111101101",
      "111111111111111111111100111",
      "111111111111111111111101000",
      "111111111111111111111101001",
      "111111111111111111111101010",
      "111111111111111111111101011",
      "1111111111111111111111111110",
      "111111111111111111111101100",
      "111111111111111111111101101",
      "111111111111111111111101110",
      "111111111111111111111101111",
      "111111111111111111111110000",
      "11111111111111111111101110",
      "111111111111111111111111111111"
    ].freeze
    
    HUFFMAN_TABLE_INVERSED = HUFFMAN_TABLE.each_with_index.to_h.freeze
  end
end
