--- Join org
-- Adds initiator to an org
-- @module join_org

local join_org = {
    name = "Join this org",
    slug = "join_org",
    desc = "Allows initiator to join this org"
}

join_org.data = {
   result = nil
}

join_org.config = {
   approval_module = false
}

--- Initiate join org with consent
-- @function join_org:initiate
-- @param result Callback if this module is embedded in other modules
function join_org:initiate(result)
   if self.org:has_member(self.initiator) then
      modpol.interactions.message(
         self.initiator,
         "You are already a member of this org")
      if result then result() end
      self.org:delete_process(self.id)
   else
      self.data.result = result
      self:call_module(
         self.config.approval_module, 
         self.initiator, 
        {
            prompt = "Allow " .. self.initiator .. " to join?"
        },
        function () 
            self:complete()
        end
    )
   end
end

--- Adds member to org, notifies org, and deletes process
-- @function join_org:complete
function join_org:complete()
   self.org:add_member(self.initiator)
   modpol.interactions.message_org(
      self.initiator,self.org.name,
      self.initiator .. " joined org " .. self.org.name)
   if self.data.result then self.data.result() end
   self.org:delete_process(self.id)
end

modpol.modules.join_org = join_org