-- This file is basically most of the old init.lua and only supplies the
-- old nodes created by the previous verison of Pipeworks.
--
-- License: WTFPL
--

local nodenames = {
	"vertical",
	"horizontal",
	"junction_xy",
	"junction_xz",
	"bend_xy_down",
	"bend_xy_up",
	"bend_xz",
	"crossing_xz",
	"crossing_xy",
	"crossing_xyz",
	"pipe_segment",
	"cap_neg_x",
	"cap_pos_x",
	"cap_neg_y",
	"cap_pos_y",
	"cap_neg_z",
	"cap_pos_z"
}

local descriptions = {
	"vertical",
	"horizontal",
	"junction between X and Y axes",
	"junction between X and Z axes",
	"downward bend between X and Y axes",
	"upward bend between X and Y axes",
	"bend between X/Z axes",
	"4-way crossing between X and Z axes",
	"4-way crossing between X/Z and Y axes",
	"6-way crossing",
	"basic segment",
	"capped, negative X half only",
	"capped, positive X half only",
	"capped, negative Y half only",
	"capped, positive Y half only",
	"capped, negative Z half only",
	"capped, positive Z half only"
}

local nodeimages = {
	{"pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_plain.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_plain.png"},

	{"pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png"},

	{"pipeworks_plain.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png"},

	{"pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png"},

-- horizontal short segment

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_plain.png",
	 "pipeworks_plain.png"},

-- capped 

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_pipe_end.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png"},

	{"pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_windowed_XXXXX.png",
	 "pipeworks_pipe_end.png",
	 "pipeworks_windowed_XXXXX.png"},
}

local selectionboxes = {
	{ -0.15, -0.5, -0.15, 0.15,  0.5, 0.15 },
	{ -0.5, -0.15, -0.15, 0.5, 0.15, 0.15 },
	{ -0.15, -0.5, -0.15, 0.5, 0.5, 0.15 },
	{ -0.5, -0.15, -0.15, 0.5, 0.15, 0.5 },
	{ -0.15, -0.5, -0.15, 0.5, 0.15, 0.15 },
	{ -0.15, -0.15, -0.15, 0.5, 0.5, 0.15 },
	{ -0.15, -0.15, -0.15, 0.5, 0.15, 0.5 },
	{ -0.5, -0.15, -0.5, 0.5, 0.15, 0.5 },
	{ -0.5, -0.5, -0.15, 0.5, 0.5, 0.15 },
	{ -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
	{ -0.3, -0.15, -0.15, 0.3, 0.15, 0.15 },
	{ -0.5, -0.15, -0.15, 0, 0.15, 0.15 },
	{ 0, -0.15, -0.15, 0.5, 0.15, 0.15 },
	{ -0.15, -0.5, -0.15, 0.15, 0, 0.15 },
	{ -0.15, 0, -0.15, 0.15, 0.5, 0.15 },
	{ -0.15, -0.15, -0.5, 0.15, 0.15, 0 },
	{ -0.15, -0.15, 0, 0.15, 0.15, 0.5 },
}

local nodeboxes = {
	{{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },	-- vertical
	 { -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
	 { -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 }},

	{{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },	-- horizontal
	 { -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 }},

	{{ -0.15, -0.5 , -0.15,  0.15, -0.45, 0.15 },	-- vertical with X/Z junction
	 { -0.1 , -0.45, -0.1 ,  0.1 ,  0.45, 0.1  },
	 { -0.15,  0.45, -0.15,  0.15,  0.5 , 0.15 },	
	 {  0.1 , -0.1 , -0.1 ,  0.45,  0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 ,  0.15, 0.15 }},

	{{ -0.15, -0.15,  0.45,  0.15, 0.15, 0.5  },	-- horizontal with X/Z junction
	 { -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.45 },
	 { -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
	 { -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 }},

	{{ -0.15, -0.5 , -0.15,  0.15, -0.45, 0.15 },	-- bend down from X/Z to Y axis
	 { -0.1 , -0.45, -0.1 ,  0.1 ,  0.1 , 0.1  },
	 { -0.1 , -0.1 , -0.1 ,  0.45,  0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 ,  0.15, 0.15 }},

	{{ -0.15, 0.45 , -0.15, 0.15,  0.5, 0.15 },	-- bend up from X/Z to Y axis
	 { -0.1 , -0.1 , -0.1 , 0.1 , 0.45, 0.1  },
	 { -0.1 , -0.1 , -0.1 , 0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15, 0.5 , 0.15, 0.15 }},

	{{ -0.15, -0.15,  0.45,  0.15, 0.15, 0.5  },	-- bend between X and Z axes
	 { -0.1 , -0.1 ,  0.1 ,  0.1 , 0.1 , 0.45 },
	 { -0.1 , -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 }},

	{{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },	-- 4-way crossing between X and Z axes
	 { -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
	 { -0.15, -0.15, -0.5 ,  0.15, 0.15, -0.45 },
	 { -0.1 , -0.1 , -0.45,  0.1 , 0.1 ,  0.45 },
	 { -0.15, -0.15,  0.45,  0.15, 0.15,  0.5  }},

	{{ -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },	-- 4-way crossing between X/Z and Y axes
	 { -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
	 { -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 },
	 { -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },
	 { -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 }},

	{{ -0.5 , -0.15, -0.15, -0.45, 0.15, 0.15 },	-- 6-way crossing (all 3 axes)
	 { -0.45, -0.1 , -0.1 ,  0.45, 0.1 , 0.1  },
	 {  0.45, -0.15, -0.15,  0.5 , 0.15, 0.15 },
	 { -0.15, -0.15, -0.5 ,  0.15, 0.15, -0.45 },
	 { -0.1 , -0.1 , -0.45,  0.1 , 0.1 ,  0.45 },
	 { -0.15, -0.15,  0.45,  0.15, 0.15,  0.5  },
	 { -0.15, -0.5 , -0.15, 0.15, -0.45, 0.15 },
	 { -0.1 , -0.45, -0.1 , 0.1 ,  0.45, 0.1  },
	 { -0.15,  0.45, -0.15, 0.15,  0.5 , 0.15 }},

	{{ -0.3 , -0.15, -0.15, -0.25, 0.15, 0.15 },	-- main center segment
	 { -0.25, -0.1 , -0.1 ,  0.25, 0.1 , 0.1  },
	 {  0.25, -0.15, -0.15,  0.3 , 0.15, 0.15 }},

	{{ -0.5,  -0.15, -0.15, -0.45, 0.15, 0.15 },	-- anchored at -X
	 { -0.45, -0.1,  -0.1,  -0.2,  0.1,  0.1  },
	 { -0.2,  -0.15, -0.15, -0.15, 0.15, 0.15 },
	 { -0.15, -0.12, -0.12, -0.1,  0.12, 0.12 },
	 { -0.1,  -0.08, -0.08, -0.05, 0.08, 0.08 },
	 { -0.05, -0.04, -0.04,  0,    0.04, 0.04 }},

	{{  0.45, -0.15, -0.15, 0.5,  0.15, 0.15 },	-- anchored at +X
	 {  0.2,  -0.1,  -0.1,  0.45, 0.1,  0.1  },
	 {  0.15, -0.15, -0.15, 0.2,  0.15, 0.15 },
	 {  0.1,  -0.12, -0.12, 0.15, 0.12, 0.12 },
	 {  0.05, -0.08, -0.08, 0.1,  0.08, 0.08 },
	 {  0,    -0.04, -0.04, 0.05, 0.04, 0.04 }},

	{{ -0.15,  -0.5, -0.15,  0.15, -0.45, 0.15 },	-- anchored at -Y
	 { -0.1,  -0.45, -0.1,   0.1,  -0.2,  0.1  },
	 { -0.15,  -0.2, -0.15,  0.15, -0.15, 0.15 },
	 { -0.12, -0.15, -0.12,  0.12, -0.1,  0.12 },
	 { -0.08, -0.1,  -0.08,  0.08, -0.05, 0.08 },
	 { -0.04, -0.05, -0.04,  0.04,  0,    0.04 }},

	{{ -0.15,  0.45, -0.15, 0.15, 0.5,  0.15 },	-- anchored at +Y
	 { -0.1,   0.2,  -0.1,  0.1,  0.45, 0.1  },
	 { -0.15,  0.15, -0.15, 0.15, 0.2,  0.15 },
	 { -0.12,  0.1,  -0.12, 0.12, 0.15, 0.12 },
	 { -0.08,  0.05, -0.08, 0.08, 0.1,  0.08 } ,
	 { -0.04,  0,    -0.04, 0.04, 0.05, 0.04 }},

	{{ -0.15, -0.15, -0.5,  0.15, 0.15, -0.45 },	-- anchored at -Z
	 { -0.1,  -0.1,  -0.45, 0.1,  0.1,  -0.2  },
	 { -0.15, -0.15, -0.2,  0.15, 0.15, -0.15 },
	 { -0.12, -0.12, -0.15, 0.12, 0.12, -0.1  },
	 { -0.08, -0.08, -0.1,  0.08, 0.08, -0.05 },
	 { -0.04, -0.04, -0.05, 0.04, 0.04,  0    }},

	{{ -0.15, -0.15,  0.45, 0.15, 0.15, 0.5  },	-- anchored at +Z
	 { -0.1,  -0.1,   0.2,  0.1,  0.1,  0.45 },
	 { -0.15, -0.15,  0.15, 0.15, 0.15, 0.2  },
	 { -0.12, -0.12,  0.1,  0.12, 0.12, 0.15 },
	 { -0.08, -0.08,  0.05, 0.08, 0.08, 0.1  },
	 { -0.04, -0.04,  0,    0.04, 0.04, 0.05 }},
}

function fix_image_names(node, replacement)
	outtable={}
	for i in ipairs(nodeimages[node]) do
		outtable[i]=string.gsub(nodeimages[node][i], "_XXXXX", replacement)
	end

	return outtable
end

-- Now define the actual nodes

for node in ipairs(nodenames) do

	if node ~= 2 then
		pgroups = {snappy=3, pipe=1, not_in_creative_inventory=1}
		image = "pipeworks_plain.png"
	else
		pgroups = {snappy=3, pipe=1}
		image = nil
	end

	minetest.register_node("pipeworks:"..nodenames[node], {
		description = "Empty Pipe ("..descriptions[node]..")",
		drawtype = "nodebox",
		tiles = fix_image_names(node, "_empty"),
		inventory_image = image,
		paramtype = "light",
		paramtype2 = "facedir",
		selection_box = {
              		type = "fixed",
			fixed = selectionboxes[node],
		},
		node_box = {
			type = "fixed",
			fixed = nodeboxes[node]
		},
		groups = pgroups,
		sounds = default.node_sound_wood_defaults(),
		walkable = true,
		stack_max = 99,
		drop = "pipeworks:pipe"
	})

	minetest.register_node("pipeworks:"..nodenames[node].."_loaded", {
		description = "Loaded Pipe ("..descriptions[node]..")",
		drawtype = "nodebox",
		tiles = fix_image_names(node, "_loaded"),
		inventory_image = image,
		paramtype = "light",
		paramtype2 = "facedir",
		selection_box = {
              		type = "fixed",
			fixed = selectionboxes[node],
		},	
		node_box = {
			type = "fixed",
			fixed = nodeboxes[node]
		},
		groups = {snappy=3, pipe=1, not_in_creative_inventory=1},
		sounds = default.node_sound_wood_defaults(),
		walkable = true,
		stack_max = 99,
		drop = "pipeworks:pipe"
	})
end