function CreateInputMenu(identifier)
    local self = {}
    self.isOpen_ = false
    local _menuTitle = "RCORE"
    self.identifier_ = identifier
    local _properties = {
        float = "middle_screen",
        position = "middle_screen",
        ChooseText = "Accepter",
        CloseText = "Luk",
    }
    --------------
    self.GetIdentifier = function()
        return self.identifier_
    end

    self.IsOpen = function()
        return self.isOpen_
    end
    --------------
    self.SetMenuTitle = function(title)
        _menuTitle = title
    end

    self.GetMenuTitle = function()
        return _menuTitle
    end
    --------------
    self.SetProperties = function(properties)
        _properties = {
            float = properties.float or "middle_screen",
            position = properties.position or "middle_screen",
            ChooseText = properties.ChooseText or "Accepter",
            CloseText = properties.CloseText or "Luk",
        }
    end

    self.GetProperties = function()
        return _properties
    end
    --------------
    self.OnCloseEvent = function(cb)
        On(identifier, "close", cb)
    end

    self.OnOpenEvent = function(cb)
        On(identifier, "open", cb)
    end

    self.OnExitEvent = function(cb)
        On(identifier, "exit", cb)
    end

    self.OnInputText = function(cb)
        On(identifier, "inputtext", cb)
    end

    self.On = function(eventName, cb)
        On(identifier, eventName, cb)
    end
    --------------
    self.Open = function()
        if not CachedMenu[identifier] then
            CachedMenu[identifier] = {}
        end
        CachedMenu[identifier] = {
            MenuTitle = _menuTitle,
            Properties = _properties,
            self = self,
        }

        SendNUIMessage({ type = "title_input", title = _menuTitle })
        SendNUIMessage({ type = "ui_input", identifier = identifier, properties = _properties, status = true })

        CallOn(identifier, "open")
        self.isOpen_ = true
        SetNuiFocus(true, true)
    end
    --------------
    self.Close = function()
        SendNUIMessage({ type = "ui_input", status = false })
        CallOn(identifier, "close")
        self.isOpen_ = false
        SetNuiFocus(false, false)
    end
    --------------
    self.Destroy = function()
        SendNUIMessage({ type = "ui_input", status = false })
        CallOn(identifier, "exit")
        CachedMenu[identifier] = nil
        Events[identifier] = nil
        SetNuiFocus(false, false)
    end
    return self
end

exports("CreateInputMenu", CreateInputMenu)