local InputContainer = require("ui/widget/container/inputcontainer")
local InputDialog = require("ui/widget/inputdialog")
local UIManager = require("ui/uimanager")
local Screen = require("ui/screen")
local Event = require("ui/event")
local DEBUG = require("dbg")
local _ = require("gettext")

local ReaderGoto = InputContainer:new{
	goto_menu_title = _("Go To"),
	goto_dialog_title = _("Go to Page or Location"),
}

function ReaderGoto:init()
	self.ui.menu:registerToMainMenu(self)
end

function ReaderGoto:addToMainMenu(tab_item_table)
	-- insert goto command to main reader menu
	table.insert(tab_item_table.navi, {
		text = self.goto_menu_title,
		callback = function()
			self:onShowGotoDialog()
		end,
	})
end

function ReaderGoto:onShowGotoDialog()
	DEBUG("show goto dialog")
	self.goto_dialog = InputDialog:new{
		title = self.goto_dialog_title,
		input_hint = "(1 - "..self.document:getPageCount()..")",
		buttons = {
			{	
				{
					text = _("Cancel"),
					enabled = true,
					callback = function()
						self:close()
					end,
				},
				{
					text = _("Page"),
					enabled = self.document.info.has_pages,
					callback = function()
						self:gotoPage()
					end,
				},
				{
					text = _("Location"),
					enabled = not self.document.info.has_pages,
					callback = function()
						self:gotoLocation()
					end,
				},
			},
		},
		input_type = "number",
		enter_callback = self.document.info.has_pages 
			and function() self:gotoPage() end 
			or function() self:gotoLocation() end,
		width = Screen:getWidth() * 0.8,
		height = Screen:getHeight() * 0.2,
	}
	self.goto_dialog:onShowKeyboard()
	UIManager:show(self.goto_dialog)
end

function ReaderGoto:close()
	self.goto_dialog:onClose()
	UIManager:close(self.goto_dialog)
end

function ReaderGoto:gotoPage()
	local number = tonumber(self.goto_dialog:getInputText())
	if number then
		self.ui:handleEvent(Event:new("GotoPage", number))
	end
	self:close()
	return true
end

function ReaderGoto:gotoLocation()
	local number = tonumber(self.goto_dialog:getInputText())
	if number then
		self.ui:handleEvent(Event:new("GotoPage", number))
	end
	self:close()
	return true
end

return ReaderGoto
