extraHotkeys = {}

function addExtraHotkey(name, description, callback)
  table.insert(extraHotkeys, {
    name = name:lower(),
    description = tr(description),
    callback = callback
  })
  
end

function setupExtraHotkeys(combobox)
  addExtraHotkey("none", "None", nil)
  addExtraHotkey("cancelAttack", "Stop attacking", function(repeated)
    if not repeated then
      g_game.attack(nil)
    end
  end)
  addExtraHotkey("attackNext", "Attack next target from battle list", function(repeated)
    if repeated or not modules.game_battle then
      return
    end
    local battlePanel = modules.game_battle.battlePanel
    local attackedCreature = g_game.getAttackingCreature()
    local nextChild = nil
    local breakNext = false
    for i, child in ipairs(battlePanel:getChildren()) do    
      if not child.creature or child:isDisabled() then
        break
      end
      nextChild = child
      if breakNext then
        break
      end
      if child.creature == attackedCreature then
        breakNext = true
        nextChild = battlePanel:getFirstChild()
      end
    end
    if not breakNext then
      nextChild = battlePanel:getFirstChild()
    end
    if nextChild and nextChild.creature ~= attackedCreature then
      g_game.attack(nextChild.creature)
    end
  end)
  
  addExtraHotkey("attackPrevious", "Attack previous target from battle list", function(repeated)
    if repeated or not modules.game_battle then
      return
    end
    local battlePanel = modules.game_battle.battlePanel
    local attackedCreature = g_game.getAttackingCreature()
    local prevChild = battlePanel:getLastChild()
    for i, child in ipairs(battlePanel:getChildren()) do
      if not child.creature or child:isDisabled() then
        break
      end
      if child.creature == attackedCreature then
        break
      end
      prevChild = child    
    end
    if prevChild and prevChild.creature ~= attackedCreature then
      g_game.attack(prevChild.creature)
    end
  end)

  addExtraHotkey("toogleWsad", "Enable/disable wsad walking", function(repeated)
    if repeated or not modules.game_console then
      return
    end
    if not modules.game_console.consoleToggleChat:isChecked() then
      modules.game_console.disableChat(true) 
    else
      modules.game_console.enableChat(true) 
    end    
  end)  
  
  for index, actionDetails in ipairs(extraHotkeys) do
    combobox:addOption(actionDetails.description)
  end
end

function executeExtraHotkey(action, repeated)
  action = action:lower()
  for index, actionDetails in ipairs(extraHotkeys) do
    if actionDetails.name == action and actionDetails.callback then
      actionDetails.callback(repeated)
    end
  end
end

function translateActionToActionComboboxIndex(action)
  action = action:lower()
  for index, actionDetails in ipairs(extraHotkeys) do
    if actionDetails.name == action then
      return index
    end
  end
  return 1
end

function translateActionComboboxIndexToAction(index)
  if index > 1 and index <= #extraHotkeys then
    return extraHotkeys[index].name  
  end
  return nil
end

function getActionDescription(action)
  action = action:lower()
  for index, actionDetails in ipairs(extraHotkeys) do
    if actionDetails.name == action then
      return actionDetails.description
    end
  end
  return "invalid action"
end