local druid = require("druid.druid")


local function init_scroll_with_grid(self)
	local prefab = gui.get_node("grid_prefab")

	local grid_scroll = self.druid:new_scroll("scroll_with_grid_size", "grid_content")
	local grid = self.druid:new_static_grid("grid_content", "grid_prefab", 20)

	for i = 1, 40 do
		local clone_prefab = gui.clone_tree(prefab)

		grid:add(clone_prefab["grid_prefab"])
		gui.set_text(clone_prefab["grid_prefab_text"], "Node " .. i)

		local button = self.druid:new_button(clone_prefab["grid_button"], function()
			local position = gui.get_position(clone_prefab["grid_prefab"])
			grid_scroll:scroll_to(position)
		end)
		button:set_click_zone(gui.get_node("scroll_with_grid_size"))
	end

	gui.set_enabled(prefab, false)

	grid_scroll:set_size(grid:get_size())

	local scroll_slider = self.druid:new_slider("grid_scroll_pin", vmath.vector3(287, 0, 0), function(_, value)
		grid_scroll:scroll_to_percent(vmath.vector3(value, 0, 0), true)
	end)

	grid_scroll.on_scroll:subscribe(function(_, point)
		scroll_slider:set(grid_scroll:get_percent().x, true)
	end)
end


function init(self)
	self.druid = druid.new(self)

		-- Usual scroll for whole page
	self.druid:new_scroll("root", "scroll_page_content")

	-- Simple scroll with no adjust
	self.druid:new_scroll("simple_scroll_input", "simple_scroll_content")

	-- Scroll with grid example
	init_scroll_with_grid(self)

	-- Scroll contain children scrolls:
	-- Parent scroll
	self.druid:new_scroll("children_scroll", "children_scroll_content")
	-- Childre scrolls
	self.druid:new_scroll("children_scroll_1", "children_scroll_content_1")
	self.druid:new_scroll("children_scroll_2", "children_scroll_content_2")
	self.druid:new_scroll("children_scroll_3", "children_scroll_content_3")

	-- Content with less size than view
	self.druid:new_scroll("scroll_smaller_view", "scroll_smaller_content")
		:set_extra_stretch_size(0)
		:set_inert(false)

	-- Scroll with points of interests
	self.druid:new_scroll("scroll_with_points", "scroll_with_points_content")
		:set_points({
			vmath.vector3(300, 0, 0),
			vmath.vector3(900, 0, 0),
			vmath.vector3(1500, 0, 0),
			vmath.vector3(2100, 0, 0),
		})
end


function final(self)
	self.druid:final()
end


function update(self, dt)
	self.druid:update(dt)
end


function on_message(self, message_id, message, sender)
	self.druid:on_message(message_id, message, sender)
end


function on_input(self, action_id, action)
	return self.druid:on_input(action_id, action)
end
