local v3 = worldeditadditions_core.Vector3

-- ██     ██ ██ ██████  ███████     ██████   ██████  ██   ██
-- ██     ██ ██ ██   ██ ██          ██   ██ ██    ██  ██ ██
-- ██  █  ██ ██ ██████  █████       ██████  ██    ██   ███
-- ██ ███ ██ ██ ██   ██ ██          ██   ██ ██    ██  ██ ██
--  ███ ███  ██ ██   ██ ███████     ██████   ██████  ██   ██

--- Fills the edges of the selection box with nodes.
-- @param	{Position}	pos1	The 1st position defining the WorldEdit selection
-- @param	{Position}	pos2	The 2nd positioon defining the WorldEdit selection
-- @param	{string}	node	Name of the node to place
function worldeditadditions.wire_box(pos1,pos2,node)
	local node_id_replace = minetest.get_content_id(node)
	local ps1, ps2 = v3.sort(pos1,pos2)
	
	-- Fetch the nodes in the specified area
	local manip, area = worldedit.manip_helpers.init(pos1, pos2)
	local data = manip:get_data()
	
	-- Using three loops to reduce the number of nodes processed
	local counts = { replaced = 0 }
	
	for z = ps1.z,ps2.z do
		for _j,y in pairs({pos1.y,pos2.y}) do
			for _k,x in pairs({pos1.x,pos2.x}) do
				data[area:index(x, y, z)] = node_id_replace
				counts.replaced = counts.replaced + 1
			end
		end
	end
	if math.abs(ps2.y-ps1.y) > 1 then
		for _j,z in pairs({pos1.z,pos2.z}) do
			for y = pos1.y+1,pos2.y-1 do
				for _k,x in pairs({pos1.x,pos2.x}) do
					data[area:index(x, y, z)] = node_id_replace
					counts.replaced = counts.replaced + 1
				end
			end
		end
	end
	if math.abs(ps2.x-ps1.x) > 1 then
		for _j,z in pairs({pos1.z,pos2.z}) do
			for _k,y in pairs({pos1.y,pos2.y}) do
				for x = pos1.x+1,pos2.x-1 do
					data[area:index(x, y, z)] = node_id_replace
					counts.replaced = counts.replaced + 1
				end
			end
		end
	end
	-- Save the modified nodes back to disk & return
	worldedit.manip_helpers.finish(manip, data)
	
	return true, counts.replaced
end
