PyuTest.FURNITURE_NODEBOXES = {
  TABLE = {
    type = "connected",
    fixed = {
      { -0.5,  0.5,  -0.5,  0.5,  0.45, 0.5 },
      { -0.15, -0.5, -0.15, 0.15, 0.45, 0.15 },
    },
  }
}

PyuTest.registered_furniture = {}
PyuTest.make_furniture = function(name, desc, craft, tiles, cgroups, extra_conf)
  local econf = extra_conf or {}
  local groups = PyuTest.util.tablecopy(cgroups) or {
    block = PyuTest.BLOCK_BREAKABLE_NORMAL
  }
  groups["block"] = groups["block"] or PyuTest.BLOCK_BREAKABLE_NORMAL
  groups["furniture"] = 1

  local id_table = name .. "_table"
  local id_chair = name .. "_chair"
  local id_mtable = name .. "_mtable"

  minetest.register_node(id_table, PyuTest.util.tableconcat({
    description = Translate(desc .. " Table"),
    tiles = tiles,
    groups = PyuTest.util.tableconcat(groups, {
      table = 1
    }),
    sounds = PyuTest.make_node_sounds(),
    drawtype = "nodebox",
    paramtype = "light",
    node_box = PyuTest.FURNITURE_NODEBOXES.TABLE,
    connects_to = { "group:table" }
  }, econf))

  minetest.register_node(id_chair, PyuTest.util.tableconcat({
    description = Translate(desc .. " Chair"),
    tiles = tiles,
    groups = PyuTest.util.tableconcat(groups, {
      chair = 1,
      attached_node = 3,
    }),
    sounds = PyuTest.make_node_sounds(),
    paramtype = "light",
    paramtype2 = "4dir",
    drawtype = "mesh",
    mesh = "chair.obj",
    selection_box = {
      type = "fixed",
      fixed = { -0.5, -0.5, -0.5, 0.5, 1.1, 0.5 }
    },
    collision_box = {
      type = "fixed",
      fixed = {
        { -0.5, -0.5, -0.5, 0.5, 0.10, 0.5 }
      }
    }
  }, econf))

  minetest.register_node(id_mtable, PyuTest.util.tableconcat({
    description = Translate(desc .. " Mini Table"),
    tiles = tiles,
    groups = PyuTest.util.tableconcat(groups, {
      mtable = 1,
      attached_node = 3,
    }),
    sounds = PyuTest.make_node_sounds(),
    paramtype = "light",
    paramtype2 = "4dir",
    drawtype = "mesh",
    mesh = "mtable.obj",
    selection_box = {
      type = "fixed",
      fixed = { -0.5, -0.5, -0.5, 0.5, 0.25, 0.5 }
    },
    collision_box = {
      type = "fixed",
      fixed = {
        { -0.5, -0.5, -0.5, 0.5, 0.25, 0.5 }
      }
    }
  }, econf))

  minetest.register_craft({
    output = id_table .. " 4",
    recipe = {
      { craft, craft, craft },
      { "",    craft, "" },
      { "",    craft, "" }
    }
  })

  minetest.register_craft({
    output = id_chair .. " 4",
    recipe = {
      { craft, "",    "" },
      { craft, craft, craft },
      { craft, "",    craft }
    }
  })

  minetest.register_craft({
    output = id_mtable .. " 4",
    recipe = {
      { craft, craft, craft },
      { craft, craft, craft }
    }
  })

  PyuTest.registered_furniture[name] = {
    craft = craft,
    groups = groups,
    tiles = tiles,
    econf = econf
  }
end

for _, v in pairs(PyuTest.building_blocks) do
  PyuTest.make_furniture("pyutest_furniture:"..v.name, v.desc, v.ns..":"..v.name .. "_block", v.tiles, v.groups, v.econf)
end
