if not ac.getSim().isOnlineRace then return end

local settings = Config:mapSection('MUMBLE', { AUTOCONNECT = true, AUTOCLOSE = true })
if not settings.AUTOCONNECT then return end

local function mumbleRun(commands)
  local knownPaths = {
    'C:/Program Files/Mumble/client/mumble.exe',
    'C:/Program Files (x86)/Mumble/client/mumble.exe',
  }
  local found = table.findFirst(knownPaths, io.fileExists)
  if found then
    os.runConsoleProcess({ filename = found, arguments = commands })
  end
end

setTimeout(function ()
  local url = ac.INIConfig.onlineExtras():get('MUMBLE', 'AUTOCONNECT', '')
  if url:startsWith('mumble://') then
    url = url:gsub('{([A-Za-z]+)}', function (k)
      if k == 'EntryIndex' then return ac.getCar(0).sessionID end
      if k == 'DriverName' then return ac.getDriverName(0):reggsub('[^a-zA-Z0-9_.-]', ' '):trim():gsub(' ', '_') end
      if k == 'ServerPassword' then return  ac.INIConfig.load(ac.getFolder(ac.FolderID.Cfg)..'/race.ini'):get('REMOTE', 'PASSWORD', '') end
    end)

    if settings.AUTOCLOSE then
      os.runConsoleProcess({ filename = 'C:/Windows/System32/tasklist.exe', arguments = { '/NH', '/FI', 'IMAGENAME eq mumble.exe' } }, function (err, data)
        if not err and not data.stdout:regfind('mumble.exe', 1, true) then
          ac.onRelease(function ()
            os.runConsoleProcess({ filename = 'C:/Windows/System32/taskkill.exe', arguments = { '/F', '/IM', 'mumble.exe' } })
          end)
        end
        mumbleRun{ url }
      end)
    else
      mumbleRun{ url }
    end
  end
end, 1)
