// POST: Desafios/Edit/5
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.

        /* [HttpPost]
         * public async Task<ActionResult> EditarUtilizador(EditarUtilizadorViewModel model, string[] selectedTag, HttpPostedFileBase file)
         * {
         *   var id = User.Identity.GetUserId();
         *   // Get the userprofile
         *   ApplicationUser user = db.Users.FirstOrDefault(u => u.Id.Equals(id));
         *
         *   if (ModelState.IsValid)
         *   {
         *
         *       if (file != null)
         *       {
         *           var fileName = id + "_" + file.FileName;
         *           file.SaveAs(HttpContext.Server.MapPath("~/Images/")
         + fileName);
         +           model.ImagePath = fileName;
         +       }
         +       else
         +       {
         +           var filename = user.ImagePath;
         +           model.ImagePath = filename;
         +       }
         +       user.ImagePath = model.ImagePath;
         +
         +
         +       atualizarUtilizadorTag(user, selectedTag);
         +       // Update fields
         +       user.DataNascimento = model.DataNascimento;
         +       user.empresa = model.Empresa;
         +       user.Sobre = model.Sobre;
         +       user.Iban = model.Iban;
         +       user.Telemóvel = model.Telemóvel;
         +       user.website = model.Website;
         +
         +       var result =  UserManager.CheckPassword(user, model.Password);
         +
         +       if (result)
         +       {
         +           await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.Password, model.NovaPassword);
         +       }
         +       else
         +       {
         +           TempData["CustomError"] = "A sua password antiga não está correta";
         +       }
         +
         +       db.Entry(user).State = EntityState.Modified;
         +
         +       db.SaveChanges();
         +       preencherTagUtilizador(user);
         +       return RedirectToAction("Index", "Home"); // or whatever
         +   }
         +   preencherTagUtilizador(user);
         +   var caminho = user.ImagePath;
         +   model.ImagePath = caminho;
         +   model.Utilizador = user.Nome;
         +   model.Email = user.Email;
         +   return View(model);
         + }*/

        public ActionResult VisualizarPerfilUtilizador(string id)
        {
            var utilizador = db.Users.Where(u => u.UserName == id).FirstOrDefault();

            if (utilizador != null)
            {
                var role = (from s in db.Roles where s.Id == utilizador.TipoUtilizador select s.Name).First();
                EditarUtilizadorViewModel PerfilUtilizador = new EditarUtilizadorViewModel();  // reaproveitar o modelview
                PerfilUtilizador.Utilizador = utilizador.UserName;
                PerfilUtilizador.Email      = utilizador.Email;
                PerfilUtilizador.Telemóvel  = utilizador.Telemóvel;
                DateTime reference = DateTime.Now;
                PerfilUtilizador.Idade          = CalculaIdade(reference, utilizador.DataNascimento);
                PerfilUtilizador.TipoUtilizador = role;
                preencherTagUtilizador(utilizador);
                PerfilUtilizador.Sobre     = utilizador.Sobre;
                PerfilUtilizador.Empresa   = utilizador.empresa;
                PerfilUtilizador.Website   = utilizador.website;
                PerfilUtilizador.Pontos    = utilizador.pontos;
                PerfilUtilizador.Iban      = utilizador.Iban;
                PerfilUtilizador.ImagePath = utilizador.ImagePath;
                return(View(PerfilUtilizador));
            }
            else
            {
                return(new HttpNotFoundResult("O Perfil que indicou não existe"));
            }
        }
        public ActionResult _InformacaoBasicaUtilizador(EditarUtilizadorViewModel model, HttpPostedFileBase file)
        {
            var user       = User.Identity.GetUserId();
            var utilizador = db.Users.Where(d => d.Id == user).First();

            if (ModelState.IsValid)
            {
                if (file != null)
                {
                    var fileName = utilizador.Id + "_" + file.FileName;
                    file.SaveAs(HttpContext.Server.MapPath("~/Images/")
                                + fileName);
                    model.ImagePath = fileName;
                }
                else
                {
                    var filename = utilizador.ImagePath;
                    model.ImagePath = filename;
                }
                utilizador.ImagePath = model.ImagePath;

                if (model.ApagarFoto == true)
                {
                    utilizador.ImagePath = null;
                }
            }


            utilizador.Telemóvel = model.Telemóvel;
            db.SaveChanges();
            return(View("~/Views/Account/EditarUtilizador.cshtml"));
        }
        public ActionResult EditarUtilizador()
        {
            var id = User.Identity.GetUserId();

            // Fetch the userprofile
            ApplicationUser user = db.Users.Include(u => u.Tags).FirstOrDefault(u => u.Id.Equals(id));

            preencherTagUtilizador(user);
            var role = (from s in db.Roles where s.Id == user.TipoUtilizador select s.Name).First();

            // Construct the viewmodel
            EditarUtilizadorViewModel model = new EditarUtilizadorViewModel();

            model.Utilizador     = user.Nome;
            model.Email          = user.Email;
            model.TipoUtilizador = role;
            model.DataNascimento = user.DataNascimento;
            model.Empresa        = user.empresa;
            model.Sobre          = user.Sobre;
            model.Iban           = user.Iban;
            model.Telemóvel      = user.Telemóvel;
            model.Website        = user.website;
            model.ImagePath      = user.ImagePath;

            return(View(model));
        }
        public async Task <ActionResult> EditarUtilizador(EditarUtilizadorViewModel model, string[] selectedTag, HttpPostedFileBase file)
        {
            var id = User.Identity.GetUserId();
            // Get the userprofile
            ApplicationUser user = db.Users.FirstOrDefault(u => u.Id.Equals(id));

            if (ModelState.IsValid)
            {
                if (file != null)
                {
                    var fileName = id + "_" + file.FileName;
                    file.SaveAs(HttpContext.Server.MapPath("~/Images/")
                                + fileName);
                    model.ImagePath = fileName;
                }
                else
                {
                    var filename = user.ImagePath;
                    model.ImagePath = filename;
                }
                user.ImagePath = model.ImagePath;


                atualizarUtilizadorTag(user, selectedTag);
                // Update fields
                user.DataNascimento = model.DataNascimento;
                user.empresa        = model.Empresa;
                user.Sobre          = model.Sobre;
                user.Iban           = model.Iban;
                user.Telemóvel      = model.Telemóvel;
                user.website        = model.Website;

                var result = UserManager.CheckPassword(user, model.Password);

                if (result)
                {
                    await UserManager.ChangePasswordAsync(User.Identity.GetUserId(), model.Password, model.NovaPassword);
                }
                else
                {
                    TempData["CustomError"] = "A sua password antiga não está correta";
                }

                db.Entry(user).State = EntityState.Modified;

                db.SaveChanges();
                preencherTagUtilizador(user);
                return(RedirectToAction("Index", "Home")); // or whatever
            }
            preencherTagUtilizador(user);
            var caminho = user.ImagePath;

            model.ImagePath  = caminho;
            model.Utilizador = user.Nome;
            model.Email      = user.Email;
            return(View(model));
        }
        public PartialViewResult _OutrasInformacoes()
        {
            var             id   = User.Identity.GetUserId();
            ApplicationUser user = db.Users.Include(u => u.Tags).FirstOrDefault(u => u.Id.Equals(id));

            EditarUtilizadorViewModel model = new EditarUtilizadorViewModel();

            model.Empresa     = user.empresa;
            model.Iban        = user.Iban;
            model.Website     = user.website;
            model.Sobre       = user.Sobre;
            model.Notificacao = user.Notificacao;

            return(PartialView("~/Views/PartialViews/OutrasInformacoes.cshtml", model));
        }
        public PartialViewResult _InformacaoBasica()
        {
            var             id   = User.Identity.GetUserId();
            ApplicationUser user = db.Users.Include(u => u.Tags).FirstOrDefault(u => u.Id.Equals(id));

            preencherTagUtilizador(user);
            var role = (from s in db.Roles where s.Id == user.TipoUtilizador select s.Name).First();

            EditarUtilizadorViewModel model = new EditarUtilizadorViewModel();

            model.Utilizador     = user.Nome;
            model.Email          = user.Email;
            model.ImagePath      = user.ImagePath;
            model.DataNascimento = user.DataNascimento;
            model.Telemóvel      = user.Telemóvel;
            model.Empresa        = user.empresa;
            model.Iban           = user.Iban;
            model.Website        = user.website;
            model.TipoUtilizador = role;



            return(PartialView("~/Views/PartialViews/InformacaoBasica.cshtml", model));
        }