minetest.register_tool("mcl_spyglass:spyglass",{
    description = ("Spyglass"),
    _doc_items_longdesc = ("A spyglass is an item that can be used for zooming in on specific locations."),
    inventory_image = "mcl_spyglass.png",
    stack_max = 1,
    _mcl_toollike_wield = true,
})

local function craft_spyglass(ingot)
    minetest.register_craft({
        output = "mcl_spyglass:spyglass",
        recipe = {
            {"xpanes:pane_natural_flat"},
            {ingot},
            {ingot},
        }
    })
end

if minetest.get_modpath("mcl_copper") then
    craft_spyglass("mcl_copper:copper_ingot")
else
    craft_spyglass("mcl_core:iron_ingot")
end

local spyglass_scope = {}

local function add_scope(player)
    local wielditem = player:get_wielded_item()
    if wielditem:get_name() == "mcl_spyglass:spyglass" then
        spyglass_scope[player] = player:hud_add({
            hud_elem_type = "image",
            position = {x = 0.5, y = 0.5},
            scale = {x = -100, y = -100},
            text = "mcl_spyglass_scope.png",
        })
        player:hud_set_flags({wielditem = false})
    end
end

local function remove_scope(player)
    if spyglass_scope[player] then
        player:hud_remove(spyglass_scope[player])
        spyglass_scope[player] = nil
        player:hud_set_flags({wielditem = true})
        player:set_fov(86.1)
    end
end

controls.register_on_press(function(player, key)
    if key ~= "RMB" then return end
    add_scope(player)
end)

controls.register_on_release(function(player, key, time)
    if key ~= "RMB" then return end
    remove_scope(player)
end)

controls.register_on_hold(function(player, key, time)
    if key ~= "RMB" then return end
    local wielditem = player:get_wielded_item()
    if wielditem:get_name() == "mcl_spyglass:spyglass" then
        player:set_fov(8, false, 0.1)
        if spyglass_scope[player] == nil then
            add_scope(player)
        end
    else 
        remove_scope(player)
    end
end)

minetest.register_on_dieplayer(function(player)
    remove_scope(player)
end)

minetest.register_on_leaveplayer(function(player)
    spyglass_scope[player] = nil
end)
