private async Task <Deck> CreateRandomDeck()
        {
            var diceRoll = new Random();
            var faction  = (Faction)diceRoll.Next(2, 8);
            var deck     = new Deck(faction, AppVersion, DeckType.GENERATED_DECK)
            {
                Name = "RANDOM DECK", Description = "I wouldn't recommend actually playing as is. Edit this deck to save it, or share it as a challenge!"
            };
            var cards = (await _cardsService.GetAllCardsAsync()).Where((c) => c.ValidFactions.Contains(faction) && c.Rarity != Rarity.TOKEN).ToList();

            cards.Shuffle();
            deck.Champion = cards.FirstOrDefault((c) => c.Type == CardType.CHAMPION);
            while (!deck.IsValid)
            {
                try
                {
                    cards.Shuffle();
                    if (cards[0].Type != CardType.CHAMPION && deck.CountCard(cards[0]) < Deck.MAX_CARD_COUNT)
                    {
                        deck.Add(cards[0]);
                    }
                    if (diceRoll.Next(0, 1) == 1)
                    {
                        deck.Add(cards[0]);
                    }
                }
                catch (Exception) {
                    break;
                }
            }

            return(deck);
        }
        public async Task CheckForNewCardsAsync()
        {
            var cards = await _cardsService.GetAllCardsAsync();

            _newCardsToShow = cards.Any(c => c.CardSet == CardSet.NEXT);
            if (_newCardsToShow)
            {
                NewCardsText = "New Cards!";
            }
            else
            {
                NewCardsText = NEW_CARDS_DEFAULT_TEXT;
            }
        }
        public async Task InitializeAsync(Deck deck = null, string searchText = null)
        {
            IsBusy = true;

            if (_firstLoad)
            {//Wait longer for the ui to load
                _firstLoad = false;
                await Task.Delay(1500);
            }
            else
            {
                await Task.Delay(500);
            }

            var freshCards = await _cardsService.GetAllCardsAsync();

            if (_unfilteredCards != freshCards)
            {
                _unfilteredCards = freshCards;
                RaisePropertyChanged(nameof(EighthFactionEnabled));
                AllCards = _unfilteredCards.ToList();
            }

            _suspendFilters = searchText != null;

            if (deck == null || deck != CurrentDeck)
            {
                await DeckInitialize(deck);
            }

            if (searchText != null)
            {
                IsBusy = true;
                await Task.Delay(500);                //let the ui settle

                _suspendFilters = false;
                if (CardSets.Contains(searchText))
                {
                    CardSetFilter = searchText;
                    MessagingCenter.Send <string>($"Card Set: {searchText}", App.MESSAGES.SHOW_TOAST);
                }
                else
                {
                    SearchText = searchText;
                }
            }

            IsBusy = false;
        }