local event = require("event.event")
local const = require("druid.const")
local component = require("druid.component")

---Component to handle back button. It handles Android back button and Backspace key.
---
---### Setup
---Create back handler component with druid: `druid:new_back_handler(callback)`
---
---### Notes
---- Key triggers in `input.binding` should be setup for correct working
---- It uses a key_back and key_backspace action ids
---@class druid.back_handler: druid.component
---@field on_back event fun(self: druid.back_handler, params: any?) Trigger on back handler action
---@field params any? Custom args to pass in the callback
local M = component.create("back_handler")


---The Back Handler constructor
---@param callback function|nil The callback to call when the back handler is triggered
---@param params any? Custom args to pass in the callback
function M:init(callback, params)
	self.params = params
	self.on_back = event.create(callback)
end


---@private
---@param action_id hash The action id
---@param action table The action table
---@return boolean is_consumed True if the input was consumed
function M:on_input(action_id, action)
	if action.released and (action_id == const.ACTION_BACK or action_id == const.ACTION_BACKSPACE) then
		self.on_back:trigger(self:get_context(), self.params)
		return true
	end

	return false
end


return M
