public async Task ValidaLogin()
        {
            var autenticado = await this.service.FazerLogin(this.login, this.senha);

            if (autenticado)
            {
                var dbUsuario = new Repositorio<Usuario>();
                var _usuarioLogado = App.Current.Properties.ContainsKey("UsuarioLogado") ? App.Current.Properties["UsuarioLogado"] as Usuario : null;

                var temUsuario = (await dbUsuario.RetornarTodos()).FirstOrDefault();
                if (_usuarioLogado != null)
                    await dbUsuario.InserirAsync(_usuarioLogado);

                temUsuario = (await dbUsuario.RetornarTodos()).FirstOrDefault();
                if (temUsuario != null)
                    await dbUsuario.InserirAsync(_usuarioLogado);

                var dbSession = new Repositorio<ControleSession>();
                await dbSession.Inserir(new ControleSession { Logado = true });

                if (temUsuario != null)
                {
                    App.Current.Properties["UsuarioLogado"] = _usuarioLogado;

                    await this.Navigation.PushModalAsync(new MainPage());
                }
                else
                    await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Erro na gravação do usuário");
            }
            else
                UserDialogs.Instance.Alert("Dados incorretos!", "Erro", "OK");
        }
        public async Task CarregarPergunta(int enqueteId)
        {
            Device.BeginInvokeOnMainThread(() =>
                {
                    Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Carregando");
                });
			
            var dbEnquete = new Repositorio<Enquete>();

            var _enquete = (await dbEnquete.RetornarTodos()).First(p => p.Id == enqueteId);
            var ehInteresse = _enquete.Tipo == EnumTipoEnquete.Interesse;

            if (_enquete.EnqueteRespondida)
            {
                Device.BeginInvokeOnMainThread(() =>
                    {
                        Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                    });
                await this.Navigation.PushAsync(new PerguntaRespondidaPage((int)_enquete.PerguntaId, _enquete.Imagem, _enquete.UrlVideo, ehInteresse, _enquete.Id, _enquete.UsuarioCriador, _enquete.TemVoucher));
            }
            else
            {
                Device.BeginInvokeOnMainThread(() =>
                    {
                        Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                    });
                await this.Navigation.PushAsync(new PerguntaPage((int)_enquete.PerguntaId, _enquete.Imagem, _enquete.UrlVideo, _enquete.TemVoucher, ehInteresse, _enquete.Id, _enquete.UsuarioCriador));
            }
			
        }
        public async Task RetornarAmigos()
        {
            var db = new Repositorio<Amigo>();
            var amigos = (await db.RetornarTodos()).Distinct();

            this.Amigos = new ObservableCollection<Amigo>(amigos.Distinct().OrderBy(x => x.Nome));
        }
Beispiel #4
0
        protected async override void OnAppearing()
        {
            base.OnAppearing();

            var dbSession = new Repositorio<ControleSession>();
            var isLogado = await dbSession.RetornarTodos();

            if (isLogado != null && isLogado.Any(c => c.Logado))
                await this.Navigation.PushModalAsync(new MainPage());
        }
        public async Task<List<Categoria>> GetCategorias()
        {
            try
            {
                var dbCat = new Repositorio<Categoria>();
                var lista = await dbCat.RetornarTodos();
                return lista.OrderBy(x => x.Nome).ToList();
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
            }

            return new List<Categoria>();
        }
 public async Task MontaCategoriasFake()
 {
     try
     {
         var dbCat = new Repositorio<Categoria>();
         
         var lista = await dbCat.RetornarTodos();
         
         this.Categorias = new ObservableCollection<Categoria>(lista.OrderBy(x => x.Nome));
     }
     catch (Exception ex)
     {
         Insights.Report(ex);
     }
 }
        protected async override void OnAppearing()
        {
            base.OnAppearing();

            var control = new Repositorio<ControleSession>();
            var isLogado = (await control.RetornarTodos()).First();

            if (!isLogado.ViuTutorial)
            {
                if (Device.OS == TargetPlatform.Android)
                    await this.Navigation.PushModalAsync(new TutorialPage_Android());
                else
                    await this.Navigation.PushModalAsync(new TutorialPage_iOS());
            }
        }
Beispiel #8
0
        protected async override void OnAppearing()
        {
            base.OnAppearing();

            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Saindo...");
            var dbControlSession = new Repositorio<ControleSession>();
            var isLogado = (await dbControlSession.RetornarTodos()).FirstOrDefault();

            if (isLogado != null)
            {
                isLogado.Logado = false;
                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                this.Navigation.PushModalAsync(new Login_v2Page());
            }

        }
        public async Task TrataClique()
        {
            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Importando...");

            var service = App.Container.Resolve<ILogin>();

            var dbUsuario = new Repositorio<Usuario>();
            var _usuario = (await dbUsuario.RetornarTodos()).FirstOrDefault();

            if (_usuario != null)
            {
                var friends = await DependencyService.Get<IFacebook>().GetAmigos(_usuario.FacebookToken);
                var dbAmigos = new Repositorio<Amigo>();
                    
                var tels = friends.data.Distinct().Select(x => x.id).ToList();
                var existemNoServer = await service.RetornarAmigos(tels);

                var amigos = new List<Amigo>();

                if (existemNoServer != null && existemNoServer.Any())
                {
                    foreach (var item in existemNoServer.Distinct())
                    {
                        amigos.Add(new Amigo
                            {
                                Nome = item.Nome,
                                FacebookID = item.FacebookID,
                                UsuarioId = item.Id
                            });
                    }

                    await dbAmigos.InserirTodos(amigos.Distinct().ToList());
                }

                this.listViewContatos.ItemsSource = (await dbAmigos.RetornarTodos()).Distinct();

                var cellTemplate = new DataTemplate(typeof(TextCell));

                cellTemplate.SetBinding(TextCell.TextProperty, "Nome");
                this.listViewContatos.ItemTemplate = cellTemplate;

                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
            }
            else
                Acr.UserDialogs.UserDialogs.Instance.ShowError("Problemas com a autenticação");
        }
        public async Task<Usuario> AtualizarCategoriasFB(Usuario user)
        {
            using (var client = CallAPI.RetornaClientHttp())
            {
                var _json = this.MontaUsuarioMobile2(user);
                var usuarioJSON = JsonConvert.SerializeObject(_json);
                response = await client.PostAsJsonAsync(Constants.uriAtualizaCategoriasFB, usuarioJSON);

                if (response.IsSuccessStatusCode)
                {
                    var json = await response.Content.ReadAsStringAsync();
                    var usuario = JsonConvert.DeserializeObject<Usuario>(json);

                    var dbCategoria = new Repositorio<Categoria>();
                    var cats = string.Empty;

                    foreach (var item in usuario.Categorias)
                    {
                        var cat = await dbCategoria.RetornarPorId(item.Id);
                        cat.UsuarioId = usuario.Id;

                        await dbCategoria.Atualizar(cat);

                        cats += item.Id.ToString() + ';';
                    }
                    cats = cats.TrimEnd(';');
                    usuario.CategoriaMobileSelection = cats;

                    var dbFacebook = new Repositorio<FacebookInfos>();
                    var _token = (await dbFacebook.RetornarTodos()).FirstOrDefault();

                    if (_token != null)
                    {
                        usuario.FacebookID = _token.user_id;
                        usuario.FacebookToken = _token.access_token;
                    }

                    var dbUsuario = new Repositorio<Usuario>();
                    await dbUsuario.Atualizar(usuario);

                    return (await dbUsuario.RetornarTodos()).First();
                }

                throw new ArgumentException("Erro Geral");
            }
        }
        protected async override void OnAppearing()
        {
            base.OnAppearing();

            var dbControlaSession = new Repositorio<ControleSession>();
            var _control = (await dbControlaSession.RetornarTodos()).First();
            _control.ViuTutorial = true;

            await dbControlaSession.Atualizar(_control);

//            Device.StartTimer(TimeSpan.FromSeconds(10), (() =>
//                {                    
//                    this.Navigation.PushModalAsync(new NavigationPage(new MenuPrincipalPage()));
//                    return false;
//                }
//                    
//                ));
        }
		public async Task<bool> GravarResposta(Resposta resposta)
		{
			if (resposta != null)
			{
				var db = new Repositorio<Resposta>();

				if (await db.Inserir(resposta))
				{
					var dbEnquete = new Repositorio<Enquete>();
					var enquete = (await dbEnquete.RetornarTodos()).First(e => e.PerguntaId == resposta.PerguntaId);
					enquete.EnqueteRespondida = true;
					return await dbEnquete.Atualizar(enquete);
				}

				return await Task.FromResult<bool>(false);
			}

			return await Task.FromResult<bool>(false);
		}
Beispiel #13
0
        protected override void OnStart()
        {
            try
            {
                Action<Task> capturaPosicaoPeriodica = null;
                capturaPosicaoPeriodica = _task =>
                {
                    var locator = CrossGeolocator.Current;
                    var dbUsuario = new Repositorio<Usuario>();
                    var usuarioLogado = (dbUsuario.RetornarTodos()).Result.FirstOrDefault();
                
                    if (usuarioLogado != null)
                    {
                        if (locator.IsGeolocationAvailable && locator.IsGeolocationEnabled)
                        {
                            locator.DesiredAccuracy = 50;
                            var pos = locator.GetPositionAsync(10000);
                            pos.Wait();
                
                            var geo = new Geolocalizacao
                            {
                                Latitude = pos.Result.Latitude,
                                Longitude = pos.Result.Longitude,
                                UsuarioId = usuarioLogado.Id,
                            };
                            var service = App.Container.Resolve<GeolocalizacaoViewModel>();
                            service.GravaGeolocalizacao(geo).Wait();
                
                            Task.Delay(10000, CancellationToken.None).ContinueWith(capturaPosicaoPeriodica, CancellationToken.None);
                            Debug.WriteLine(String.Format("Posição é: LAT: {0} e LONG {1} - Data: {2}", geo.Latitude, geo.Longitude, DateTime.Now.ToString()));
                        }
                    }
                };
                
                Task.Delay(10000, CancellationToken.None).ContinueWith(capturaPosicaoPeriodica, CancellationToken.None);
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
            }

        }
        public async Task CarregarMensagem(int enqueteId)
        {
            var dbEnquete = new Repositorio<Enquete>();

            var imagemNome = (await dbEnquete.RetornarTodos()).First(p => p.Tipo == EnumTipoEnquete.Mensagem && p.Id == enqueteId);
            await this.Navigation.PushAsync(new ExibirMensagemPage(enqueteId, imagemNome.Imagem, imagemNome.UrlVideo, imagemNome.TemVoucher));
        }
 public async Task CarregarRespostas(int enqueteId)
 {
     try
     {
         var dbEnquete = new Repositorio<Enquete>();
         var enquete = (await dbEnquete.RetornarTodos()).First(x => x.Id == enqueteId);
         var ehInteresse = enquete.Tipo == EnumTipoEnquete.Interesse;
         
         if (enquete.EnqueteRespondida)
             await this.Navigation.PushAsync(new PerguntaRespondidaPage(enquete.Pergunta.Id, enquete.Imagem, enquete.UrlVideo, ehInteresse, enquete.Id, enquete.UsuarioCriador, enquete.TemVoucher));
         else
             await this.Navigation.PushAsync(new PerguntaPage(enquete.Pergunta.Id, enquete.Imagem, enquete.UrlVideo, enquete.TemVoucher, ehInteresse, enquete.Id, enquete.UsuarioCriador));
     }
     catch (Exception ex)
     {
         Insights.Report(ex);
     }
 }
        public async Task<ObservableCollection<Enquete>> GetMensagens(IEnumerable<Enquete> enquetes)
        {
            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Buscando Mensagens...");
            var db = new Repositorio<Enquete>();

            try
            {
                var ultimaEnquete = 0;
                ICollection<Enquete> listaEnquetes = null;
                
                var temRegistro = await db.ExisteMensagem();
                if (!temRegistro)
                {
                    listaEnquetes = await this.service.RetornarMensagens(-1, 1);
                
                    if (listaEnquetes != null && listaEnquetes.Any())
                    {
                        await db.InserirTodos(listaEnquetes.ToList());
                
                        foreach (var item in listaEnquetes)
                        {
                            if (!String.IsNullOrEmpty(item.Imagem))
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);
                
                            if (!String.IsNullOrEmpty(item.UrlVideo))
                            {
                                var str = new Uri(item.UrlVideo).Segments;
                
                                var url = String.Format(Constants.uriYoutubeThumbnail, str[2]);
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaThumbnailYoutubeSalvarEmDisco(url, String.Concat(str[2], ".jpg"));
                            }
                        }
                    }
                }
                else
                {
                    ultimaEnquete = (await db.RetornarTodos()).OrderByDescending(e => e.Id).First(e => e.ServerEnqueteId != -1 && e.Tipo == EnumTipoEnquete.Mensagem).ServerEnqueteId;
                    listaEnquetes = await this.service.RetornarMensagens(ultimaEnquete, 1);
                
                    if (listaEnquetes != null && listaEnquetes.Any())
                    {
                        await db.InserirTodos(listaEnquetes.ToList());
                
                        foreach (var item in listaEnquetes)
                        {
                            if (!String.IsNullOrEmpty(item.Imagem))
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);
                
                            if (!String.IsNullOrEmpty(item.UrlVideo))
                            {
                                var str = new Uri(item.UrlVideo).Segments;
                
                                var url = String.Format(Constants.uriYoutubeThumbnail, str[2]);
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaThumbnailYoutubeSalvarEmDisco(url, String.Concat(str[2], ".jpg"));
                            }
                        }
                    }
                
                    var enquetesNoTelefone = (await db.RetornarTodos()).Where(e => e.Tipo == EnumTipoEnquete.Mensagem);
                
                    if (listaEnquetes == null)
                        listaEnquetes = enquetesNoTelefone.ToList();
                    else
                    {
                        foreach (var enquete in enquetesNoTelefone)
                        {
                            if (!listaEnquetes.Contains(enquete))
                                listaEnquetes.Add(enquete);
                        }
                    }
                }
                
                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                
                IEnumerable<Enquete> x = null;
                
                if (listaEnquetes != null && listaEnquetes.Any())
                    x = enquetes.Union(listaEnquetes.Where(e => e.Tipo == EnumTipoEnquete.Mensagem));
                else
                    x = enquetes;
                
                return new ObservableCollection<Enquete>(x);
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
                return null;
            }
        }
        public async Task<ObservableCollection<Enquete>> GetEnquetesDeSeuInteresse()
        {
            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Buscando Enquetes...");
            var db = new Repositorio<Enquete>();
            var dbUsuario = new Repositorio<Usuario>();
            var usuario = (await dbUsuario.RetornarTodos()).First();

            var ultimaEnquete = 0;
            ICollection<Enquete> listaEnquetes = null;

            var temRegistro = await db.ExisteEnqueteInteresse();
            if (!temRegistro)
            {
                listaEnquetes = await this.service.RetornarEnquetesInteresse(-1, usuario.Id);
                await db.InserirTodos(listaEnquetes.ToList());

                foreach (var item in listaEnquetes)
                {
                    if (!String.IsNullOrEmpty(item.Imagem))
                        await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);

                    if (!String.IsNullOrEmpty(item.UrlVideo))
                    {
                        var str = new Uri(item.UrlVideo).Segments;

                        var url = String.Format(Constants.uriYoutubeThumbnail, str[2]);
                        await DependencyService.Get<ISaveAndLoadFile>().BaixaThumbnailYoutubeSalvarEmDisco(url, String.Concat(str[2], ".jpg"));
                    }
                }
            }
            else
            {
                Expression<Func<Enquete,bool>> filtro = (f) => f.Tipo == EnumTipoEnquete.Interesse;
                ultimaEnquete = (await db.ProcurarPorColecao(filtro)).OrderByDescending(e => e.ServerEnqueteId).First().ServerEnqueteId;
                listaEnquetes = await this.service.RetornarEnquetesInteresse(ultimaEnquete, usuario.Id);

                if (listaEnquetes != null && listaEnquetes.Any())
                {
                    foreach (var item in listaEnquetes)
                    {
                        Expression<Func<Enquete,bool>> porServerId = (x) => x.ServerEnqueteId == item.ServerEnqueteId;
                        var achou = await db.ProcurarPorFiltro(porServerId);

                        if (achou != null)
                            item.Id = achou.Id;
                    }

                    await db.InserirTodos(listaEnquetes.ToList());

                    foreach (var item in listaEnquetes)
                    {
                        if (!String.IsNullOrEmpty(item.Imagem))
                            await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);

                        if (!String.IsNullOrEmpty(item.UrlVideo))
                        {
                            var str = new Uri(item.UrlVideo).Segments;

                            var url = String.Format(Constants.uriYoutubeThumbnail, str[2]);
                            await DependencyService.Get<ISaveAndLoadFile>().BaixaThumbnailYoutubeSalvarEmDisco(url, String.Concat(str[2], ".jpg"));
                        }
                    }
                }

                var enquetesNoTelefone = (await db.RetornarTodos()).Where(e => e.Tipo == EnumTipoEnquete.Interesse);

                foreach (var enquete in enquetesNoTelefone)
                {
                    if (!listaEnquetes.Contains(enquete))
                        listaEnquetes.Add(enquete);
                }
            }

            ICollection<Banner> banners = null;
            List<Banner> ultimoBanner;
            var dbBanner = new Repositorio<Banner>();

            var categorias = String.Empty;

            var dbUsuarioCategoria = new Repositorio<UsuarioCategoria>();
                                                
            foreach (var item in usuario.CategoriaMobileSelection.Split(';'))
            {
                categorias += item + ';';
            }

            categorias = categorias.TrimEnd(';');

            var temBannerGravado = await db.ExisteBanner();
            if (!temBannerGravado)
            {
                banners = await this.service.RetornarBanners(-1, 1, categorias);

                foreach (var banner in banners.ToList())
                {
                    await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(banner.FileName, Constants.baseImageAddress);
                }

                await dbBanner.InserirTodos(banners.ToList());
            }
            else
            {
                ultimoBanner = await dbBanner.RetornarTodos();
                banners = ultimoBanner != null ? 
					await this.service.RetornarBanners(ultimoBanner.OrderByDescending(e => e.Id).First().Id, 1, categorias) : 
					await this.service.RetornarBanners(-1, 1, categorias);

                foreach (var banner in banners.ToList())
                {
                    await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(banner.FileName, Constants.baseImageAddress);
                }

                await dbBanner.InserirTodos(banners.ToList());
            }

            var b = await dbBanner.RetornarTodos();
            this.Banners = new ObservableCollection<Banner>(b.ToList());

            Acr.UserDialogs.UserDialogs.Instance.HideLoading();
            return new ObservableCollection<Enquete>(listaEnquetes.Where(e => e.Tipo == EnumTipoEnquete.Interesse));
        }
        private async Task GravarResposta()
        {
            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Enviando");

            if (this.Respostas != null)
            {
                var db = new Repositorio<Resposta>();
                if (await db.InserirTodos(this.Respostas))
                {
                    var dbEnquete = new Repositorio<Enquete>();
                    var enquete = (await dbEnquete.RetornarTodos()).First(e => e.PerguntaId == this.Pergunta.Id);
                    enquete.EnqueteRespondida = true;

                    if (await dbEnquete.Atualizar(enquete))
                    {
                        foreach (var resposta in this.Respostas.Where(r=>r.Respondida))
                        {
                            var perguntaResposta = new PerguntaResposta();

                            var dbUsuario = new Repositorio<Usuario>();
                            var usuarioLogado = (await dbUsuario.RetornarTodos()).First();

                            perguntaResposta.RespostaId = resposta.RespostaServerId;
                            perguntaResposta.PerguntaId = enquete.PerguntaServerId == 0 ? enquete.Pergunta.PerguntaServerId : enquete.PerguntaServerId;
                            perguntaResposta.UsuarioId = usuarioLogado.Id;

                            var salvouNoServidor = await this.service.CadastrarRespostaEnquete(perguntaResposta);

                            if (salvouNoServidor == null || !salvouNoServidor.Any())
                            {
                                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                                await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Erro ao salvar resposta, tente novamente");
                                return;
                            }

                            var dbperguntaResposta = new Repositorio<PerguntaResposta>();
                            await dbperguntaResposta.InserirTodos(salvouNoServidor.ToList());

                            var dbResposta = new Repositorio<Resposta>();
                            foreach (var pr in salvouNoServidor)
                            {
                                Expression<Func<Resposta,bool>> porPerguntaServerId = (x) => x.PerguntaServerId == pr.PerguntaId && x.RespostaServerId == pr.RespostaId;
                                var _resposta = await dbResposta.ProcurarPorFiltro(porPerguntaServerId);
                                _resposta.percentualResposta = pr.percentual;
									
                                await dbResposta.Atualizar(_resposta);
                            }
                        }

                        if (enquete.TemVoucher)
                        {
                            var dbQuiz = new Repositorio<RespostaQuiz>();

                            if ((await dbQuiz.RetornarTodos()).Any(x => x.EnqueteId == enquete.ServerEnqueteId))
                            {
                                this.Pergunta.correta = (await dbQuiz.RetornarTodos()).Any(c => c.EnqueteId == enquete.ServerEnqueteId && c.RespostaId == this.Respostas.First(r => r.Respondida).RespostaServerId);

                                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                                var pagina = Activator.CreateInstance(typeof(VotoSalvoComVoucherQuizPage), new[]{ this.Pergunta }) as VotoSalvoComVoucherQuizPage;
                                await this.Navigation.PushModalAsync(pagina);
                            }
                            else
                            {
                                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                                var pagina = Activator.CreateInstance(typeof(VotoSalvoComVoucherPage), new[]{ this.Pergunta,  }) as VotoSalvoComVoucherPage;
                                await this.Navigation.PushModalAsync(pagina);
                            }
                        }
                        else
                        {
                            var dbQuiz = new Repositorio<RespostaQuiz>();

                            if ((await dbQuiz.RetornarTodos()).Any(x => x.EnqueteId == enquete.ServerEnqueteId))
                            {
                                this.Pergunta.correta = (await dbQuiz.RetornarTodos()).Any(c => c.EnqueteId == enquete.ServerEnqueteId && c.RespostaId == this.Respostas.First(r => r.Respondida).RespostaServerId);

                                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                                var pagina = Activator.CreateInstance(typeof(VotoSalvoQuizPage), new[]{ this.Pergunta }) as VotoSalvoQuizPage;
                                await this.Navigation.PushModalAsync(pagina);
                            }
                            else
                            {
                                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                                var pagina = Activator.CreateInstance(typeof(VotoSalvoPage), new[]{ this.Pergunta }) as VotoSalvoPage;
                                await this.Navigation.PushModalAsync(pagina);
                            }
                        }
                    }
                }
            }
            else
            {
                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                await Acr.UserDialogs.UserDialogs.Instance.AlertAsync(AppResources.TituloErro, AppResources.MsgErroAoResponder, "OK");
            }
        }
        private async Task IsLogado()
        {
            try
            {
                var dbSession = new Repositorio<ControleSession>();
                var isLogado = await dbSession.RetornarTodos();
                
                if (isLogado != null && isLogado.Any(c => c.Logado))
                {
                    App.Current.Properties["isLogado"] = true;

//                    if (!isLogado.FirstOrDefault().ViuTutorial)
//                    {
//                        if (Device.OS == TargetPlatform.Android)
//                            await this.Navigation.PushModalAsync(new TutorialPage_Android());
//                        else
//                            await this.Navigation.PushModalAsync(new TutorialPage_iOS());
//                    }
//                    else
                    await this.Navigation.PushModalAsync(new MainPage());
                }
                else
                {
                    App.Current.Properties["isLogado"] = false;
                    await this.Navigation.PushModalAsync(new Login_v2Page(), false);
                }
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
            }
        }
        public async Task<bool> AtualizarCadastro(Usuario user, INavigation nav, DateTime? dataNascimento, int? sexo)
        {
            var categorias = string.Empty;

            if (Device.OS == TargetPlatform.iOS)
            {
                if (App.Current.Properties.ContainsKey("Categorias_iOS"))
                {
                    var c = (ICollection<Categoria>)App.Current.Properties["Categorias_iOS"];

                    if (c != null && c.Any())
                    {
                        foreach (var item in c)
                        {
                            categorias += item.Id.ToString() + ';';
                        }
                    }
                }
            }
            else if (this.Categorias != null & this.Categorias.Any())
            {
                foreach (var item in this.Categorias)
                {
                    categorias += item.Id.ToString() + ';';
                }
            }

            categorias = categorias.TrimEnd(new char[]{ ';' });

            user.CategoriaMobileSelection = categorias;

            var dbFacebook = new Repositorio<FacebookInfos>();
            var _token = (await dbFacebook.RetornarTodos()).FirstOrDefault();

            if (_token != null)
            {
                user.FacebookID = _token.user_id;
                user.FacebookToken = _token.access_token;
            }

            user.EmpresaApp = 1;

            if (dataNascimento.HasValue)
                user.DataNascimento = dataNascimento;

            if (sexo != null && sexo > 0)
            {
                if ((int)sexo == 1)
                    user.Sexo = EnumSexo.Masculino;
                else
                    user.Sexo = EnumSexo.Feminino;
            }

            var atualizou = await service.AtualizarUsuario(user);

            if (atualizou)
            {

                var dbUsuario = new Repositorio<Usuario>();
                await dbUsuario.Atualizar(user);

                Acr.UserDialogs
                    .UserDialogs
                    .Instance
                    .ShowSuccess("Cadastro Atualizado com sucesso!");
                return await Task.FromResult(true);
            }
            else
            {
                await Acr.UserDialogs
                    .UserDialogs
                    .Instance
                    .AlertAsync("Erro na atualização, tente novamente", AppResources.TituloErro, "OK");
                return await Task.FromResult(false);
            }
        }
        public NovaEnquetePage()
        {
            this.BindingContext = model = App.Container.Resolve<NovaEnqueteViewModel>();
            MessagingCenter.Subscribe<SelecaoAmigosEnquetePage,ICollection<Amigo>>(this, "gravarAmigos", (sender, arg) => this.model.AdicionarAmigoAoEnvio(arg));
            model.ConfiguraNavegacao(this.Navigation);
            this.Title = "Nova Enquete";

            var logo = new Image
            {
                Source = ImageSource.FromResource(RetornaCaminhoImagem.GetImagemCaminho("logo_mini.png")),
            };

            var btnSelecionarAmigos = new Button
            {
                Text = AppResources.TextoBotaoSelecionarAmigos,
                Style = Estilos._estiloPadraoButtonFonteMenor,
                HorizontalOptions = LayoutOptions.End
            };
            btnSelecionarAmigos.Clicked += async (sender, e) =>
            {
                var dbAmigos = new Repositorio<Amigo>();
//
//                for (int i = 0; i < 5; i++)
//                {
//                    dbAmigos.Inserir(new Amigo
//                        {
//                            FacebookID = "1",
//                            Nome = "Amigo Teste",
//                            UsuarioId = 99
//                        });
//                }

                var _amigos = await dbAmigos.RetornarTodos();

                if (_amigos.Any(c => c.FacebookID == "1" && c.UsuarioId == 99))
                {
                    foreach (var i in _amigos.Where(c=>c.FacebookID == "1" && c.UsuarioId == 99))
                    {
                        _amigos.Remove(i);
                    }         
                }

                if (_amigos == null || (_amigos != null && _amigos.Count == 0))
                {
                    await Acr.UserDialogs.UserDialogs.Instance.AlertAsync(
                        "Você não possui amigos importados ainda",
                        "Aviso",
                        "OK");
                }
                else
                    await this.Navigation.PushModalAsync(new SelecaoAmigosEnquetePage());
            };

            enqueteContent = new CriaNovaEnqueteView();

            var stackResposta = new StackLayout
            {
                HeightRequest = HeightRequest = Acr.DeviceInfo.DeviceInfo.Hardware.ScreenHeight * 2, 
                VerticalOptions = LayoutOptions.FillAndExpand,
                Orientation = StackOrientation.Vertical,
                Children = { enqueteContent } 
            };

            var enqueteScroll = new ScrollView
            {
                Orientation = ScrollOrientation.Vertical,
                Content = stackResposta
            };
			
            var btnAdicionarResposta = new Button
            {
                Style = Estilos._estiloPadraoButtonFonteMenor,
                Text = AppResources.TextoBotaoAdicionarResposta,
                VerticalOptions = LayoutOptions.End
            };
            btnAdicionarResposta.Clicked += (sender, e) =>
            {
                var entResposta = new Entry
                {
                    Placeholder = AppResources.TextoPlaceholderTituloNaRespostaEnquete,
                    WidthRequest = 100
                };
                var apagar = new Image();
                apagar.Source = ImageSource.FromResource(RetornaCaminhoImagem.GetImagemCaminho("Cancel-32.png"));
                apagar.HorizontalOptions = LayoutOptions.End;
                apagar.ClassId = Guid.NewGuid().ToString();

                var grid = new Grid
                {
                    ColumnDefinitions =
                    {
                        new ColumnDefinition{ Width = new GridLength(2, GridUnitType.Star) },
                        new ColumnDefinition{ Width = GridLength.Auto }
                    }
                };
                grid.Children.Add(entResposta, 0, 0);
                grid.Children.Add(apagar, 1, 0);
                grid.ClassId = apagar.ClassId;

                var apagar_click = new TapGestureRecognizer();
                apagar_click.Tapped += (s, elemnt) =>
                {
                    foreach (var item in this.enqueteContent.RespostasStack.Children)
                    {
                        if ((item).ClassId == ((Image)s).ClassId)
                        {
                            this.enqueteContent.RespostasStack.Children.Remove(item);
                            break;
                        }
                    }
                };
                apagar.GestureRecognizers.Add(apagar_click);

                this.enqueteContent.RespostasStack.Children.Add(grid);
            };

            var btnFinalizarEnquete = new Button
            {
                Style = Estilos._estiloPadraoButtonFonteMenor,
                Text = AppResources.TextoBotaoFinalizarEnquete,
                VerticalOptions = LayoutOptions.End
            };
            btnFinalizarEnquete.Clicked += async (sender, e) =>
            {
                var listaRespostas = new List<Resposta>();

                foreach (var item in enqueteContent.RespostasStack.Children)
                {
                    if (item.GetType() == typeof(Entry))
                    {
                        var textoResposta = ((Entry)item).Text;
                        listaRespostas.Add(new Resposta{ Respondida = false, TextoResposta = textoResposta });
                    }
                    else if (item.GetType() == typeof(Grid))
                    {
                        foreach (var row in ((Grid)item).Children.Where(g=>g.GetType() == typeof(Entry)))
                        {
                            var texto = ((Entry)row).Text;
                            listaRespostas.Add(new Resposta{ Respondida = false, TextoResposta = texto });
                        }
                    }
                }
                model.AdicionaRespostaParaColecao(listaRespostas);
                await model.SalvaEnquete();
            };
			
            var gridFooter = new Grid
            {
                RowDefinitions =
                {
                    new RowDefinition { Height = GridLength.Auto }
                },
                ColumnDefinitions =
                {
                    new ColumnDefinition { Width = new GridLength(0.5, GridUnitType.Star) },
                    new ColumnDefinition { Width = new GridLength(0.5, GridUnitType.Star) }
                }
            };
            gridFooter.Children.Add(btnAdicionarResposta, 0, 0);
            gridFooter.Children.Add(btnFinalizarEnquete, 1, 0);

            var gridHeader = new Grid
            {
                RowDefinitions =
                {
                    new RowDefinition{ Height = GridLength.Auto }			
                },
                ColumnDefinitions =
                {
                    new ColumnDefinition { Width = GridLength.Auto },
                    new ColumnDefinition { Width = new GridLength(0.20, GridUnitType.Star) },
                    new ColumnDefinition { Width = new GridLength(0.15, GridUnitType.Star) }
                }
            };
            gridHeader.Children.Add(logo, 1, 0);
            gridHeader.Children.Add(btnSelecionarAmigos, 2, 0);

            var mainLayout = new StackLayout
            {
                VerticalOptions = LayoutOptions.FillAndExpand,
                Spacing = Device.OnPlatform(15, 10, 0),
                Orientation = StackOrientation.Vertical,
                HorizontalOptions = LayoutOptions.FillAndExpand,
                Padding = new Thickness(5, Device.OnPlatform(20, 10, 0), 5, 5),
                Children = 
						{ gridHeader, enqueteScroll, gridFooter }
            };

            this.Content = mainLayout;
        }
        public async Task<bool> FazerLogin(string email, string senha)
        {
            using (var client = CallAPI.RetornaClientHttp())
            {
                response = await client.GetAsync(string.Format("{0}{1}/{2}", Constants.uriAutenticar, email, senha));

                if (response.IsSuccessStatusCode)
                {
                    var json = await response.Content.ReadAsStringAsync();
                    var usuario = JsonConvert.DeserializeObject<Usuario>(json);

                    var dbCategoria = new Repositorio<Categoria>();
                    var cats = string.Empty;

                    foreach (var item in usuario.Categorias)
                    {
                        var cat = await dbCategoria.RetornarPorId(item.Id);
                        cat.UsuarioId = usuario.Id;

                        await dbCategoria.Atualizar(cat);

                        cats += item.Id.ToString() + ';';
                    }
                    cats = cats.TrimEnd(';');
                    usuario.CategoriaMobileSelection = cats;

                    var dbUsuario = new Repositorio<Usuario>();
                    dbUsuario.Inserir(usuario);

                    App.Current.Properties["UsuarioLogado"] = (await dbUsuario.RetornarTodos()).FirstOrDefault();

                    return await Task.FromResult(true);
                }
            }

            await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Dados inválidos");
            return await Task.FromResult(false);
        }
        public async Task<bool> FazerCadastro(string Nome)
        {
            var dbFacebook = new Repositorio<FacebookInfos>();
            var _token = (await dbFacebook.RetornarTodos()).FirstOrDefault();

            if (_token != null)
            {
                this.Usuario.FacebookID = _token.user_id;
                this.Usuario.FacebookToken = _token.access_token;
            }

            this.Usuario.EmpresaApp = 1;
            this.Usuario.Nome = Nome;

            var cadastrou = await this.service.CadastraNovoUsuario(this.Usuario, true);

            if (cadastrou != null)
            {

                if (_token != null)
                {
                    cadastrou.FacebookID = _token.user_id;
                    cadastrou.FacebookToken = _token.access_token;
                }

                var dbUsuario = new Repositorio<Usuario>();
                await dbUsuario.Inserir(cadastrou);
                return await Task.FromResult(true);
            }

            return await Task.FromResult(false);
        }
        public async Task<Usuario> RetornarUsuario()
        {
            try
            {
                var dbUsuario = new Repositorio<Usuario>();
                var temRegistro = await dbUsuario.ExisteRegistro();

                if (temRegistro)
                {
                    string c = (await dbUsuario.RetornarTodos()).FirstOrDefault().CategoriaMobileSelection;

                    if (!String.IsNullOrEmpty(c))
                    {
                        this.Categorias = new List<Categoria>();

                        foreach (var item in c.Split(';'))
                        {
                            var dbCategoria = new Repositorio<Categoria>();
                            var cat = await dbCategoria.RetornarPorId(Convert.ToInt32(item));

                            this.Categorias.Add(cat);
                        }
                    }
                }

                return temRegistro ? (await dbUsuario.RetornarTodos()).FirstOrDefault() : null;
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
                return null;
            }
        }
        public async Task<ObservableCollection<Enquete>> GetEnquetesPublicas()
        {
            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Buscando Enquetes...");

            try
            {
                if (App.PushWooshToken != null && !String.IsNullOrEmpty(App.PushWooshToken))
                {
                    var dbUsuario = new Repositorio<Usuario>();
                    var _user = (await dbUsuario.RetornarTodos()).FirstOrDefault();
                    await this.service.GravaChavePushWoosh(App.PushWooshToken, _user.Id);
                }
                
                var db = new Repositorio<Enquete>();

                await this.service.RetornarEnqueteTipoQuiz();

                var ultimaEnquete = 0;
                ICollection<Enquete> listaEnquetes = null;
                
                var temRegistro = await db.ExisteEnquetePublica();
                if (!temRegistro)
                {
                    listaEnquetes = await this.service.RetornarEnquetesPublicas(-1);
                    await db.InserirTodos(listaEnquetes.ToList());
                
                    foreach (var item in listaEnquetes)
                    {
                        if (!String.IsNullOrEmpty(item.Imagem))
                            await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);
                
                        if (!String.IsNullOrEmpty(item.UrlVideo))
                        {
                            var str = new Uri(item.UrlVideo).Segments;
                
                            var url = String.Format(Constants.uriYoutubeThumbnail, str[2]);
                            await DependencyService.Get<ISaveAndLoadFile>().BaixaThumbnailYoutubeSalvarEmDisco(url, String.Concat(str[2], ".jpg"));
                        }
                
                        foreach (var resposta in item.Pergunta.Respostas)
                        {
                            if (!String.IsNullOrEmpty(resposta.Imagem))
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(resposta.Imagem, Constants.baseImageAddress);
                        }
                    }
                }
                else
                {
                    ultimaEnquete = (await db.RetornarTodos()).OrderByDescending(e => e.Id).First(e => e.ServerEnqueteId != -1 && (e.Tipo == EnumTipoEnquete.Publica || e.Tipo == EnumTipoEnquete.Quiz)).ServerEnqueteId;
                    listaEnquetes = await this.service.RetornarEnquetesPublicas(ultimaEnquete);
                
                    if (listaEnquetes != null && listaEnquetes.Any())
                    {
                        await db.InserirTodos(listaEnquetes.ToList());
                
                        foreach (var item in listaEnquetes)
                        {
                            if (!String.IsNullOrEmpty(item.Imagem))
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);
                
                            if (!String.IsNullOrEmpty(item.UrlVideo))
                            {
                                var str = new Uri(item.UrlVideo).Segments;
                
                                var url = String.Format(Constants.uriYoutubeThumbnail, str[2]);
                                await DependencyService.Get<ISaveAndLoadFile>().BaixaThumbnailYoutubeSalvarEmDisco(url, String.Concat(str[2], ".jpg"));
                            }
                        }
                    }
                
                    var enquetesNoTelefone = (await db.RetornarTodos()).Where(e => e.Tipo == EnumTipoEnquete.Publica || e.Tipo == EnumTipoEnquete.Quiz);
                
                    foreach (var enquete in enquetesNoTelefone)
                    {
                        if (!listaEnquetes.Contains(enquete))
                            listaEnquetes.Add(enquete);
                    }
                }
                
                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                //return new ObservableCollection<Enquete>(listaEnquetes.Where(e => e.Tipo == EnumTipoEnquete.Publica));
                return await this.GetMensagens(listaEnquetes.Where(e => e.Tipo == EnumTipoEnquete.Publica || e.Tipo == EnumTipoEnquete.Quiz));
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
                return null;
            }
        }
 public async Task<string> RetornaImagemPerguntaDaEnquete(int perguntaId)
 {
     var dbEnquete = new Repositorio<Enquete>();
     return (await dbEnquete.RetornarTodos()).First(e => e.PerguntaId == perguntaId).Imagem;
 }
        public async Task SalvaEnquete()
        {
            var confirmConfig = new Acr.UserDialogs.ConfirmConfig();
            confirmConfig.CancelText = "Cancelar";
            confirmConfig.OkText = "Finalizar";
            confirmConfig.Message = "Tem certeza de que deseja criar esta enquete?";

            if (await Acr.UserDialogs.UserDialogs.Instance.ConfirmAsync(confirmConfig))
            {
                try
                {
                    this.Pergunta.Respostas = new List<Resposta>();
                    this.Pergunta.Respostas = this.Respostas;

                    this.Enquete.Pergunta = new Pergunta();
                    this.Enquete.Pergunta = this.Pergunta;
                    this.Enquete.Tipo = EnumTipoEnquete.Interesse;
                    this.Enquete.Titulo = this.Pergunta.TextoPergunta;
                    this.Enquete.Status = EnumStatusEnquete.Publicada;

                    var dbUsuario = new Repositorio<Usuario>();
                    var usuarioLogado = (await dbUsuario.RetornarTodos()).First();

                    this.Enquete.UsuarioId = usuarioLogado.Id;
                    this.Enquete.ServerEnqueteId = -1;
                    this.Enquete.propria = true;
                    this.Enquete.AtivaNoFront = true;

                    List<Resposta> gravou = new List<Resposta>();
                    var db = new Repositorio<Enquete>();

                    Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Enviando...");
                    if (await db.Inserir(this.Enquete))
                    {
                        var result = await this.service.CadastrarNovaEnquete(this.Enquete);

                        if (result != null)
                        {
                            try
                            {
                                // Atualizando dados locais com o ID da pergunta no servidor
                                var dbEnquete = new Repositorio<Enquete>();
                                this.Enquete.PerguntaServerId = result.PerguntaId;
                                this.Enquete.Pergunta.PerguntaServerId = result.PerguntaId;
                                this.Enquete.ServerEnqueteId = result.EnqueteId;
							
                                foreach (var item in Respostas)
                                {
                                    item.PerguntaServerId = result.PerguntaId;
                                }
							
                                //await dbEnquete.Atualizar(Enquete);
                                // Fim da Atualização

                                gravou = await this.service.CadastrarRespostasDaPergunta(this.Pergunta.Respostas);
                                var dbResposta = new Repositorio<Resposta>();

                                if (gravou != null && gravou.Any())
                                {
                                    foreach (var resp in gravou)
                                    {
                                        var _r = this.Enquete.Pergunta.Respostas.First(x => x.PerguntaServerId == resp.PerguntaServerId
                                                     && x.TextoResposta == resp.TextoResposta);
                                        _r.RespostaServerId = resp.RespostaServerId;
                                        _r.PerguntaServerId = resp.PerguntaServerId;

                                        await dbResposta.Atualizar(_r);
                                        await dbEnquete.Atualizar(Enquete);
                                    }
                                }

                            }
                            catch (Exception ex)
                            {
                                Insights.Report(ex);
                                throw ex;
                            }
                        }

                        Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                        if (gravou != null && gravou.Any())
                        {
                            await this.Navigation.PushModalAsync(new MainPage());
                        }
                        else
                            await Acr.UserDialogs.UserDialogs.Instance.AlertAsync(String.Empty, AppResources.TextoMsgCadastroErroEnquete, "OK");
                    }
                    else
                        await Acr.UserDialogs.UserDialogs.Instance.AlertAsync(String.Empty, AppResources.TextoMsgCadastroErroEnquete, "OK");

                }
                catch (Exception ex)
                {
                    Insights.Report(ex);
                    throw ex;
                }
            }
        }
        protected async override void OnAppearing()
        {
            try
            {
                var progress = UserDialogs.Instance.Progress(AppResources.MsgLoading);
                progress.Show();
                
                #region -- FAKE DATABASE --
                //          var enquetes = EnqueteMock.MockEnquetes();
                //          var dbEnquete = new Repositorio<Enquete>();
                //          if (!(await dbEnquete.RetornarTodos()).Any())
                //              await dbEnquete.InserirTodos(enquetes);
                //
                //          var usuario = UsuarioMock.MockUsuario();
                //          var dbUsuario = new Repositorio<Usuario>();
                //          if (!(await dbUsuario.RetornarTodos()).Any())
                //              await dbUsuario.Inserir(usuario);
                //
                //          var amigos = AmigoMock.RetornaListaMockAmigo();
                //          var dbAmigo = new Repositorio<Amigo>();
                //          if (!(await dbAmigo.RetornarTodos()).Any())
                //              await dbAmigo.InserirTodos(amigos);
                #endregion
                
                #region -- Atualiza Categorias
                this.BindingContext = model = App.Container.Resolve<ColetaDadosViewModel>();
                
                var dbCategoria = new Repositorio<Categoria>();
                var ultimaCategoria = -1;
                
                if (await dbCategoria.ExisteCategoria())
                    ultimaCategoria = (await dbCategoria.RetornarTodos()).OrderByDescending(c => c.Id).First().Id;
                
                var categorias = await this.model.RetornarCategoriasDoServidor(ultimaCategoria);

                await dbCategoria.InserirTodos(categorias.ToList());

                try
                {
                    var _categorias = await dbCategoria.RetornarTodos();
                    
                    foreach (var item in categorias)
                    {
                        if (!String.IsNullOrEmpty(item.Imagem))
                            await DependencyService.Get<ISaveAndLoadFile>().BaixaImagemSalvarEmDisco(item.Imagem, Constants.baseImageAddress);
                    }
                }
                catch (Exception ex)
                {
                    Insights.Report(ex);
                }
                
                #endregion
                
                //Simula o carregamento de dados.
                Device.StartTimer(TimeSpan.FromMilliseconds(500), () =>
                    {
                        if (progress.IsShowing && progress.PercentComplete < 100)
                            progress.PercentComplete = progress.PercentComplete + 10;
                        else if (progress.IsShowing && progress.PercentComplete >= 100)
                        {
                            progress.Hide();
                            IsLogado();
                        }
                
                        return true;
                    });
            }
            catch (Exception ex)
            {
                Insights.Report(ex);
            }
        }
        /*
                    var _sexo = sexoPicker.SelectedIndex;
                    var _nascimento = nascimentoPicker.Date;
                    var _email = entEmail.Text;
                    var _nome = entNome.Text;
                    var _ddd = entDDD.Text;
                    var _tel = entTelefone.Text;
                    var _municipio = entMunicipio.Text;
        */

        public async Task EfetuarCadastro(int? sexo, DateTime? nascimento, string email, string nome, string ddd, string tel, string municipio, string senha)
        {
            Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Enviando...");

            if (this.Usuario.Categorias == null || !this.Usuario.Categorias.Any())
            {
                Acr.UserDialogs.UserDialogs.Instance.HideLoading();

                await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Selecione ao menos uma categoria, clique no botão 'Categorias de Interesse'");
                return;
            }
            else
            {
                try
                {
                    var db = new Repositorio<Usuario>();
                    Usuario usuario = new Usuario();

                    if (this.Usuario.Categorias == null || !this.Usuario.Categorias.Any())
                    {
                        Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                        await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Selecione ao menos uma categoria, clique no botão 'Selecionar Categoria'");
                        return;
                    }

                    var categorias = string.Empty;
                    foreach (var categoria in this.Usuario.Categorias)
                    {
                        categorias += categoria.Id.ToString() + ';';
                    }
                    categorias = categorias.TrimEnd(';');

                    usuario.CategoriaMobileSelection = categorias;

                    var dbFacebook = new Repositorio<FacebookInfos>();
                    var _token = (await dbFacebook.RetornarTodos()).FirstOrDefault();

                    if (_token != null)
                    {
                        usuario.FacebookID = _token.user_id;
                        usuario.FacebookToken = _token.access_token;
                    }

                    usuario.EmpresaApp = 1;
                    usuario.Nome = nome;
                    usuario.DataNascimento = nascimento;
                    usuario.DDD = ddd;
                    usuario.Telefone = tel;
                    usuario.Email = email;
                    usuario.Municipio = municipio;
                    usuario.Senha = senha;
                    //usuario.Categorias = this.Usuario.Categorias;

                    if (sexo == 1)
                        usuario.Sexo = EnumSexo.Masculino;
                    else
                        usuario.Sexo = EnumSexo.Feminino;

                    var cadastrou = await this.service.CadastraNovoUsuario(usuario);

                    try
                    {
                        if (cadastrou != null)
                        {
                            this.Logar = new Action(async () =>
                                {
                                    Acr.UserDialogs.UserDialogs.Instance.HideLoading();

                                    var autenticado = await this.service.FazerLogin(cadastrou.Email, cadastrou.Senha);

                                    if (autenticado)
                                    {
                                        var dbUsuario = new Repositorio<Usuario>();

                                        var temUsuario = (await dbUsuario.RetornarTodos()).FirstOrDefault();
                                        if (temUsuario != null)
                                            await dbUsuario.Inserir(cadastrou);

                                        var dbSession = new Repositorio<ControleSession>();
                                        await dbSession.Inserir(new ControleSession { Logado = true });

                                        if (temUsuario != null)
                                            await this.Navigation.PushModalAsync(new MainPage());
                                        else
                                            await Acr.UserDialogs.UserDialogs.Instance.AlertAsync("Erro na gravação do usuário");
                                    }
                                    else
                                        Acr.UserDialogs.UserDialogs.Instance.Alert("Dados incorretos!", "Erro", "OK");
                                });

                            await db.Inserir(cadastrou);
                            foreach (var categoria in cadastrou.CategoriaMobileSelection.Split(';'))
                            {
                                var dbUsuarioCategoria = new Repositorio<UsuarioCategoria>();

                                await dbUsuarioCategoria.Inserir(new UsuarioCategoria{ CategoriaId = Convert.ToInt32(categoria) });
                            }

                            Acr.UserDialogs.UserDialogs.Instance.HideLoading();
                            this.Logar.Invoke();
                        }
                        else
                        {
                            Acr.UserDialogs.UserDialogs.Instance.HideLoading();

                            await Acr.UserDialogs
                                .UserDialogs
                                .Instance
                                .AlertAsync(AppResources.MsgErroCadastroUsuario, AppResources.TituloErro, "OK");
                        }
                    }
                    catch (NullReferenceException)
                    {
                        Acr.UserDialogs.UserDialogs.Instance.HideLoading();

                        await Acr.UserDialogs
                            .UserDialogs
                            .Instance
                            .AlertAsync(AppResources.MsgErroCadastroUsuarioCamposEmBranco, AppResources.TituloErro, "OK");
                    }
                }
                catch (Exception ex)
                {
                    Insights.Report(ex);
                }
            }
        }
        public async Task<bool> FazCadastroCategoriasFB(List<Categoria> categorias, string email)
        {
            var dbUsuario = new Repositorio<Usuario>();
            var query = await dbUsuario.RetornarTodos();
            var _usuario = query.First();

            var cats = string.Empty;
            foreach (var categoria in categorias)
            {
                cats += categoria.Id.ToString() + ';';
            }
            cats = cats.TrimEnd(';');

            _usuario.CategoriaMobileSelection = cats;

            if (!String.IsNullOrEmpty(email))
                _usuario.Email = email;

            var result = await this.service.AtualizarCategoriasFB(_usuario);

            if (result != null)
            {
                return await Task.FromResult(true);
            }

            return await Task.FromResult(false);
        }