private static string RefinementString(SearchRecommendationRefinement refinement, int index)
        {
            string output = $"{refinement.id}-{index}";

            if (!string.IsNullOrEmpty(refinement.source))
            {
                output += ("-" + refinement.source);
            }
            return(output);
        }
        public static void AddBrowseExploreParams(this FoursquareRequest req, SearchRecommendationFilters filters = null,
                                                  FoursquareLocation currentLocation = null, FoursquareLocation location = null, FoursquareLocation ne = null, FoursquareLocation sw = null,
                                                  string near = null, string nearGeoId = null)
        {
            if (filters != null)
            {
                if (!string.IsNullOrEmpty(filters.query))
                {
                    req.AddParam("query", filters.query);
                }
                if (filters.intent != null)
                {
                    req.AddParam("intent", filters.intent.id);
                }
                if (filters.subintent != null)
                {
                    req.AddParam("subintent", filters.subintent.id);
                }
                if (filters.openAt != null)
                {
                    if (filters.openAt.openNow)
                    {
                        req.AddParam("openNow", "1");
                    }
                    else if (filters.openAt.localDay >= 0 && !string.IsNullOrEmpty(filters.openAt.localTime))
                    {
                        req.AddParam("localDay", filters.openAt.localDay == 0 ? "7" : filters.openAt.localDay.ToString());
                        req.AddParam("localTime", filters.openAt.localTime);
                    }
                }
                if (filters.refinements != null && filters.refinements.Count > 0)
                {
                    var refinements = new Dictionary <string, string>();
                    for (int i = 0; i < filters.refinements.Count; i++)
                    {
                        SearchRecommendationRefinement item = filters.refinements[i];
                        if (!string.IsNullOrEmpty(item.groupType))
                        {
                            if (refinements.ContainsKey(item.groupType))
                            {
                                string val = refinements[item.groupType];
                                refinements[item.groupType] = val + "," + RefinementString(item, i);
                            }
                            else
                            {
                                refinements.Add(item.groupType, RefinementString(item, i));
                            }
                        }
                    }

                    foreach (var item in refinements.Keys)
                    {
                        req.AddParam(item, refinements[item]);
                    }
                }
            }

            if (ne == null && sw == null)
            {
                req.AddLocationParams(location);
                if (!string.IsNullOrEmpty(near))
                {
                    req.AddParam("near", near);
                    if (!string.IsNullOrEmpty(nearGeoId))
                    {
                        req.AddParam("nearGeoId", nearGeoId);
                    }
                }
            }
            else
            {
                req.AddParam("ne", LatLngFromLocation(ne));
                req.AddParam("sw", LatLngFromLocation(sw));
            }

            if (currentLocation != null)
            {
                req.AddParam("userll", LatLngFromLocation(currentLocation));
            }
        }