internal static void InitializePrices(Blazored.LocalStorage.ISyncLocalStorageService localStorage, string id)
        {
            var lst = localStorage.GetItem <List <string> >(id + "lstPrices");

            if (lst != null && lst.Count() > 20)
            {
                lstPrices = lst.Take(20).ToList();
            }
            else
            {
                lstPrices = lst;
            }

            if (lstPrices == null)
            {
                lstPrices = new List <string>();
            }
        }
        internal static void MaintainPriceAxis(Dictionary <string, BookDataItem[]> bookDataItems, Blazored.LocalStorage.ISyncLocalStorageService localStorage, string id)
        {
            var seriesOrder = new string[] { "salesAtBid", "bids", "salesAtAsk", "asks" };

            var minPrice = 999999m; // bookDataItems.Min(items => items.Value.Min(item => item.Price));
            var maxPrice = 0m;      // bookDataItems.Max(items => items.Value.Max(item => item.Price));

            if (SurfaceChartConfigurator.resetXAxis)
            {
                lstPrices = new List <string>();
                //
                SurfaceChartConfigurator.resetXAxis = false;
                localStorage.SetItem(id + "lstPrices", "");
            }

            /// Set up the Categories list
            //var lstPrices = new List<string>();
            var sumPrices = 0m;
            var nPrices   = 0;

#if tracingFine
            Console.WriteLine("5a. Surface ChartSetData");
#endif
            foreach (var name in seriesOrder)
            {
                //if (dictNumsizes.ContainsKey(name) == false) dictNumsizes[name] = 0;
                //if (dictSumSizes.ContainsKey(name) == false) dictSumSizes[name] = 0;
                ////if (seriesList.Count % 10 == 0)
                ////{
                //dictStNumsizes[name] = 0;
                //dictStSumSizes[name] = 0;
                //}
#if tracingFine
                Console.WriteLine("5b. Surface ChartSetData");
#endif
                foreach (var item in bookDataItems[name])
                {
#if tracingFine
                    Console.WriteLine("5c. Surface ChartSetData");

                    jsruntime.GroupTable(lstPrices, nameof(lstPrices));
                    jsruntime.GroupTable(item, nameof(item));
#endif

                    if (!lstPrices.Contains(item.Price.ToString("n2")))
                    {
                        lstPrices.Add(item.Price.ToString("n2"));
                    }
#if tracingFine
                    Console.WriteLine("5d. Surface ChartSetData");
#endif
                    sumPrices += item.Price;
#if tracingFine
                    Console.WriteLine("5e. Surface ChartSetData");
#endif
                    nPrices += 1;
                    minPrice = Math.Min(item.Price, minPrice);
                    maxPrice = Math.Max(item.Price, maxPrice);

#if tracingFine
                    Console.WriteLine("5f. Surface ChartSetData");
#endif
                    maxSize = Math.Max(item.Size, maxSize);
#if tracingFine
                    Console.WriteLine("5g. Surface ChartSetData");
#endif
                    //dictNumsizes[name] += 1;
                    //dictSumSizes[name] += item.Size;
                    //if (dictNumsizes[name] > 0)
                    //    dictAvgSizes[name] = dictSumSizes[name] / dictNumsizes[name];
#if tracingFine
                    Console.WriteLine("5h. Surface ChartSetData");
#endif
                    //dictStNumsizes[name] += 1;
                    //dictStSumSizes[name] += item.Size;
                    //if (dictStNumsizes[name] > 0)
                    //    dictStAvgSizes[name] = dictStSumSizes[name] / dictStNumsizes[name];
                }
#if tracingFine
                Console.WriteLine("5i. Surface ChartSetData");
#endif
            }


            //jsruntime.Confirm(seriesList.Count.ToString());

            avgPrice = sumPrices / nPrices;
            lstPrices.Sort();
#if tracingFine
            jsruntime.GroupTable(lstPrices, nameof(lstPrices));
#endif
            ////jsruntime.Confirm(nameof(lstPrices), true);
            localStorage.SetItem(id + "lstPrices", lstPrices);

            //jsruntime.Confirm(lstPrices.Count.ToString());

            //jsruntime.InvokeVoidAsync("Dump", seriesList.Dumps(), "seriesList");

            //foreach(var series in seriesList)
            //{
            //    foreach(var item in series.data)
            //    {
            //        minX = Math.Min((double)item.x, (double)minX);
            //        maxX = Math.Max((double)item.x, (double)maxX);

            //    }
            //}
            //jsruntime.InvokeVoidAsync("Dump", minX.Dumps(), "minX");
            //jsruntime.InvokeVoidAsync("Dump", maxX.Dumps(), "maxX");

            //var lst = new List<string>();//  lstPrices.Where(it =>  && Convert.ToDouble(it) < maxX + 0.05).ToArray();
            //foreach(var price in lstPrices)
            //{
            //    if (Convert.ToDouble(price) > minX - 0.05)
            //        lst.Add(price);
            //   else if (Convert.ToDouble(price) < maxX + 0.05)
            //        lst.Add(price);
            //}
            //jsruntime.InvokeVoidAsync("Dump", lst.Dumps(), "lst");


            /// Now remove all above max and beow min
            ///

            //var midPrice = (minPrice + maxPrice) / 2;
            //var n = SurfaceChartConfigurator.xAxisMaxCategories;
            ///// Cull the list of prices if it's more than 100
            //if (lstPrices.Count > n)
            //{
            //    var avgPrice = (Convert.ToDecimal(lstPrices.First()) + Convert.ToDecimal(lstPrices.Last())) / 2;
            //    if (midPrice < avgPrice)
            //        /// Remove higher prices
            //        lstPrices = lstPrices.ToArray().Take(n).ToList();
            //    else
            //        /// Remove lower prices
            //        lstPrices = lstPrices.ToArray().Skip(lstPrices.Count - n).ToList();
            //}
            /// Picture the spread as two 0 points, one at high bid, one at low ask
        }