public ActionResult Manter(int id = -1)
        {
            seloRepositorio = FabricaDeModulos.CriarSeloRepositorio();
            ColocarListaCategoriaEListaSeloNaViewBag();
            bool estaEditando = id > 0;

            if (estaEditando)
            {
                jogoRepositorio = FabricaDeModulos.CriarJogoRepositorio();
                Jogo jogo = jogoRepositorio.BuscarPorId(id);

                ManterJogoModel model = new ManterJogoModel()
                {
                    Nome = jogo.Nome,
                    Categoria = jogo.Categoria,
                    Selo = jogo.Selo.Nome,
                    Descricao = jogo.Descricao,
                    Imagem = jogo.Imagem,
                    Video = jogo.Video
                };

                return View(model);
            }
            else
            {
                return View(new ManterJogoModel());
            }
        }
        public ActionResult Salvar(ManterJogoModel model)
        {
            if (ModelState.IsValid)
            {
                Jogo jogo = this.ManterJogoModelToJogo(model);

                if(jogo.Id == 0)
                {
                    FabricaDeModulos.CriarJogoRepositorio().Criar(jogo);

                    TempData["Mensagem"] = "Jogo inserido com sucesso!";
                }
                else
                {
                    FabricaDeModulos.CriarJogoRepositorio().Atualizar(jogo);

                    TempData["Mensagem"] = "Jogo atualizado com sucesso!";
                }

                return RedirectToAction("JogosDisponiveis", "Relatorio");
            }
            else
            {
                return View("Manter", model);
            }
        }
        public ActionResult JogoManter(int? id)
        {
            if(id.HasValue)
            {

                var jogo = repo.BuscarPorId((int)id);

                var model = new ManterJogoModel()
                {
                    Id = jogo.Id,
                    Nome = jogo.Nome,
                    Categoria = jogo.Categoria,

                    Descricao = jogo.Descricao,
                    Imagem = jogo.Imagem,
                    Video = jogo.Video,
                    Selo = jogo.Selo

                };

                return View(model);
            }
            else
            {
                return View();
            }
        }
        public ActionResult Salvar(ManterJogoModel model)
        {
            if (ModelState.IsValid)
            {
                IJogoRepositorio repositorio = FabricaDeModulos.CriarJogoRepositorio();
                var jogo = ManterJogoModelParaJogo(model);

                if (jogo.Id == 0)
                {
                     repositorio.Criar(jogo);
                }
                else
                {
                    repositorio.Atualizar(jogo);
                }
                TempData["Mensagem"] = "Jogo salvo com sucesso!";

                return RedirectToAction("JogosDisponiveis", "Relatorio");
            }
            else
            {
                TempData["Mensagem"] = "O Jogo não é valido";

                return View("Manter", model);
            }
        }
        private Jogo ManterJogoModelParaJogo(ManterJogoModel model)
        {
            Jogo jogo = (model.Id.HasValue) ? new Jogo((int)model.Id) : jogo = new Jogo();

            jogo.Nome = model.Nome;
            jogo.Categoria = model.Categoria;
            jogo.Descricao = model.Descricao;
            jogo.Selo = model.Selo;
            jogo.UrlImagem = model.Imagem;
            jogo.TagVideo = model.Video;

            return jogo;
        }
        public ActionResult Salvar(ManterJogoModel model)
        {
            if (ModelState.IsValid)
            {

                if (model.Id != null)
                {

                    Jogo jogo = new Jogo((int)model.Id)
                    {
                        Nome = model.Nome,
                        Descricao = model.Descricao,

                        Categoria = model.Categoria,
                        Imagem = model.Imagem,
                        Video = model.Video,
                        Selo = model.Selo
                    };

                    repo.Atualizar(jogo);
                    TempData["MensagemSalvarEditar"] = "Jogo Editado com sucesso!";

                    return RedirectToAction("JogosDisponiveis", "Relatorio");

                }
                else
                {

                    Jogo jogo = new Jogo()
                    {
                        Nome = model.Nome,
                        Descricao = model.Descricao,

                        Categoria = model.Categoria,
                        Imagem = model.Imagem,
                        Video = model.Video,
                        Selo = model.Selo
                    };

                    repo.Criar(jogo);
                    TempData["MensagemSalvarEditar"] = "Jogo salvo com sucesso!";

                    return RedirectToAction("JogosDisponiveis", "Relatorio");
                }
            }
            else
            {
                return View("JogoManter",model);
            }
        }
 public ActionResult Manter(int id = 0)
 {
     if (id != 0)
     {
         var jogoRetornado = repositorio.BuscarPorId((int)id);
         var manterJogo = new ManterJogoModel()
         {
             Id = jogoRetornado.Id,
             Nome = jogoRetornado.Nome,
             Categoria = jogoRetornado.Categoria,
             Descricao = jogoRetornado.Descricao,
             Selo = jogoRetornado.Selo,
             Imagem = jogoRetornado.Imagem,
             Video = jogoRetornado.Video
         };
         return View(manterJogo);
     }
     return View();
 }
        public ActionResult Salvar(ManterJogoModel manterJogo)
        {
            if (ModelState.IsValid)
            {
                if (manterJogo.Id != null)
                {
                    Jogo jogo = new Jogo((int)manterJogo.Id)
                    {
                        Nome = manterJogo.Nome,
                        Categoria = manterJogo.Categoria.Value,
                        Descricao = manterJogo.Descricao,
                        Selo = manterJogo.Selo.Value,
                        Imagem = manterJogo.Imagem,
                        Video = manterJogo.Video
                    };
                    repositorio.Atualizar(jogo);
                    TempData["Success"] = "Jogo editado com sucesso.";
                    return RedirectToAction("JogosDisponiveis", "Relatorio");
                }
                else
                {
                    Jogo jogo = new Jogo()
                    {
                        Nome = manterJogo.Nome,
                        Categoria = manterJogo.Categoria.Value,
                        Descricao = manterJogo.Descricao,
                        Selo = manterJogo.Selo.Value,
                        Imagem = manterJogo.Imagem,
                        Video = manterJogo.Video
                    };

                    repositorio.Criar(jogo);
                    TempData["Success"] = "Jogo salvo com sucesso.";

                    return RedirectToAction("JogosDisponiveis", "Relatorio");
                }
            }
            else
            {
                return View("Manter", manterJogo);
            }
        }
        public ActionResult Salvar(ManterJogoModel model)
        {
            bool podeSalvarNoBanco = ModelState.IsValid;

            if (podeSalvarNoBanco)
            {
                bool deveAlterar = model.Id > 0;
                jogoRepositorio = FabricaDeModulos.CriarJogoRepositorio();
                seloRepositorio = FabricaDeModulos.CriarSeloRepositorio();

                Jogo jogo = new Jogo(model.Id)
                {
                    Nome = model.Nome,
                    Categoria = model.Categoria,
                    Descricao = model.Descricao,
                    Imagem = model.Imagem,
                    Video = model.Video,
                    IdSelo = seloRepositorio.BuscarPorNome(model.Selo).Id,
                    Disponivel = true
                };

                if (deveAlterar)
                {
                    jogoRepositorio.Atualizar(jogo);
                    TempData["Mensagem"] = "Jogo editado com sucesso!";
                    TempData["TipoMensagem"] = "sucesso";
                }
                else
                {
                    jogoRepositorio.Criar(jogo);
                    TempData["Mensagem"] = "Jogo salvo com sucesso!";
                    TempData["TipoMensagem"] = "sucesso";
                }

                return RedirectToAction("JogosDisponiveis", "Relatorio");
            }
            else
            {
                ColocarListaCategoriaEListaSeloNaViewBag();
                return View("Manter", model);
            }
        }
        public static Jogo ManterJogoModelToJogo(this Controller controller, ManterJogoModel model)
        {
            Jogo jogo = (model.Id.HasValue) ? new Jogo((int)model.Id) : jogo = new Jogo();

            jogo.Nome = model.Nome;
            jogo.Categoria = model.Categoria;
            jogo.Descricao = model.Descricao;
            jogo.Selo = model.Selo;
            jogo.Imagem = model.Imagem;
            jogo.Video = model.Video;
            jogo.DataLocacao = model.DataLocacao;

            return jogo;
        }