private async Task<MiscEnums.Item> GetBestBall()
{
var inventory = await GetInventory();
var ballCollection = inventory.InventoryDelta.InventoryItems.Select(i => i.InventoryItemData?.Item)
.Where(p => p != null)
.GroupBy(i => (MiscEnums.Item) i.Item_)
.Select(kvp => new {ItemId = kvp.Key, Amount = kvp.Sum(x => x.Count)})
.Where(y => y.ItemId == MiscEnums.Item.ITEM_POKE_BALL
|| y.ItemId == MiscEnums.Item.ITEM_GREAT_BALL
|| y.ItemId == MiscEnums.Item.ITEM_ULTRA_BALL
|| y.ItemId == MiscEnums.Item.ITEM_MASTER_BALL);
var pokeBallsCount = ballCollection.Where(p => p.ItemId == MiscEnums.Item.ITEM_POKE_BALL).
DefaultIfEmpty(new {ItemId = MiscEnums.Item.ITEM_POKE_BALL, Amount = 0}).FirstOrDefault().Amount;
var greatBallsCount = ballCollection.Where(p => p.ItemId == MiscEnums.Item.ITEM_GREAT_BALL).
DefaultIfEmpty(new {ItemId = MiscEnums.Item.ITEM_GREAT_BALL, Amount = 0}).FirstOrDefault().Amount;
var ultraBallsCount = ballCollection.Where(p => p.ItemId == MiscEnums.Item.ITEM_ULTRA_BALL).
DefaultIfEmpty(new {ItemId = MiscEnums.Item.ITEM_ULTRA_BALL, Amount = 0}).FirstOrDefault().Amount;
var masterBallsCount = ballCollection.Where(p => p.ItemId == MiscEnums.Item.ITEM_MASTER_BALL).
DefaultIfEmpty(new {ItemId = MiscEnums.Item.ITEM_MASTER_BALL, Amount = 0}).FirstOrDefault().Amount;
if (masterBallsCount > 0)
return MiscEnums.Item.ITEM_MASTER_BALL;
if (ultraBallsCount > 0)
return MiscEnums.Item.ITEM_ULTRA_BALL;
if (greatBallsCount > 0)
return MiscEnums.Item.ITEM_GREAT_BALL;
return MiscEnums.Item.ITEM_POKE_BALL;
}