public async Task <SymbolData> GetSymbol(string stockSymbol)
        {
            if (!TokenExists)
            {
                Logger.Instance.LogMessage(TracingLevel.WARN, "GetSymbol was called without a valid token");
                return(null);
            }

            var kvp = new List <KeyValuePair <string, string> >
            {
                new KeyValuePair <string, string>("token", TokenManager.Instance.Token.StockToken),
                new KeyValuePair <string, string>("symbols", stockSymbol),
                new KeyValuePair <string, string>("types", "quote"), // Remove chart as of now
                                                                     //kvp.Add(new KeyValuePair<string, string>("types", "quote,chart"));
                new KeyValuePair <string, string>("range", "dynamic")
            };
            //kvp.Add(new KeyValuePair<string, string>("chartLast", DEFAULT_CHART_POINTS.ToString()));
            HttpResponseMessage response = await StockQuery(STOCK_BATCH_CHART_QUOTE, kvp);

            if (response.IsSuccessStatusCode)
            {
                string body = await response.Content.ReadAsStringAsync();

                var obj = JObject.Parse(body);

                // Invalid Stock Symbol
                if (obj.Count == 0)
                {
                    Logger.Instance.LogMessage(TracingLevel.ERROR, $"GetSymbol invalid symbol: {stockSymbol}");
                    return(null);
                }

                var        jp    = obj.Properties().First();
                StockQuote quote = jp.Value["quote"].ToObject <StockQuote>();

                ChartBase[] chart = null;

                /* Not used at this point
                 * if (jp.Value["chart"]["range"].ToString() == CHART_DAILY)
                 * {
                 *  chart = GetDailyChart(jp.Value["chart"]["data"]);
                 * }
                 * else
                 * {
                 *  chart = GetMinuteChart(jp.Value["chart"]["data"]);
                 * }
                 */
                return(new SymbolData(quote.Symbol, quote, chart));
            }
            else
            {
                Logger.Instance.LogMessage(TracingLevel.ERROR, $"GetSymbol invalid response: {response.StatusCode}");

                if (response.StatusCode == System.Net.HttpStatusCode.Forbidden)
                {
                    TokenManager.Instance.SetTokenFailed();
                }
            }
            return(null);
        }
 public SymbolData(string symbol, StockQuote quote, ChartBase[] chart)
 {
     SymbolName = symbol;
     Quote      = quote;
     Chart      = chart;
 }