private List <EventoAtleta> BuscarInscricoesAtleta(SimuladorFormularioDeAtleta filtro)
        {
            using (SportingTrainingEntities context = new SportingTrainingEntities())
            {
                var consultaInscricoes = context.EventosAtletas.Include("Atleta").Include("Evento").Where(x => x.IdAtleta == filtro.IdAtleta).AsQueryable();

                if (!string.IsNullOrEmpty(filtro.ModalidadeBusca))
                {
                    consultaInscricoes = consultaInscricoes.Where(x => x.Evento.Modalidade.Contains(filtro.ModalidadeBusca));
                }
                if (!string.IsNullOrEmpty(filtro.SituacaoBusca))
                {
                    consultaInscricoes = consultaInscricoes.Where(x => x.Evento.Situacao.ToUpper() == filtro.SituacaoBusca.ToUpper());
                }
                if (!string.IsNullOrEmpty(filtro.DataInicioBusca))
                {
                    DateTime dataInicioBusca = DateTime.Parse(filtro.DataInicioBusca);
                    consultaInscricoes = consultaInscricoes.Where(x => x.DataInscricao >= dataInicioBusca);
                }
                if (!string.IsNullOrEmpty(filtro.DataFimBusca))
                {
                    DateTime dataFimBusca = DateTime.Parse(filtro.DataFimBusca);
                    consultaInscricoes = consultaInscricoes.Where(x => x.DataInscricao <= dataFimBusca);
                }
                //
                return(consultaInscricoes.ToList());
            }
        }
        public string CancelarInscricaoAtletaEmEvento([FromBody] SimuladorFormularioDeAtleta formulario, string token)
        {
            using (SportingTrainingEntities context = new SportingTrainingEntities())
            {
                try
                {
                    Usuario usuarioSessao = usuarioController.UsuarioLogado(token);
                    if (usuarioSessao != null && usuarioSessao.TipoUsuario == "Atleta")
                    {
                        EventoAtleta inscricao = context.EventosAtletas.FirstOrDefault(x => x.IdEventoAtleta == formulario.IdEventoAtleta);

                        if (inscricao != null)
                        {
                            inscricao.InscricaoAtleta = "Cancelada";

                            context.SaveChanges();

                            return("Inscrição cancelada com sucesso!");
                        }
                        else
                        {
                            return("Dados inválidos para cancelamento de inscrição!");
                        }
                    }
                    else
                    {
                        return("Usuário de sessão inválido!");
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao cancelar inscrição de atleta no evento!", ex);
                }
            }
        }
        public string InscreverAtletaEmEvento([FromBody] SimuladorFormularioDeAtleta formulario, string token)
        {
            using (SportingTrainingEntities context = new SportingTrainingEntities())
            {
                try
                {
                    Usuario usuarioSessao = usuarioController.UsuarioLogado(token);
                    if (usuarioSessao != null && usuarioSessao.TipoUsuario == "Atleta")
                    {
                        if (!string.IsNullOrEmpty(formulario.IdAtleta) && formulario.IdEventoInscricao != 0)
                        {
                            EventoAtleta novaInscricao = new EventoAtleta();
                            novaInscricao.Atleta          = context.Atletas.FirstOrDefault(x => x.IdAtleta == formulario.IdAtleta);
                            novaInscricao.Evento          = context.Eventos.FirstOrDefault(x => x.IdEvento == formulario.IdEventoInscricao);
                            novaInscricao.InscricaoAtleta = "Ativa";
                            novaInscricao.DataInscricao   = DateTime.Now;
                            context.EventosAtletas.Add(novaInscricao);

                            context.SaveChanges();

                            return("Inscrição realizada com sucesso!");
                        }
                        else
                        {
                            return("Dados inválidos para inscrição!");
                        }
                    }
                    else
                    {
                        return("Usuário de sessão inválido!");
                    }
                }
                catch (DbEntityValidationException e)
                {
                    foreach (var eve in e.EntityValidationErrors)
                    {
                        System.Diagnostics.Debug.WriteLine("Entidade do tipo \"{0}\" com estado \"{1}\" tem os seguintes erros de validação:",
                                                           eve.Entry.Entity.GetType().Name, eve.Entry.State);
                        foreach (var ve in eve.ValidationErrors)
                        {
                            System.Diagnostics.Debug.WriteLine("- Propriedade: \"{0}\", Error: \"{1}\"",
                                                               ve.PropertyName, ve.ErrorMessage);
                        }
                    }
                    throw;
                }
            }
        }
        public HttpResponseMessage VisualizarInscricoesAtleta([FromBody] SimuladorFormularioDeAtleta filtro, string token)
        {
            try
            {
                var response = new HttpResponseMessage(HttpStatusCode.OK);

                Usuario usuarioSessao = usuarioController.UsuarioLogado(token);
                if (usuarioSessao != null && usuarioSessao.TipoUsuario == "Atleta")
                {
                    List <EventoAtleta>  listaDeInscricoes = BuscarInscricoesAtleta(filtro);
                    List <InscricaoJson> inscricoesEmJson  = new List <InscricaoJson>();

                    foreach (var inscricao in listaDeInscricoes)
                    {
                        InscricaoJson inscricaoJson = new InscricaoJson
                        {
                            NomeAtleta       = inscricao.Atleta.Nome,
                            NomeEvento       = inscricao.Evento.Nome,
                            ModalidadeEvento = inscricao.Evento.Modalidade,
                            SituacaoEvento   = inscricao.Evento.Situacao,
                            DataEvento       = inscricao.Evento.Data,
                            StatusInscricao  = inscricao.InscricaoAtleta,
                            DataInscricao    = inscricao.DataInscricao
                        };

                        inscricoesEmJson.Add(inscricaoJson);
                    }

                    response.Content = new StringContent(JsonConvert.SerializeObject(inscricoesEmJson));
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                }
                else
                {
                    response.Content = new StringContent("Usuário inválido!");
                }
                return(response);
            }
            catch (Exception ex)
            {
                throw new Exception("", ex);
            }
        }
        public string ExcluirAtleta([FromBody] SimuladorFormularioDeAtleta formulario, string token)
        {
            using (SportingTrainingEntities context = new SportingTrainingEntities())
            {
                try
                {
                    Usuario usuarioSessao = usuarioController.UsuarioLogado(token);
                    if (usuarioSessao != null && usuarioSessao.TipoUsuario == "Atleta")
                    {
                        Atleta atleta = context.Atletas.FirstOrDefault(x => x.IdAtleta == formulario.IdAtleta);
                        if (atleta != null)
                        {
                            //antes dessa parte, lembrar de cancelar inscrição do atleta, se ele tiver inscrito em algum evento
                            if (atleta.EventosAtleta.Count > 0)
                            {
                                context.EventosAtletas.RemoveRange(atleta.EventosAtleta);
                            }
                            context.Atletas.Remove(atleta);
                            usuarioController.Deslogar(token);

                            context.SaveChanges();

                            usuarioController.ExcluirUsuarioPorToken(token);

                            return("Atleta excluído com sucesso!");
                        }
                        else
                        {
                            return("Atleta não pode ser excluído");
                        }
                    }
                    else
                    {
                        return("Usuário de sessão inválido!");
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Erro ao excluir atleta!", ex);
                }
            }
        }