public async Task <IActionResult> Edit(int id, [Bind("Id,Fotografia,DataFoto,Local,CaoFK")] Fotografias fotografias)
        {
            if (id != fotografias.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(fotografias);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!FotografiasExists(fotografias.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CaoFK"] = new SelectList(_context.Caes, "Id", "Id", fotografias.CaoFK);
            return(View(fotografias));
        }
        public async Task <IActionResult> Create([Bind("DataFoto,Local,CaoFK")] Fotografias fotografias, IFormFile fotoCao)

        /* processar o ficheiro
         * - existe ficheiro?
         *  - se não existe, o que fazer? => gerar uma mensagem de erro e devolver o controlo à View
         *  - se continua é porque o ficheiro existe
         *      - mas será que é do tipo correto?
         *          - avaliar se é imagem
         *              - se sim: - especificar o seu novo nome
         *                  - específicar a localização
         *                  - associar ao objeto 'foto' o nome deste ficheiro
         *                  - guardar ficheiro no disco rígido do servidor
         *              - se não => gerar uma mensagem de erro e devolver o controlo à View
         */



        {
            //var auxiliar
            string nomeImagem = "";

            if (fotoCao == null)
            {
                // não há ficheiro
                // adicionar msg de erro
                ModelState.AddModelError("", "Adicione, por favor, a fotografia do cão");
                ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome");
                // devolver o controlo à View
                return(View(fotografias));
            }
            else
            {
                // há ficheiro. Mas será um ficheiro válido?
                if (fotoCao.ContentType == "image/jpeg" || fotoCao.ContentType == "image/png")
                {
                    //definir o novo nome da foto da fotografia
                    Guid g;
                    g          = Guid.NewGuid();
                    nomeImagem = fotografias.CaoFK + "_" + g.ToString(); // tambem poderia ser usado a formatação
                    // determinar a extensão do nome da imagem
                    string extensao = Path.GetExtension(fotoCao.FileName).ToLower();
                    // agora, consigo ter o nome final do ficheiro
                    nomeImagem = nomeImagem + extensao;

                    //associar este ficheiro aos dados da Fotografia do cão
                    fotografias.Fotografia = nomeImagem;

                    //localização do amazenamento da imagem
                    string localizacaoFicheiro = _caminho.WebRootPath;
                    nomeImagem = Path.Combine(localizacaoFicheiro, "fotos", nomeImagem);
                }
                else
                {
                    // ficheiro não é válido
                    // adicionar msg de erro
                    ModelState.AddModelError("", "Só pode escolher uma imagem para a associar ao cão");
                    ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome");
                    // devolver o controlo à View
                    return(View(fotografias));
                }
            }

            if (ModelState.IsValid)
            {
                // Adicionar os dados da nova fotografia à base de dados
                _context.Add(fotografias);
                // Consolidar os dados na base de dados
                await _context.SaveChangesAsync();

                // Se cheguei aqui, tudo correu bem
                //Vou guardar, agora, no disco rígido do Servidor a imagem
                using var stream = new FileStream(nomeImagem, FileMode.Create);
                await fotoCao.CopyToAsync(stream);

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CaoFK"] = new SelectList(_context.Caes, "Id", "Id", fotografias.CaoFK);
            return(View(fotografias));
        }
        public async Task <IActionResult> Create([Bind("DataFoto,Local,CaoFK")] Fotografias foto, IFormFile fotoCao)
        {
            //avaliar se p utilizador escolheu uma opcao valida na dropdown do cao
            if (foto.CaoFK < 0)
            {
                //não foi escolhido um cao valido
                ModelState.AddModelError("", "Não se esqueça de escolher um cão..");
            }

            /*processar ficheiro
             *  -existe?
             *      -se não existe, o que fazer? => gerar uma mensagem de erro e devolver controlo a view
             *      -se continuo é porque o ficheiro existe
             *          -mas sera que é do tipo correto?
             *              -avaliar se é imagem
             *                  -se sim:-especificar o seu novo nome
             *                          -especificar a localização
             *                          -associar ao objeto foto o nome deste ficheiro
             *                          -guardar ficheiro no disco rigido do servidor
             *                  -se não: => gerar uma mensagem de erro e devolver controlo a view
             */
            //defenir o novo nome da fotografia
            string nomeImagem = "";

            if (fotoCao == null)
            {
                //não existe ficheiro
                //adicionar msm de erro
                ModelState.AddModelError("", "Adicione, por favor, a fotografia do cão");
                //devolver controlo a view
                ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome");
                return(View(foto));
            }
            else
            {
                //ha ficheiro. mas será um ficheiro valido?
                if (fotoCao.ContentType == "image/jpeg" || fotoCao.ContentType == "image/png")
                {
                    Guid g;
                    g          = Guid.NewGuid();
                    nomeImagem = foto.CaoFK + "_" + g.ToString();
                    //determinar a extenção da imagem
                    string extensao = Path.GetExtension(fotoCao.FileName).ToLower();
                    //agora consigo ter o nome final do ficheiro
                    nomeImagem = nomeImagem + extensao;

                    //associar este ficheiro aos dados da fotografia do cao
                    foto.Fotografia = nomeImagem;

                    //localização do armazenamento da imagem
                    string localizacaoFicheiro = _caminho.WebRootPath;
                    nomeImagem = Path.Combine(localizacaoFicheiro, "fotos", nomeImagem);
                }
                else
                {
                    ModelState.AddModelError("", "Adicione, por favor, a fotografia do cão");
                    //devolver controlo a view
                    ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome");
                    return(View(foto));
                }
            }



            if (ModelState.IsValid)
            {
                try {
                    //adicionar os dados da nova fotografia a base de dados
                    _context.Add(foto);
                    //consolidar os dados na base de dados
                    await _context.SaveChangesAsync();

                    //se cheguei ate aqui tudo correu bem
                    //vou guardar agora no disco rigido do servidor a imagem
                    using var stream = new FileStream(nomeImagem, FileMode.Create);
                    await fotoCao.CopyToAsync(stream);


                    return(RedirectToAction(nameof(Index)));
                } catch (Exception) {
                    ModelState.AddModelError("", "Ocorreu um erro...");
                }
            }

            else
            {
            }
            ViewData["CaoFK"] = new SelectList(_context.Caes.OrderBy(c => c.Nome), "Id", "Nome", foto.CaoFK);
            return(View(foto));
        }