///// <summary>
        ///// Associates the loyalty card with current cart.
        ///// </summary>
        ///// <param name="storefront">The storefront.</param>
        ///// <param name="visitorContext">The visitor context.</param>
        ///// <param name="loyaltyCardNumber">The loyalty card number.</param>
        ///// <returns>
        ///// The manager response where the result is returned indicating the success or failure of the operation.
        ///// </returns>
        //public virtual ManagerResponse<UpdateLoyaltyCardIdResult, bool> AssociateLoyaltyCardWithCurrentCart([NotNull] CommerceStorefront storefront, [NotNull] IVisitorContext visitorContext, string loyaltyCardNumber)
        //{
        //    Assert.ArgumentNotNull(storefront, "storefront");
        //    Assert.ArgumentNotNull(visitorContext, "visitorContext");
        //    Assert.ArgumentNotNullOrEmpty(loyaltyCardNumber, "loyaltyCardNumber");

        //    var result = new UpdateLoyaltyCardIdResult { Success = false };
        //    var cartResult = this.CartManager.GetCurrentCart(storefront, visitorContext);
        //    if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null)
        //    {
        //        result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages);
        //        return new ManagerResponse<UpdateLoyaltyCardIdResult, bool>(result, result.Success);
        //    }

        //    var cart = cartResult.ServiceProviderResult.Cart;

        //    var request = new UpdateLoyaltyCardIdRequest(visitorContext.UserId, loyaltyCardNumber, cart.ExternalId);
        //    result = this.LoyaltyProgramServiceProvider.UpdateLoyaltyCardId(request);

        //    Helpers.LogSystemMessages(result.SystemMessages, result);
        //    return new ManagerResponse<UpdateLoyaltyCardIdResult, bool>(result, result.Success);
        //}

        // NOTE: the method code is stubbed.
        /// <summary>
        /// Gets the loyalty cards.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="userId">The user identifier.</param>
        /// <returns>The manager response where the enumerable list of loyalty cards is returned in the Result.</returns>
        public virtual ManagerResponse <GetLoyaltyCardsResult, IEnumerable <LoyaltyCard> > GetLoyaltyCards([NotNull] CommerceStorefront storefront, [NotNull] string userId)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNullOrEmpty(userId, "userId");

            var request = new GetLoyaltyCardsRequest(userId, storefront.ShopName);
            var result  = new GetLoyaltyCardsResult(); //this.LoyaltyProgramServiceProvider.GetLoyaltyCards(request);

            if (result.Success && result.LoyaltyCards != null)
            {
                return(new ManagerResponse <GetLoyaltyCardsResult, IEnumerable <LoyaltyCard> >(result, result.LoyaltyCards.ToList()));
            }

            Helpers.LogSystemMessages(result.SystemMessages, result);
            return(new ManagerResponse <GetLoyaltyCardsResult, IEnumerable <LoyaltyCard> >(result, new List <LoyaltyCard>()));
        }
        /// <summary>
        /// Gets the loyalty cards.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="userId">The user identifier.</param>
        /// <param name="getDetails">The getDetails specify if card details should be returned.</param>
        /// <returns>The manager response where the enumerable list of loyalty cards is returned in the Result.</returns>
        public virtual ManagerResponse <GetLoyaltyCardsResult, IEnumerable <LoyaltyCard> > GetLoyaltyCards([NotNull] CommerceStorefront storefront, [NotNull] string userId, bool getDetails)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNullOrEmpty(userId, "userId");

            var request = new GetLoyaltyCardsRequest(userId, storefront.ShopName);

            request.Properties.Add("GetDetails", getDetails);

            var result = this.LoyaltyProgramServiceProvider.GetLoyaltyCards(request);

            if (result.Success && result.LoyaltyCards != null)
            {
                return(new ManagerResponse <GetLoyaltyCardsResult, IEnumerable <LoyaltyCard> >(result, result.LoyaltyCards.ToList()));
            }
            result.WriteToSitecoreLog();
            return(new ManagerResponse <GetLoyaltyCardsResult, IEnumerable <LoyaltyCard> >(result, new List <LoyaltyCard>()));
        }
        /// <summary>
        /// Gets the loyalty cards.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="userId">The user identifier.</param>
        /// <returns>The manager response where the enumerable list of loyalty cards is returned in the Result.</returns>
        public virtual ManagerResponse<GetLoyaltyCardsResult, IEnumerable<LoyaltyCard>> GetLoyaltyCards([NotNull] CommerceStorefront storefront, [NotNull] string userId)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNullOrEmpty(userId, "userId");

            var request = new GetLoyaltyCardsRequest(userId, storefront.ShopName);
            var result = this.LoyaltyProgramServiceProvider.GetLoyaltyCards(request);
            if (result.Success && result.LoyaltyCards != null)
            {
                return new ManagerResponse<GetLoyaltyCardsResult, IEnumerable<LoyaltyCard>>(result, result.LoyaltyCards.ToList());
            }

            Helpers.LogSystemMessages(result.SystemMessages, result);
            return new ManagerResponse<GetLoyaltyCardsResult, IEnumerable<LoyaltyCard>>(result, new List<LoyaltyCard>());
        }