/// <summary>
        /// Validates the matching subscriber who had subscribed magazines in all categories and post the answer to API
        /// </summary>
        /// <param name="magCategory">List of Magazines and categories</param>
        /// <param name="magSubscriberDetails">Subscriber details</param>
        /// <param name="totalCategoryCount">Total number of categories</param>
        /// <param name="token">token value</param>
        /// <returns>response from POST API</returns>
        public static string ValidateAndPostCommonCategorySubscribers(Dictionary <int, string> magCategory, string magSubscriberDetails, int totalCategoryCount, string token)
        {
            HashSet <string> subscribers     = new HashSet <string>();
            string           jsonSubscribers = string.Empty;
            string           response        = string.Empty;
            var exceptions = new ConcurrentQueue <Exception>();

            try
            {
                Parallel.ForEach(JObject.Parse(magSubscriberDetails)["data"], (dataVal) =>
                {
                    try
                    {
                        HashSet <string> uniqueCategories = new HashSet <string>();

                        Parallel.ForEach(dataVal["magazineIds"], (dtVal) =>
                        {
                            uniqueCategories.Add(magCategory[Convert.ToInt32(dtVal)]);
                        });

                        if (uniqueCategories.Count == totalCategoryCount)
                        {
                            subscribers.Add(dataVal["id"].ToString());
                        }
                    }
                    catch (Exception e)
                    {
                        exceptions.Enqueue(e);
                    }
                });

                if (exceptions.Count > 0)
                {
                    throw new AggregateException(exceptions);
                }

                jsonSubscribers = JsonConvert.SerializeObject(new { subscribers });

                var uniqstringContent = new StringContent(jsonSubscribers, UnicodeEncoding.UTF8, "application/json");

                response = MagazineStoreAPI.PostApiData(token, uniqstringContent).Result;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while validating the common subscribers: " + ex.Message);
            }

            return(response);
        }
        /// <summary>
        /// Get all the subscribers and the subscribed magazines
        /// </summary>
        /// <param name="token">token value</param>
        /// <returns>subscribers list</returns>
        public async static Task <string> GetAllSubsribers(string token)
        {
            string magSubscriberDetails = string.Empty;

            try
            {
                magSubscriberDetails = MagazineStoreAPI.GetApiData("GetSubscribers", token, null).Result;
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while fetching the list of subscribers: " + ex.Message);
            }

            return(magSubscriberDetails);
        }
        /// <summary>
        /// Get all the categories from Magazine store API
        /// </summary>
        /// <param name="token">token value</param>
        /// <returns>categories</returns>
        public static List <string> GetAllCategory(string token)
        {
            List <string> lstCategory = new List <string>();

            try
            {
                var categoryList = MagazineStoreAPI.GetApiData("GetCategories", token, null).Result;

                if (categoryList != null)
                {
                    lstCategory = JObject.Parse(categoryList)["data"].Select(x => x.ToString()).ToList();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while fetching the categories: " + ex.Message);
            }

            return(lstCategory);
        }
        /// <summary>
        /// Get list of magazines under each category
        /// </summary>
        /// <param name="lstCategory">list of categories</param>
        /// <param name="token">token value</param>
        /// <returns>Collection of magazine id and category</returns>
        public async static Task <Dictionary <int, string> > GetMagazinesofEachCategory(List <string> lstCategory, string token)
        {
            Dictionary <int, string> magCategory = new Dictionary <int, string>();

            var exceptions = new ConcurrentQueue <Exception>();

            try
            {
                Parallel.ForEach(lstCategory, (category) =>
                {
                    try
                    {
                        var categoryMagazineList = MagazineStoreAPI.GetApiData("GetMagazinesCategory", token, category).Result;

                        if (categoryMagazineList != null)
                        {
                            foreach (var dt in JObject.Parse(categoryMagazineList)["data"])
                            {
                                magCategory.Add(Convert.ToInt32(dt["id"]), dt["category"].ToString());
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        exceptions.Enqueue(e);
                    }
                });

                if (exceptions.Count > 0)
                {
                    throw new AggregateException(exceptions);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while fetching the magazine id of each category: " + ex.Message);
            }

            return(magCategory);
        }
        /// <summary>
        /// Generates Token
        /// </summary>
        /// <returns>Token value</returns>
        public static string GenerateToken()
        {
            string token = string.Empty;

            try
            {
                string tokenList = MagazineStoreAPI.GetApiData("GetToken", null, null).Result;

                if (!string.IsNullOrEmpty(tokenList))
                {
                    dynamic result = JsonConvert.DeserializeObject(tokenList);

                    token = result.token;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error occured while generating token: " + ex.Message);
            }

            return(token);
        }