---
--- Generated by EmmyLua.
--- Created by Michieal (FaerRaven).
--- DateTime: 10/14/22 4:05 PM
---

local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath(modname)

-- Signs API
dofile(modpath .. "/signs_api.lua")

-- LOCALIZATION
local S = minetest.get_translator(modname)

-- HANDLE THE FORMSPEC CALLBACK
minetest.register_on_player_receive_fields(function(player, formname, fields)
    if formname:find("mcl_signs:set_text_") == 1 then
        local x, y, z = formname:match("mcl_signs:set_text_(.-)_(.-)_(.*)")
        local pos = { x = tonumber(x), y = tonumber(y), z = tonumber(z) }
        if not pos or not pos.x or not pos.y or not pos.z then
            return
        end
        mcl_signs:update_sign(pos, fields, player)
    end
end)

-- This defines the text entity for the lettering of the sign.
-- FIXME: Prevent entity destruction by /clearobjects
minetest.register_entity("mcl_signs:text", {
    pointable = false,
    visual = "upright_sprite",
    textures = {},
    physical = false,
    collide_with_objects = false,

    _signnodename = nil, -- node name of sign node to which the text belongs

    on_activate = function(self, staticdata)

        local meta = minetest.get_meta(self.object:get_pos())
        local text = meta:get_string("text")
        local text_color = meta:get_string("mcl_signs:text_color")
        local glowing_sign = meta:get_string("mcl_signs:glowing_sign")
        if staticdata and staticdata ~= "" then
            local des = minetest.deserialize(staticdata)
            if des then
                self._signnodename = des._signnodename
                if des._text_color ~= nil and des._text_color ~= "" then
                    self.text_color = des._text_color
                end
                if des._glowing_sign ~= nil and des._glowing_sign ~= "" then
                    self.glowing_sign = des._glowing_sign
                end
            end
        end

        if text_color == "" or text_color == nil then
            text_color = "#000000" -- default to black text.
            meta:set_string("mcl_signs:text_color", text_color)
        end

        if glowing_sign == "" or glowing_sign == nil then
            glowing_sign = "false" -- default to not glowing.
            meta:set_string("mcl_signs:glowing_sign", glowing_sign)
        end

        self.object:set_properties({
            textures = { mcl_signs:create_lettering(text, self._signnodename, text_color) },
        })
        if glowing_sign == "true" then
            self.object:set_properties({
                glow = 6, --sign_glow,
            })
        end

        self.object:set_armor_groups({ immortal = 1 })

    end,
    get_staticdata = function(self)
        local out = {
            _signnodename = self._signnodename,
        }
        return minetest.serialize(out)
    end,
})

-- Build the signs x,y,z & rotations so that they work. (IE, do not remove!)
mcl_signs.build_signs_info()

-- ---------------------------- --
--   Register Signs for use.    --
-- ---------------------------- --

-- Standard (original) Sign
mcl_signs.register_sign("mcl_core", "#ffffff", "", S("Sign"))
mcl_signs.register_sign_craft("mcl_core", "mcl_core:wood", "")

-- birchwood Sign "#d5cb8d" / "#ffdba7"
mcl_signs.register_sign_custom("mcl_core", "_birchwood",
        "mcl_signs_sign_greyscale.png","#ffdba7", "mcl_signs_default_sign_greyscale.png",
        "mcl_signs_default_sign_greyscale.png", S("Birch Sign")
)
mcl_signs.register_sign_craft("mcl_core", "mcl_core:birchwood", "_birchwood")

-- sprucewood Sign
mcl_signs.register_sign_custom("mcl_core", "_sprucewood",
        "mcl_signs_sign_dark.png","#ffffff", "mcl_signs_default_sign_dark.png",
        "mcl_signs_default_sign_dark.png", S("Spruce Sign")
)
mcl_signs.register_sign_craft("mcl_core", "mcl_core:sprucewood", "_sprucewood")

-- darkwood Sign "#291f1a" / "#856443"
mcl_signs.register_sign_custom("mcl_core", "_darkwood",
        "mcl_signs_sign_greyscale.png","#856443", "mcl_signs_default_sign_greyscale.png",
        "mcl_signs_default_sign_greyscale.png", S("Dark Oak Sign")
)
mcl_signs.register_sign_craft("mcl_core", "mcl_core:darkwood", "_darkwood")

-- junglewood Sign
mcl_signs.register_sign("mcl_core", "#866249", "_junglewood", S("Jungle Sign"))
mcl_signs.register_sign_craft("mcl_core", "mcl_core:junglewood", "_junglewood")

-- acaciawood Sign "b8693d"
mcl_signs.register_sign("mcl_core", "#ea7479", "_acaciawood", S("Acacia Sign"))
mcl_signs.register_sign_craft("mcl_core", "mcl_core:acaciawood", "_acaciawood")

if minetest.get_modpath("mcl_mangrove") then
	-- mangrove_wood Sign  "#c7545c"
	mcl_signs.register_sign("mcl_mangrove", "#b8693d", "_mangrove_wood", S("Mangrove Sign"))
	mcl_signs.register_sign_craft("mcl_mangrove", "mcl_mangrove:mangrove_wood", "_mangrove_wood")
end

-- add in the nether wood signs
if minetest.get_modpath("mcl_crimson") then

    -- warped_hyphae_wood Sign
    mcl_signs.register_sign_custom("mcl_crimson","_warped_hyphae_wood", "mcl_signs_sign_greyscale.png",
            "#9f7dcf", "mcl_signs_default_sign_greyscale.png", "mcl_signs_default_sign_greyscale.png",
            S("Warped Hyphae Sign"))
    mcl_signs.register_sign_craft("mcl_crimson", "mcl_crimson:warped_hyphae_wood", "_warped_hyphae_wood")

    -- crimson_hyphae_wood Sign
    mcl_signs.register_sign_custom("mcl_crimson", "_crimson_hyphae_wood","mcl_signs_sign_greyscale.png",
            "#c35f51","mcl_signs_default_sign_greyscale.png", "mcl_signs_default_sign_greyscale.png",
            S("Crimson Hyphae Sign"))
    mcl_signs.register_sign_craft("mcl_crimson", "mcl_crimson:crimson_hyphae_wood", "_crimson_hyphae_wood")

end

-- Register the LBMs for the created signs.
mcl_signs.make_lbm()

-- really ancient compatibility.
minetest.register_alias("signs:sign_wall", "mcl_signs:wall_sign")
minetest.register_alias("signs:sign_yard", "mcl_signs:standing_sign")
minetest.register_alias("mcl_signs:wall_sign_dark", "mcl_signs:wall_sign_sprucewood")
minetest.register_alias("mcl_signs:standing_sign_dark", "mcl_signs:standing_sign_sprucewood")