local tower_battle = {
  [10101] = {
    [-1] = -1,
    [-2] = -2,
    [-3] = -3,
    [-4] = -4,
    [-5] = {
      [-6] = -5,
      [-7] = -6
    },
    [-8] = {-7, -8},
    [-9] = {
      {
        -9,
        -3,
        -10
      },
      {
        -9,
        -11,
        -12
      }
    },
    [-10] = -13
  },
  [10102] = {
    [-1] = -14,
    [-2] = -2,
    [-3] = -11,
    [-4] = -4,
    [-5] = {
      [-6] = -5,
      [-7] = -15
    },
    [-8] = {-7, -8},
    [-9] = {
      {
        -9,
        -3,
        -16
      },
      {
        -9,
        -11,
        -17
      }
    },
    [-10] = -18
  },
  [10103] = {
    [-1] = -19,
    [-2] = -2,
    [-3] = -20,
    [-4] = -4,
    [-5] = {
      [-6] = -5,
      [-7] = -21
    },
    [-8] = {-7, -8},
    [-9] = {
      {
        -9,
        -3,
        -22
      },
      {
        -9,
        -11,
        -23
      }
    },
    [-10] = -24
  },
  [10104] = {
    [-1] = -25,
    [-2] = -2,
    [-3] = -26,
    [-4] = -4,
    [-5] = {
      [-6] = -5,
      [-7] = -27
    },
    [-8] = {-7, -8},
    [-9] = {
      {
        -9,
        -3,
        -28
      },
      {
        -9,
        -11,
        -23
      }
    },
    [-10] = -29
  },
  [10105] = {
    [-1] = -30,
    [-2] = -2,
    [-3] = -31,
    [-4] = -4,
    [-5] = {
      [-6] = -5,
      [-7] = -32
    },
    [-8] = {-7, -8},
    [-9] = {
      {
        -9,
        -3,
        -28
      },
      {
        -9,
        -11,
        -33
      }
    },
    [-10] = -34
  },
  [10106] = {
    [-1] = -35,
    [-2] = -2,
    [-3] = -36,
    [-4] = -4,
    [-5] = {
      [-6] = -5,
      [-7] = -37
    },
    [-8] = {-7, -8},
    [-9] = {
      {
        -9,
        -3,
        -28
      },
      {
        -9,
        -11,
        -33
      }
    },
    [-10] = -38
  }
}
local key_to_index_map = {
  id = -1,
  towerId = -2,
  order = -3,
  battleId = -4,
  levelName = -5,
  group = -6,
  langKey = -7,
  enemyId = -8,
  reward = -9,
  scoreReward = -10
}
local index_to_key_map = {}
for k, v in pairs(key_to_index_map) do
  index_to_key_map[v] = k
end
local value_to_index_map = {
  [10101] = -1,
  [101] = -2,
  [1] = -3,
  [102] = -4,
  lang_tower_battle = -5,
  ["10101_4_0"] = -6,
  [300111] = -7,
  [300112] = -8,
  [10] = -9,
  [150] = -10,
  [2] = -11,
  [18300] = -12,
  [20] = -13,
  [10102] = -14,
  ["10102_4_0"] = -15,
  [210] = -16,
  [27450] = -17,
  [30] = -18,
  [10103] = -19,
  [3] = -20,
  ["10103_4_0"] = -21,
  [240] = -22,
  [32025] = -23,
  [40] = -24,
  [10104] = -25,
  [4] = -26,
  ["10104_4_0"] = -27,
  [300] = -28,
  [60] = -29,
  [10105] = -30,
  [5] = -31,
  ["10105_4_0"] = -32,
  [36600] = -33,
  [120] = -34,
  [10106] = -35,
  [6] = -36,
  ["10106_4_0"] = -37,
  [200] = -38
}
local index_to_value_map = {}
for k, v in pairs(value_to_index_map) do
  index_to_value_map[v] = k
end

local function SetReadonlyTable(t)
  for k, v in pairs(t) do
    if type(v) == "table" then
      t[k] = SetReadonlyTable(v)
    end
  end
  local mt = {
    __data = t,
    __index_to_key_map = index_to_key_map,
    __key_to_index_map = key_to_index_map,
    __index_to_value_map = index_to_value_map,
    __index = function(t, k)
      local tmt = getmetatable(t)
      local data = tmt.__data
      local value_index
      if tmt.__key_to_index_map[k] ~= nil then
        value_index = data[tmt.__key_to_index_map[k]]
      else
        value_index = data[k]
      end
      if type(value_index) == "table" then
        return value_index
      else
        return tmt.__index_to_value_map[value_index]
      end
    end,
    __newindex = function(t, k, v)
      errorf("attempt to modify a read-only talbe!", 2)
    end,
    __pairs = function(t, k)
      return function(t, k)
        local tmt = getmetatable(t)
        local data = tmt.__data
        local nk, nv
        if tmt.__key_to_index_map[k] ~= nil then
          local iter_key = tmt.__key_to_index_map[k]
          nk, nv = next(data, iter_key)
        else
          nk, nv = next(data, k)
        end
        local key, value
        if tmt.__index_to_key_map[nk] ~= nil then
          key = tmt.__index_to_key_map[nk]
        else
          key = nk
        end
        if type(nv) == "table" then
          value = nv
        else
          value = tmt.__index_to_value_map[nv]
        end
        return key, value
      end, t, nil
    end,
    __len = function(t)
      local tmt = getmetatable(t)
      local data = tmt.__data
      return #data
    end
  }
  t = setmetatable({}, mt)
  return t
end

tower_battle = SetReadonlyTable(tower_battle)
return tower_battle
