class DiscordLink
  name: "DiscordLink"
  variableVersion: 1
  defaults: {
    InviteCodes: {}
  }

  InitializeSavedVariables: () =>
    @savedVariables = ZO_SavedVars\NewAccountWide(@name .. "Vars", @variableVersion, nil, @defaults)

    if not @savedVariables.InviteCode return

    table.insert(@savedVariables.InviteCodes, @savedVariables.InviteCode)

    @savedVariables.InviteCode = nil

  CreateCommands: () =>
    for k,v in pairs @savedVariables.InviteCodes
      continue if v == nil or v == ""
      SLASH_COMMANDS["/d" .. k] = () ->
        StartChatInput("https://discord.gg/" .. v)

    SLASH_COMMANDS["/discord"] = () ->
      if @savedVariables.InviteCodes[1] == nil or @savedVariables.InviteCodes[1] == "" then
        return d("Add an invite code to your addon settings first")
      SLASH_COMMANDS["/d1"]()

  Initialize: () =>
    @CreateCommands!
    LAM = LibAddonMenu2
    panelName = @name .. "Panel"

    panelData = {
      type: "panel",
      name: "Discord Link",
      author: "@Jarva [EU]",
      registerForDefaults: true
    }

    panel = LAM\RegisterAddonPanel(panelName, panelData)

    optionsData = {}

    for i = 1,5
      table.insert(optionsData, {
        type: "editbox",
        name: "Invite Code " .. i,
        getFunc: () -> @savedVariables.InviteCodes[i],
        setFunc: (value) ->
          @savedVariables.InviteCodes[i] = value
          @CreateCommands!
      })

    LAM\RegisterOptionControls(panelName, optionsData)

  onAddonLoaded: (_, addonName) ->
    if addonName == DiscordLink.name
      EVENT_MANAGER\UnregisterForEvent(DiscordLink.name, EVENT_ADD_ON_LOADED)
      DiscordLink\InitializeSavedVariables!
      DiscordLink\Initialize!

EVENT_MANAGER\RegisterForEvent(DiscordLink.name, EVENT_ADD_ON_LOADED, DiscordLink.onAddonLoaded)