-- example cavebot extension (remember to add this file to ../cavebot.lua)
CaveBot.Extensions.Example = {}

local ui

-- setup is called automaticly when cavebot is ready
CaveBot.Extensions.Example.setup = function()
  ui = UI.createWidget('BotTextEdit')
  ui:setText("Hello")
  ui.onTextChange = function()
    CaveBot.save() -- save new config when you change something
  end

  -- add custom cavebot action (check out actions.lua)
  CaveBot.registerAction("sayhello", "orange", function(value, retries, prev)
    local how_many_times = tonumber(value)
    if retries >= how_many_times then
      return true
    end
    say("hello " .. (retries + 1))
    delay(250)
    return "retry"
  end)

  -- add this custom action to editor (check out editor.lua)
  CaveBot.Editor.registerAction("sayhello", "say hello", {
    value="5",
    title="Say hello",
    description="Says hello x times",
    validation="[0-9]{1,5}" -- regex, optional
  })
end

-- called when cavebot config changes, configData is a table but it can also be nil
CaveBot.Extensions.Example.onConfigChange = function(configName, isEnabled, configData)
  if not configData then return end
  if configData["text"] then
    ui:setText(configData["text"])
  end
end

-- called when cavebot is saving config (so when CaveBot.save() is called), should return table or nil
CaveBot.Extensions.Example.onSave = function()
  return {text=ui:getText()}
end

-- bellow add you custom functions to be used in cavebot function action
-- an example: return Example.run(retries, prev)
-- there are 2 useful parameters - retries (number) and prev (true/false), check actions.lua and example_functions.lua to learn more
CaveBot.Extensions.Example.run = function(retries, prev)
  -- it will say text 10 times with some delay and then continue
  if retries > 10 then
    return true
  end
  say(ui:getText() .. " x" .. retries)
  delay(100 + retries * 100)
  return "retry"
end
