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

            Expression<Func<Enquete,bool>> porId = (x) => x.Id == enqueteId && x.Tipo == EnumTipoEnquete.Mensagem;

            var mensagem = (await dbEnquete.ProcurarPorFiltro(porId));

            var dbCategoria = new Repositorio<Categoria>();
            var _categoria = await dbCategoria.RetornarPorId(mensagem.CategoriaId);

            mensagem.Categoria = _categoria;
            mensagem.CategoriaId = _categoria.Id;
            mensagem.EnqueteRespondida = true;
            
            await dbEnquete.Atualizar(mensagem);

            await this.Navigation.PushAsync(new ExibirMensagemPage(enqueteId, mensagem.Imagem, mensagem.UrlVideo, mensagem.TemVoucher));
        }
        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");
            }
        }