public async Task ShowWishesAsync(IDialogContext context, IAwaitable <IMessageActivity> activity)
        {
            List <string> wishes = StateHelper.GetWishlistItems(context);

            //Retrive wishes information
            var to_retrieve = wishes;

            //options
            List <ButtonType> buttons = new List <ButtonType>();

            //fetch only a limited number of wishes
            if (wishes.Count() > Constants.N_ITEMS_CARROUSSEL)
            {
                to_retrieve = wishes.Skip(this.skip)
                              .Take(Constants.N_ITEMS_CARROUSSEL)
                              .ToList();
            }

            var products = new List <Product>();

            foreach (string i in to_retrieve)
            {
                products.Add(ProductController.getProduct(i));
            }

            //Prepare answer

            var reply = context.MakeMessage();
            var text  = "";

            var button_text = "";

            // No products on wishlsit
            if (products.Count == 0)
            {
                text = Interactions.getWishList(Interactions.State.FAIL, 0);
                await context.PostAsync(text);
            }
            // Has Products
            else
            {
                text = Interactions.getWishList(Interactions.State.SUCCESS, skip / Constants.N_ITEMS_CARROUSSEL + 1);
                await Interactions.SendMessage(context, text, 0, 2500);

                //display products
                reply = context.MakeMessage();
                reply.AttachmentLayout = AttachmentLayoutTypes.Carousel;
                List <Attachment> cards = new List <Attachment>();

                //limit
                for (var i = 0; i < products.Count && i < Constants.N_ITEMS_CARROUSSEL; i++)
                {
                    cards.Add(ProductCard.GetProductCard(products[i], ProductCard.CardType.WISHLIST).ToAttachment());
                }

                reply.Attachments = cards;
                await context.PostAsync(reply);

                //Check if pagination is needed and display wishes
                if (wishes.Count() > this.skip + Constants.N_ITEMS_CARROUSSEL)
                {
                    buttons.Add(ButtonType.PAGINATION);
                    skip        += skip + Constants.N_ITEMS_CARROUSSEL;
                    button_text += "Não consegui exibir todos os seus produtos favoritos. Se desejar ver mais clique no botão abaixo.";
                }
            }

            //add option add more products
            buttons.Add(ButtonType.ADD_PRODUCT);
            button_text += "\nSe desejar adicionar mais produtos aos seus favoritos faça uma pesquisa no nosso catálogo. Para isso, clique no botão abaixo.";

            await Interactions.SendMessage(context, button_text, 2000, 2000);

            //show options
            reply = context.MakeMessage();
            reply.Attachments.Add(getCardButtonsAttachment(buttons, DialogType.WISHLIST));
            await context.PostAsync(reply);

            context.Wait(this.InputHandler);
        }