local S = minetest.get_translator(minetest.get_current_modname())

local light = minetest.LIGHT_MAX

local function generate_action_on(color)
	local n = "mesecons_lightstone:lightstone_on"
	if color then n = n .. "_" .. color end
	return function(pos, node)
		minetest.swap_node(pos, {name=n, param2 = node.param2})
	end
end

local function generate_action_off(color)
	local n = "mesecons_lightstone:lightstone_off"
	if color then n = n .. "_" .. color end
	return function(pos, node)
		minetest.swap_node(pos, {name=n, param2 = node.param2})
	end
end

local ls_off_name = "mesecons_lightstone:lightstone_off"
local ls_off_def = {
	tiles = {"jeija_lightstone_gray_off.png"},
	groups = {handy=1, mesecon_effector_off = 1, mesecon = 2},
	is_ground_content = false,
	description= S("Redstone Lamp"),
	_tt_help = S("Glows when powered by redstone power"),
	_doc_items_longdesc = S("Redstone lamps are simple redstone components which glow brightly (light level @1) when they receive redstone power.", light),
	sounds = mcl_sounds.node_sound_glass_defaults(),
	mesecons = {effector = {
		action_on = generate_action_on(),
		rules = mesecon.rules.alldirs,
	}},
	_mcl_blast_resistance = 0.3,
	_mcl_hardness = 0.3,
}
minetest.register_node(ls_off_name, ls_off_def)

local ls_on_name = "mesecons_lightstone:lightstone_on"
local ls_on_def = {
	tiles = {"jeija_lightstone_gray_on.png"},
	groups = {handy=1, not_in_creative_inventory=1, mesecon = 2, opaque = 1},
	drop = "node mesecons_lightstone:lightstone_off",
	is_ground_content = false,
	paramtype = "light",
	light_source = light,
	sounds = mcl_sounds.node_sound_glass_defaults(),
	mesecons = {effector = {
		action_off = generate_action_off(),
		rules = mesecon.rules.alldirs,
	}},
	_mcl_blast_resistance = 0.3,
	_mcl_hardness = 0.3,
}
minetest.register_node(ls_on_name, ls_on_def)

local colored_lamps = {
	{"white",      S("White Redstone Lamp"),      	"white"},
	{"grey",       S("Grey Redstone Lamp"),       	"dark_grey"},
	{"silver",     S("Light Grey Redstone Lamp"),	"grey"},
	{"black",      S("Black Redstone Lamp"),      	"black"},
	{"red",        S("Red Redstone Lamp"),        	"red"},
	{"yellow",     S("Yellow Redstone Lamp"),     	"yellow"},
	{"green",      S("Green Redstone Lamp"),      	"dark_green"},
	{"cyan",       S("Cyan Redstone Lamp"),       	"cyan"},
	{"blue",       S("Blue Redstone Lamp"),       	"blue"},
	{"magenta",    S("Magenta Redstone Lamp"),    	"magenta"},
	{"orange",     S("Orange Redstone Lamp"),     	"orange"},
	{"purple",     S("Purple Redstone Lamp"),     	"violet"},
	{"brown",      S("Brown Redstone Lamp"),      	"brown"},
	{"pink",       S("Pink Redstone Lamp"),       	"pink"},
	{"lime",       S("Lime Redstone Lamp"),       	"green"},
	{"lightblue",  S("Light Blue Redstone Lamp"), 	"lightblue"},
}
for _, row in ipairs(colored_lamps) do
	local name = row[1]
	local desc = row[2]
	local dye = row[3]
	local mask = "^[hsl:0:-100^(mcl_lightstone_mask.png^[multiply:" .. name .. "^[opacity:100)"
	if name == "lightblue" then
		mask = "^[hsl:0:-100^(mcl_lightstone_mask.png^[multiply:" .. name .. "^[hsl:0:200^[opacity:100)"
	end
	local name_off = ls_off_name .. "_" .. name
	local def_off = table.copy(ls_off_def)
	def_off.description = desc
	def_off._doc_items_longdesc = nil
	def_off._doc_items_create_entry = false
	def_off.mesecons.effector.action_on = generate_action_on(name)
	def_off.tiles[1] = def_off.tiles[1] .. mask
	local def_on = table.copy(ls_on_def)
	def_on.drop = name_off
	def_on.tiles[1] = def_on.tiles[1] .. mask
	def_on.mesecons.effector.action_off = generate_action_off(name)
	minetest.register_node(name_off, def_off)
	minetest.register_node(ls_on_name.."_"..name, def_on)
	minetest.register_craft({
		type = "shapeless",
		output = name_off,
		recipe = {ls_off_name, "mcl_dye:" .. dye}
	})
end

minetest.register_craft({
    output = "mesecons_lightstone:lightstone_off",
    recipe = {
	    {"","mesecons:redstone",""},
	    {"mesecons:redstone","mcl_nether:glowstone","mesecons:redstone"},
	    {"","mesecons:redstone",""},
    }
})

-- Add entry alias for the Help
if minetest.get_modpath("doc") then
	doc.add_entry_alias("nodes", "mesecons_lightstone:lightstone_off", "nodes", "mesecons_lightstone:lightstone_on")
end