/// <summary>
        /// Creates the query to see which products are active for a given catalog, i.e. scope.
        /// </summary>
        /// <param name="criteria">Search criteria.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentException">criteria cannot be null;criteria</exception>
        /// <exception cref="System.ArgumentException">criteria.Scope cannot be null or empty;criteria.Scope</exception>
        public virtual SearchAvailableProductsBaseRequest CreateProductRequest(SearchCriteria criteria)
        {
            if (criteria == null)
            {
                throw new ArgumentNullException(nameof(criteria));
            }
            if (string.IsNullOrWhiteSpace(criteria.Scope))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(nameof(criteria.Scope)), nameof(criteria));
            }

            if (criteria is CategorySearchCriteria categoryCriteria)
            {
                return(new SearchAvailableProductsByCategoryRequest()
                {
                    Query = CreateQuery(criteria.Scope),
                    CategoryName = categoryCriteria.CategoryId
                });
            }
            else if (criteria is SearchBySkusCriteria searchBySkusCriteria)
            {
                var request = new SearchAvailableProductsRequest
                {
                    Query = CreateQuery(searchBySkusCriteria)
                };

                return(request);
            }

            return(CreateProductRequest(criteria.Scope));
        }
        /// <summary>
        /// Creates the query to see which products are active for a given catalog, i.e. scope.
        /// </summary>
        /// <param name="scopeId">The scope identifier.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentException">scope id cannot be null or empty;scopeId</exception>
        public virtual SearchAvailableProductsRequest CreateProductRequest(string scopeId)
        {
            if (string.IsNullOrWhiteSpace(scopeId))
            {
                throw new ArgumentException("scope id cannot be null or empty", "scopeId");
            }

            var request = new SearchAvailableProductsRequest
            {
                Query = CreateQuery(scopeId)
            };

            return(request);
        }
        /// <summary>
        /// Creates the query to see which products are active for a given catalog, i.e. scope.
        /// </summary>
        /// <param name="scopeId">The scope identifier.</param>
        /// <returns></returns>
        /// <exception cref="System.ArgumentException">scope id cannot be null or empty;scopeId</exception>
        public virtual SearchAvailableProductsRequest CreateProductRequest(string scopeId)
        {
            if (string.IsNullOrWhiteSpace(scopeId))
            {
                throw new ArgumentException(GetMessageOfNullWhiteSpace(), nameof(scopeId));
            }

            var request = new SearchAvailableProductsRequest
            {
                Query = CreateQuery(scopeId)
            };

            return(request);
        }