local S = mobs_balrog.S
local api = mobs_balrog.api

local whip_uses = mobs_balrog.settings.whip_uses
local wear_amount = math.ceil(65535 / whip_uses)
local whip_tool_capabilities = mobs_balrog.settings.whip_tool_capabilities
local whip_power = mobs_balrog.settings.whip_power

local function on_rightclick(itemstack, placer, pointed_thing)
	if pointed_thing.type == "nothing" then
		api.whip_air(
			placer,
			vector.add(placer:get_pos(), vector.new(0, 1, 0)),
			placer:get_look_dir(),
			placer:get_player_name(),
			whip_power
		)
	elseif pointed_thing.type == "node" then
		api.whip_node(pointed_thing.above, placer:get_player_name())
	elseif pointed_thing.type == "object" then
		local target = pointed_thing.ref
		api.whip_pull(placer, target, placer:get_look_dir())
		api.whip_object(placer, target, whip_power)
	end

	itemstack:add_wear(wear_amount)

	return itemstack
end

local function on_use(itemstack, user, pointed_thing)
	if pointed_thing.type == "object" then
		api.whip_object(user, pointed_thing.ref, whip_power)
		itemstack:add_wear(wear_amount)
	end

	return itemstack
end

-- for to prevent whip from being destroyed in explosion
local function on_blast(self, damage)
	return false, false, {}
end

minetest.register_tool("mobs_balrog:balrog_whip", {
	description = minetest.colorize("orange", S("Balrog Whip")) .. minetest.get_background_escape_sequence("darkred"),
	inventory_image = "mobs_balrog_balrog_whip.png^[transform3",
	light_source = minetest.LIGHT_MAX,
	range = 6,
	tool_capabilities = whip_tool_capabilities,
	on_use = on_use,
	on_place = on_rightclick,
	on_secondary_use = on_rightclick,
	on_blast = on_blast,
})
