public async Task <string> setJsonData(string json, string namePage, string key, string nameData)
        {
            if (string.IsNullOrEmpty(json))
            {
                return("Não recebemos o valor dos insigths.");
            }
            if (string.IsNullOrEmpty(namePage) && string.IsNullOrEmpty(key))
            {
                return("usuario e chave não encontrados.");
            }

            try
            {
                InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep("MetricasInsights", _settings, key);
                if (nameData == "Usuario")
                {
                    var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Usuario>(json);
                    await repMongo.GravarOne <webMetrics.Models.Graph.Usuario>(js);
                }
                if (nameData == "Media")
                {
                    var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Media>(json);
                    await repMongo.GravarOne <webMetrics.Models.Graph.Media>(js);
                }
                if (nameData == "tags")
                {
                    var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Tags>(json);
                    await repMongo.GravarOne <webMetrics.Models.Graph.Tags>(js);
                }
                if (nameData == "Stories")
                {
                    var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.Stories>(json);
                    await repMongo.GravarOne <webMetrics.Models.Graph.Stories>(js);
                }
                if (nameData == "dataStories")
                {
                    var js = JsonConvert.DeserializeObject <webMetrics.Models.DTO.InsigthStory>(json);
                    await repMongo.GravarOne <webMetrics.Models.DTO.InsigthStory>(js);
                }
                if (nameData == "UserInsights")
                {
                    var js = JsonConvert.DeserializeObject <InfluencersMetricsService.Model.UserInsights>(json);
                    await repMongo.GravarOne <InfluencersMetricsService.Model.UserInsights>(js);
                }
                if (nameData == "Growth")
                {
                    var js = JsonConvert.DeserializeObject <InfluencersMetricsService.Model.UserInsights>(json);
                    await repMongo.GravarOne <InfluencersMetricsService.Model.UserInsights>(js);
                }
                if (nameData == "InsightsCity")
                {
                    var js = JsonConvert.DeserializeObject <webMetrics.Models.Graph.InsightsGenderAge>(json);
                    await repMongo.GravarOne <webMetrics.Models.Graph.InsightsGenderAge>(js);
                }
                if (nameData == "InsightsGenderAge")
                {
                    var js     = JsonConvert.DeserializeObject <webMetrics.Models.DTO.Insigth>(json);
                    var lstIns = new List <webMetrics.Models.DTO.InsigthDTO>();
                    js.data.ForEach(f =>
                    {
                        lstIns.Add(new webMetrics.Models.DTO.InsigthDTO()
                        {
                            data = new List <webMetrics.Models.DTO.DatumDTO>()
                            {
                                new webMetrics.Models.DTO.DatumDTO()
                                {
                                    description = f.description,
                                    id          = f.id,
                                    name        = f.name,
                                    period      = f.period,
                                    title       = f.title,
                                    values      = f.values.Select(s => new webMetrics.Models.DTO.ValueDTO()
                                    {
                                        end_time = s.end_time,
                                        value    = s.value.Select(sv => new webMetrics.Models.DTO.ValueName()
                                        {
                                            name  = sv.Key,
                                            valor = sv.Value.ToString()
                                        }).ToList()
                                    }).ToList()
                                }
                            }
                        });
                    });
                    await repMongo.GravarOne <webMetrics.Models.DTO.InsigthDTO>(lstIns.FirstOrDefault());
                }
                return("");
            }
            catch (Exception)
            {
                return("Error#" + nameData);
            }
        }
        private async Task MakeBestHourAsync(List <Response <string> > listTokensUser, IEnumerable <string> listTokenUserDistinct)
        {
            DateTime dtInicio = DateTime.Now;

            setSetting();
            InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings);
            await repMongo.LimparBestHour();

            var lstInsightsFull = await repMongo.ListarGraphStoryId();

            foreach (var _access_token in listTokenUserDistinct)
            {
                try
                {
                    if (!access_token_suspensos.Exists(e => e.AccessToken == _access_token))
                    {
                        var lstUsers   = listTokensUser.Where(w => w.access_token == _access_token).Select(s => s.userId).ToList();
                        var lstStories = await repMongo.GetStoriesPending(lstUsers);

                        var lstStoryBestHour  = new List <InfluencersMetricsService.Model.StoryBestHour>();
                        var lstStoryBestHourC = new ConcurrentBag <InfluencersMetricsService.Model.StoryBestHour>();
                        var lstStoryId        = new List <string>();
                        var usuarioIdFirst    = listTokensUser.Where(w => w.access_token == _access_token).FirstOrDefault().userId;
                        var lstInsightsByUser = lstInsightsFull.Where(e => e.Obj != null && ((e.Obj.data != null) && (lstUsers.Contains(e.UsuarioId)))).ToList();
                        try
                        {
                            foreach (var itemStory in lstStories)
                            {
                                if (itemStory.Obj != null && (itemStory.Obj.data != null))
                                {
                                    itemStory.Obj.data.ForEach(s =>
                                    {
                                        lstStoryId.Add(s.id.Replace("/insights/reach/lifetime", "").ToString());
                                    });
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                        }

                        var lstStoryIdEnumerable = lstStoryId.Distinct();
                        try
                        {
                            var lstInsights = lstInsightsByUser.Where(e => e.Obj != null && ((e.Obj.data != null) &&
                                                                                             (e.Obj.data.Exists(x => lstStoryIdEnumerable.Select(ds => ds + "/insights/reach/lifetime").ToList().Contains(x.id))))).ToList();

                            Parallel.ForEach(lstInsights, (f) =>
                                             //lstInsights.AsParallel(f =>
                            {
                                if (f.Obj != null && (f.Obj.data != null))
                                {
                                    var hour = new InfluencersMetricsService.Model.StoryBestHour
                                    {
                                        UsuarioId    = "",
                                        idStory      = f.Obj.data.Where(w => w.name == "reach").FirstOrDefault().id.Replace("/insights/reach/lifetime", ""),
                                        DateCreation = Convert.ToDateTime(new DateTime(01, 01, 01, 0, 0, 0).Add(f.timeSpan)),
                                        Hour         = Convert.ToDateTime(new DateTime(01, 01, 01, 0, 0, 0).Add(f.timeSpan)).Hour,
                                        ValorReach   = f.Obj.data.Where(w => w.name == "reach").FirstOrDefault().values.FirstOrDefault().value,
                                        DiaDaSemana  = Convert.ToDateTime(new DateTime(01, 01, 01, 0, 0, 0).Add(f.timeSpan)).DayOfWeek
                                    };
                                    lstStoryBestHourC.Add(hour);
                                }
                            });
                            lstStoryBestHour = lstStoryBestHourC.Select(s => (StoryBestHour)(s)).ToList();
                        }
                        catch (Exception ex)
                        {
                            //break;
                        }

                        if (lstStoryBestHour.Count() > 0)
                        {
                            foreach (var _item in lstUsers)
                            {
                                await repMongo.GravarStoryBestHour <List <InfluencersMetricsService.Model.StoryBestHour> >(lstStoryBestHour, _item);
                            }

                            lstStoryBestHour = new List <StoryBestHour>();
                        }
                    }
                }
                catch (Exception ex)
                {
                    //TODO: Gerar log
                }
            }
            DateTime dtFinal = DateTime.Now;
        }
        private async Task <bool> MakeInfluencersInc()
        {
            var linhaerro = 0;

            setSetting();
            try
            {
                InfluencersMetrics.MongoRep repMongoU = new InfluencersMetrics.MongoRep("ROBO", _settings);
                var lstUsuarioPendentes = await repMongoU.ListarUsuariosPorTipo("5");

                foreach (var it in lstUsuarioPendentes)
                {
                    var _id     = it._id.ToString();
                    var usuario = await repMongoU.ListarById <webMetrics.Models.Usuario>(it._id.AsObjectId);

                    if (usuario == null)
                    {
                        break;
                    }

                    var access_token = usuario.FirstOrDefault().Obj.access_token_page;
                    var _instagram_business_account = usuario.FirstOrDefault().Obj.UsuarioInstagram;

                    var _UserId = _id;// HttpContext.Session.GetString("UserId");

                    InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep(_UserId, _settings, _id);
                    var resultUsuario = await GetDataGraphAsync <webMetrics.Models.Graph.Usuario>(access_token, _instagram_business_account +
                                                                                                  "?fields=biography,id,ig_id,followers_count,follows_count,media_count,name,profile_picture_url,username,website");

                    if (resultUsuario != null)
                    {
                        var resultUsuarioData = await setJsonData(JsonConvert.SerializeObject(resultUsuario), "novaconsulta", _id, "Usuario");

                        var user = usuario.FirstOrDefault().Obj;
                        user.Tipo          = "4";
                        user.AgenciaUserId = "5cd38b8c8daa4f1cc82752c2";
                        user.Nome          = resultUsuario.name;
                        user.name_page     = resultUsuario.name;
                        if (await repMongoU.SalvarAlteracoesUsuario(user, usuario.FirstOrDefault()._id.AsObjectId))
                        {
                            var resultMedia = await GetDataGraphAsync <webMetrics.Models.Graph.Media>(access_token, _instagram_business_account +
                                                                                                      "/media?fields=caption,children,comments{username,text,id},comments_count,id,ig_id,is_comment_enabled,like_count,media_type,media_url,owner,permalink,shortcode,thumbnail_url,timestamp,username");

                            var resultMediaData = await setJsonData(JsonConvert.SerializeObject(resultMedia), "novaconsulta", _id, "Media");

                            var resultTags = await GetDataGraphAsync <webMetrics.Models.Graph.Tags>(access_token, _instagram_business_account +
                                                                                                    "/tags?fields=caption,owner,username,media_url,comments_count,like_count&limit=25");

                            var resultTagsData = await setJsonData(JsonConvert.SerializeObject(resultTags), "novaconsulta", _id, "tags");

                            var resultInsightsAge = await GetDataGraphAsync <webMetrics.Models.DTO.Insigth>(access_token, _instagram_business_account +
                                                                                                            "/insights?metric=audience_gender_age&period=lifetime");

                            var resultInsightsAgeData = await setJsonData(JsonConvert.SerializeObject(resultInsightsAge), "novaconsulta", _id, "InsightsGenderAge");

                            var resultInsightsCity = await GetDataGraphAsync <webMetrics.Models.Graph.InsightsGenderAge>(access_token, _instagram_business_account +
                                                                                                                         "/insights?metric=audience_city&period=lifetime");

                            var resultInsightsCityData = await setJsonData(JsonConvert.SerializeObject(resultInsightsCity), "novaconsulta", _id, "InsightsCity");

                            var resultInsightsUserPro = await GetDataGraphAsync <InfluencersMetricsService.Model.UserInsights>(access_token, _instagram_business_account +
                                                                                                                               "/insights?metric=profile_views&period=day");

                            var resultInsightsUserProData = await setJsonData(JsonConvert.SerializeObject(resultInsightsUserPro), "novaconsulta", _id, "UserInsights");

                            var resultInsightsUser = await GetDataGraphAsync <InfluencersMetricsService.Model.UserInsights>(access_token, _instagram_business_account +
                                                                                                                            "/insights?metric=impressions,reach&period=week");

                            var resultInsightsUserData = await setJsonData(JsonConvert.SerializeObject(resultInsightsUser), "novaconsulta", _id, "UserInsights");

                            var resultStory = await GetDataGraphAsync <webMetrics.Models.Graph.Stories>(access_token, _instagram_business_account +
                                                                                                        "/stories?fields=media_url,permalink,username,owner,media_type,shortcode,timestamp");

                            var resultStoryData = await setJsonData(JsonConvert.SerializeObject(resultStory), "novaconsulta", _id, "Stories");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Library.WriteErrorLog("MakeInfluencersInc," + linhaerro + "," + ex.Message.ToString());
            }
            return(true);
        }
        private async Task MakeUserBestHourAsync()
        {
            var lst = new List <InfluencersMetricsService.Model.StoryBestHour>();

            setSetting();
            InfluencersMetrics.MongoRep repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings);
            var lstStories = await repMongo.ListarStoriesBest();

            Library.WriteErrorLog("MakeDiarios - ListarStoriesBest");
            lstStories.ForEach(i =>
            {
                i.Obj.ForEach(f =>
                {
                    f.UsuarioId = i.UsuarioId;
                });
                i.Obj.ForEach(f =>
                {
                    lst.Add(new StoryBestHour()
                    {
                        DateCreation = f.DateCreation,
                        DiaDaSemana  = f.DiaDaSemana,
                        Hour         = f.Hour,
                        idStory      = f.idStory,
                        UsuarioId    = f.UsuarioId,
                        ValorReach   = f.ValorReach
                    });
                });
            });

            Library.WriteErrorLog("MakeDiarios - lstFull - Antes");

            var lstFull = lst
                          .GroupBy(a => new { a.UsuarioId, a.DiaDaSemana, a.idStory, a.Hour })
                          .Select(a => new InfluencersMetricsService.Model.StoryUserBestHour()
            {
                UsuarioId   = a.First().UsuarioId,
                DiaDaSemana = a.First().DiaDaSemana,
                Hour        = a.First().Hour,
                ValorReach  = a.Max(m => m.ValorReach) - a.Min(m => m.ValorReach)
            }
                                  ).ToList();

            Library.WriteErrorLog("MakeDiarios - lstFull - Depois");

            List <Task> lstTasks = new List <Task>();

            lstFull.Select(s => s.UsuarioId).Distinct().ForEach(us =>
            {
                repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings, us);
                lstTasks.Add(repMongo.GravarOne <List <StoryUserBestHour> >(lstFull.Where(w => w.UsuarioId == us).ToList()));
            });
            Library.WriteErrorLog("MakeDiarios - foreach repMongo: Task==>" + lstTasks.Count().ToString());
            Task.WaitAll(lstTasks.ToArray());
            Library.WriteErrorLog("MakeDiarios - foreach repMongo Pronto");

            //var lstUsuario = lst.Select(s => s.UsuarioId).Distinct();
            //foreach (var us in lstUsuario)
            //{
            //    var lstDiaSemana = lst.Where(w => w.UsuarioId == us).Select(s => s.DiaDaSemana).Distinct();
            //    foreach (var ds in lstDiaSemana)
            //    {
            //        var lstStory = lst.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds).Select(s => s.idStory).Distinct();
            //        foreach (var stor in lstStory)
            //        {
            //            var lstHour = lst.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor).Select(s => s.Hour).Distinct();
            //            foreach (var hr in lstHour)
            //            {
            //                var lstItens = lst.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor && w.Hour == hr);
            //                var max = lstItens.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor && w.Hour == hr).Max(m => m.ValorReach);
            //                var min = lstItens.Where(w => w.UsuarioId == us && w.DiaDaSemana == ds && w.idStory == stor && w.Hour == hr).Min(m => m.ValorReach);

            //                var diff = max - min;
            //                lstUserBestHour.Add(new StoryUserBestHour()
            //                {
            //                    UsuarioId = us,
            //                    DiaDaSemana = ds,
            //                    Hour = hr,
            //                    ValorReach = diff
            //                });
            //            }
            //        }
            //    }

            //    repMongo = new InfluencersMetrics.MongoRep("ROBO", _settings, us);
            //    await repMongo.GravarOne<List<StoryUserBestHour>>(lstUserBestHour);
            //    lstUserBestHour = new List<StoryUserBestHour>();
            //}
        }