
local list_def = {
	{material = "bronze",     description = "Bronze",     color = "#fa7b26", dust = true, plate = true, gear = true},
	{material = "copper",     description = "Copper",     color = "#fcb15f", dust = true, plate = true, gear = true},
	{material = "brass",      description = "Brass",      color = "#cdaf2c", dust = true, plate = true, gear = true},
	{material = "gold",       description = "Gold",       color = "#ffff47", dust = true, plate = true, gear = true},
	{material = "steel",      description = "Steel",      color = "#ffffff", dust = true, plate = true, gear = true},
	{material = "tin",        description = "Tin",        color = "#c1c1c1", dust = true, plate = true, gear = true},
	{material = "mithril",    description = "Mithril",    color = "#8686df", dust = true, plate = true, gear = true},
	{material = "silver",     description = "Silver",     color = "#d7e2e8", dust = true, plate = true, gear = true},
	{material = "lead",       description = "Lead",       color = "#374559", dust = true, plate = true, gear = true},
	{material = "iron",       description = "Iron",       color = "#dddddd", dust = true, plate = true, gear = true},
	{material = "diamond",    description = "Diamond",    color = "#02c1e8", dust = true, plate = true, gear = true},
	{material = "nickel",     description = "Nickel",     color = "#d6d5ab", dust = true, plate = true, gear = true},
	{material = "invar",      description = "Invar",      color = "#71848c", dust = true, plate = true, gear = true},
	{material = "electrum",   description = "Electrum",   color = "#ebeb90", dust = true, plate = true, gear = true},
	{material = "viridisium", description = "Viridisium", color = "#5b9751", dust = true, plate = true, gear = true},
	{material = "zinc",       description = "Zinc",       color = "#598a9e", dust = true, plate = true},
	{material = "coal",       description = "Coal",       color = "#1f1f1f", dust = true},
	{material = "mese",       description = "Mese",       color = "#fdff2d99", dust = true},
	{material = "wood",       description = "Wood",       color = "#847454", dust = "Sawdust", gear = true}
}

elepd.registered_gears = {}
elepd.registered_dusts = {}
elepd.registered_plates = {}

function elepd.register_plate(mat, data)
	local mod      = minetest.get_current_modname()
	local itemname = mod..":"..mat.."_plate"

	data.item = itemname
	elepd.registered_plates[mat] = data

	-- Make descriptions overridable
	local description = data.description .. " Plate"
	if data.force_description then
		description = data.description
	end

	minetest.register_craftitem(itemname, {
		description     = description,
		inventory_image = "elepower_plate.png^[multiply:" .. data.color,
		groups          = {
			["plate_" .. mat] = 1,
			plate = 1
		}
	})
end

function elepd.register_dust(mat, data)
	local mod      = minetest.get_current_modname()
	local itemname = mod..":"..mat.."_dust"
	local image = "elepower_dust.png^[multiply:" .. data.color
	
	if mat == "mese" then
		image = "elepower_dust.png^[colorize:" .. data.color.."^[multiply:" .. data.color
	end
	
	data.item = itemname
	elepd.registered_dusts[mat] = data

	-- Make descriptions overridable
	local description = "Pulverized " .. data.description
	if data.force_description then
		description = data.description
	end

	

	minetest.register_craftitem(itemname, {
		description     = description,
		inventory_image = image,
		groups          = {
			["dust_" .. mat] = 1,
			dust = 1
		}
	})
end

function elepd.register_gear(mat, data)
	local mod      = minetest.get_current_modname()
	local itemname = mod..":"..mat.."_gear"

	data.item = itemname
	elepd.registered_gears[mat] = data

	-- Make descriptions overridable
	local description = data.description .. " Gear"
	if data.force_description then
		description = data.description
	end

	minetest.register_craftitem(itemname, {
		description     = description,
		inventory_image = "elepower_gear.png^[multiply:" .. data.color,
		groups          = {
			["gear_" .. mat] = 1,
			gear = 1
		}
	})
end

------------------
-- Register all --
------------------

for _,spec in pairs(list_def) do
	local desc  = spec.description
	local name  = spec.material
	local color = spec.color

	if spec.dust ~= nil and spec.dust ~= false then
		local fdesc = nil
		if spec.dust ~= true then
			fdesc = spec.dust
		end

		elepd.register_dust(name, {
			description       = fdesc or desc,
			color             = color,
			force_description = fdesc ~= nil,
		})
	end

	if spec.gear ~= nil and spec.gear ~= false then
		local fdesc = nil
		if spec.gear ~= true then
			fdesc = spec.gear
		end

		elepd.register_gear(name, {
			description       = fdesc or desc,
			color             = color,
			force_description = fdesc ~= nil,
		})
	end

	if spec.plate ~= nil and spec.plate ~= false then
		local fdesc = nil
		if spec.plate ~= true then
			fdesc = spec.plate
		end

		elepd.register_plate(name, {
			description       = fdesc or desc,
			color             = color,
			force_description = fdesc ~= nil,
		})
	end
end
