-- Compiled with roblox-ts v2.3.0
local TS = _G[script]
local t = TS.import(script, TS.getModule(script, "@rbxts", "t").lib.ts).t
--[[
	*
	 * @interface
	 * The required UIStructure of Promptifier
	 
]]
local TButton = t.union(t.instanceIsA("TextButton"), t.instanceIsA("ImageButton"))
local IUIResolver = t.interface({
	bg = t.instanceIsA("Frame"),
	title = t.instanceIsA("TextLabel"),
	content = t.union(t.instanceIsA("Frame"), t.instanceIsA("ScrollingFrame")),
	acceptBtn = TButton,
	declineBtn = TButton,
})
--[[
	*
	 * **UIResolver**
	 * 
	 * A utility class that allows you to patch any prompt designs into the Prompt class essentially
	 * mapping your custom elements into the expected structure.
	 
]]
local UIResolver
do
	UIResolver = setmetatable({}, {
		__tostring = function()
			return "UIResolver"
		end,
	})
	UIResolver.__index = UIResolver
	function UIResolver.new(...)
		local self = setmetatable({}, UIResolver)
		return self:constructor(...) or self
	end
	function UIResolver:constructor()
	end
	function UIResolver:SetBG(bg)
		self.BG = bg
		return self
	end
	function UIResolver:SetTitle(tl)
		self.Title = tl
		return self
	end
	function UIResolver:SetContent(frame)
		self.Content = frame
		return self
	end
	function UIResolver:SetAccept(btn)
		self.AcceptBtn = btn
		return self
	end
	function UIResolver:SetDecline(btn)
		self.DeclineBtn = btn
		return self
	end
	function UIResolver:ReassignZIndex()
		local bgZIndex = self.BG.ZIndex
		self.Title.ZIndex = bgZIndex + 1
		self.Content.ZIndex = bgZIndex + 1
		self.AcceptBtn.ZIndex = bgZIndex + 1
		self.DeclineBtn.ZIndex = bgZIndex + 1
	end
	function UIResolver:Resolve(structure)
		-- If structure doesn't match ignore
		if not IUIResolver(structure) then
			warn("Failed to validate UI structure for UIResolver, you are missing a required UI element.")
			return false
		end
		self.BG = structure.bg
		self.Title = structure.title
		self.Content = structure.content
		self.AcceptBtn = structure.acceptBtn
		self.DeclineBtn = structure.declineBtn
		return true
	end
	function UIResolver:Validate()
		if not IUIResolver({
			bg = self.BG,
			title = self.Title,
			content = self.Content,
			acceptBtn = self.AcceptBtn,
			declineBtn = self.DeclineBtn,
		}) then
			error("Failed to validate UI structure for UIResolver, you are missing a required UI element.")
		end
	end
	function UIResolver:ValidateStructure()
		-- Check that each prompt element is within the 'BG' element type.
		local bg = self.BG
		return self.Title.Parent == bg and self.Content.Parent == bg and self.AcceptBtn.Parent == bg and self.DeclineBtn.Parent == bg
	end
end
return {
	UIResolver = UIResolver,
}
