--[[
    signs mod for Minetest - Various signs with text displayed on
    (c) Pierre-Yves Rollo

    This file is part of signs.

    signs is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    signs is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with signs.  If not, see <http://www.gnu.org/licenses/>.
--]]

local S = signs.intllib
local F = function(...) return minetest.formspec_escape(S(...)) end

-- Poster specific formspec
local function on_rightclick_poster(pos, node, player, itemstack, pointed_thing)
	local formspec
	local meta = minetest.get_meta(pos)

	if not minetest.is_protected(pos, player:get_player_name()) then
		formspec =
			"size[6.5,7.5]"..
			"field[0.5,0.7;6,1;display_text;"..F("Title")..";"..
            minetest.formspec_escape(meta:get_string("display_text")).."]"..
			"textarea[0.5,1.7;6,6;text;"..F("Text")..";"..
            minetest.formspec_escape(meta:get_string("text")).."]"..
			"button_exit[2,7;2,1;ok;"..F("Write").."]"
		minetest.show_formspec(player:get_player_name(),
			node.name.."@"..minetest.pos_to_string(pos),
			formspec)
	else
		formspec = "size[8,9]"..
			"size[6.5,7.5]"..
			"label[0.5,0;"..minetest.formspec_escape(meta:get_string("display_text")).."]"..
			"textarea[0.5,1;6,7;;"..minetest.formspec_escape(meta:get_string("text"))..";]"..
			"bgcolor[#111]"..
			"button_exit[2,7;2,1;ok;"..F("Close").."]"
		minetest.show_formspec(player:get_player_name(),
			"",
			formspec)
	end
    return itemstack   
end

-- Poster specific on_receive_fields callback
local function on_receive_fields_poster(pos, formname, fields, player)
	local meta = minetest.get_meta(pos)
	if not minetest.is_protected(pos, player:get_player_name()) then
		if fields and (fields.ok or fields.key_enter) then
			meta:set_string("display_text", fields.display_text)
			meta:set_string("text", fields.text)
			meta:set_string("infotext", "\""..fields.display_text
					.."\"\n"..S("(right-click to read more text)"))
			display_lib.update_entities(pos)
		end
	end
end

-- Text entity for all signs
display_lib.register_display_entity("signs:text")

-- Sign models and registration
local models = {
	wooden_right_sign = {
		depth = 1/16,
		width = 14/16,
		height = 7/16,
		entity_fields = {
            right = -3/32,
			size = { x = 12/16, y = 6/16 },
			resolution = { x = 112, y = 64 },
			maxlines = 2,
			color="#000",
		},
		node_fields = {
			description = S("Wooden direction sign"),
			tiles = { "signs_wooden_direction.png" },
			inventory_image = "signs_wooden_inventory.png",
            signs_other_dir = 'signs:wooden_left_sign',
			on_place = signs.on_place_direction,
			drawtype = "mesh",
			mesh = "signs_dir_right.obj",
			selection_box = { type="fixed", fixed = {-0.5, -7/32, 0.5, 7/16, 7/32, 7/16}},
			collision_box = { type="fixed", fixed = {-0,5, -7/32, 0.5, 7/16, 7/32, 7/16}},
		},
	},
	wooden_left_sign = {
		depth = 1/16,
		width = 14/16,
		height = 7/16,
		entity_fields = {
            right = 3/32,
			size = { x = 12/16, y = 6/16 },
			resolution = { x = 112, y = 64 },
			maxlines = 2,
			color = "#000",
		},
		node_fields = {
			description = S("Wooden direction sign"),
			tiles = { "signs_wooden_direction.png" },
			inventory_image = "signs_wooden_inventory.png",
            signs_other_dir = 'signs:wooden_right_sign',
			drawtype = "mesh",
			mesh = "signs_dir_left.obj",
			selection_box = { type="fixed", fixed = {-7/16, -7/32, 0.5, 0.5, 7/32, 7/16}},
			collision_box = { type="fixed", fixed = {-7/16, -7/32, 0.5, 0.5, 7/32, 7/16}},
			groups = { not_in_creative_inventory = 1 },
			drop = "signs:wooden_right_sign",
		},
	},
	paper_poster = {
		depth = 1/32,
		width = 26/32,
		height = 30/32,
		entity_fields = {
			resolution = { x = 144, y = 64 },
			maxlines = 1,
			color="#000",
			valign="top",
		},
		node_fields = {
			description = S("Poster"),
			tiles = { "signs_poster_sides.png", "signs_poster_sides.png",
                      "signs_poster_sides.png", "signs_poster_sides.png", 
                      "signs_poster_sides.png", "signs_poster.png" },
			inventory_image = "signs_poster_inventory.png",
			on_construct = display_lib.on_construct,
			on_rightclick = on_rightclick_poster,
			on_receive_fields = on_receive_fields_poster,
		},
	},
}

-- Node registration
for name, model in pairs(models)
do
	signs.register_sign("signs", name, model)
end