local MDT = MDT

--- AddOn / WeakAura Creators can use these functions to retrieve data from MDT

do
  local dungeonCountCache = {}

  --- Usage: local count, maxCountNormal, maxCountTeeming, teemingCount = MDT:GetEnemyForces(npcId)
  --- Prefers to find the npc in the current dungeon of the player
  --- @param npcId number
  --- @return number | nil, number | nil, number | nil, number | nil
  function MDT:GetEnemyForces(npcId)

    local zoneId = C_Map.GetBestMapForUnit("player")
    local dungeonIdx = self.zoneIdToDungeonIdx[zoneId]

    if dungeonIdx and dungeonCountCache[dungeonIdx] and dungeonCountCache[dungeonIdx][npcId] then
      local cached = dungeonCountCache[dungeonIdx][npcId]
      return cached.count, cached.maxCountNormal, cached.maxCountTeeming, cached.teemingCount
    end

    if dungeonIdx then
      local data = self.dungeonEnemies[dungeonIdx]
      for _, e in pairs(data) do
        if e.id == npcId then
          dungeonCountCache[dungeonIdx] = dungeonCountCache[dungeonIdx] or {}
          dungeonCountCache[dungeonIdx][npcId] = {
            count = e.count,
            maxCountNormal = self.dungeonTotalCount[dungeonIdx].normal,
            maxCountTeeming = self.dungeonTotalCount[dungeonIdx].teeming,
            teemingCount = e.teemingCount
          }
          local cached = dungeonCountCache[dungeonIdx][npcId]
          return cached.count, cached.maxCountNormal, cached.maxCountTeeming, cached.teemingCount
        end
      end
    end

    for i = 1, self:GetNumDungeons() do
      if dungeonCountCache[i] and dungeonCountCache[i][npcId] then
        local cached = dungeonCountCache[i][npcId]
        return cached.count, cached.maxCountNormal, cached.maxCountTeeming, cached.teemingCount
      end

      local data = self.dungeonEnemies[i]
      if data then
        for _, e in pairs(data) do
          if e.id == npcId then
            dungeonCountCache[i] = dungeonCountCache[i] or {}
            dungeonCountCache[i][npcId] = {
              count = e.count,
              maxCountNormal = self.dungeonTotalCount[i].normal,
              maxCountTeeming = self.dungeonTotalCount[i].teeming,
              teemingCount = e.teemingCount or e.count,
            }
            local cached = dungeonCountCache[i][npcId]
            return cached.count, cached.maxCountNormal, cached.maxCountTeeming, cached.teemingCount
          end
        end
      end
    end
  end
end
