/// <summary>
        /// DELETE whole album
        /// </summary>
        /// <param name="albumid"></param>
        /// <param name="pagename"></param>
        /// <returns>My Album view</returns>
        public IActionResult DeleteAlbum(string albumid, string pagename)
        {
            Album album = new Album();

            int AlbumId = 0;

            if (!String.IsNullOrEmpty(albumid))
            {
                AlbumId = Convert.ToInt32(Protector.Unprotect(albumid));
                album   = albumRepository.GetById(AlbumId);
            }

            albumRepository.Delete(AlbumId);

            foreach (var item in album.PhotoList)
            {
                LMCommon.DeletePhoto(item.PhotoPath, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);
            }

            toastNotification.AddSuccessToastMessage("Album Delete Successfully.");
            string page = pagename.ToLower();

            if (page == "allalbums")
            {
                return(RedirectToAction("AllAlbums", "User"));
            }
            else if (page == "newalbums")
            {
                return(RedirectToAction("NewAlbum", "User"));
            }

            return(RedirectToAction("MyAlbums", "User"));
            //          return RedirectToAction("AlbumDetail", new RouteValueDictionary(
            //new { controller = "User", action = "AlbumDetail", albumId = model.ProtectorId }));
        }
        public IActionResult DeletePhoto(int Id, string AlbumEncrypted)
        {
            Photos p = photoRepository.DeletePhoto(Id);

            //return RedirectToAction("AlbumDetail", new RouteValueDictionary(new { controller = "User", action = "AlbumDetail", albumId = AlbumEncrypted }));

            LMCommon.DeletePhoto(p.PhotoPath, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);

            toastNotification.AddSuccessToastMessage("Image Delete Successfully");
            return(RedirectToAction("AlbumDetail", new RouteValueDictionary(new { controller = "User", action = "AlbumDetail", albumId = AlbumEncrypted })));
        }
        public async Task <IActionResult> NewAlbum(NewAlbumViewModel obj)
        {
            Album model = obj.Album;

            //IF model state is valid then procced
            if (ModelState.IsValid)
            {
                if (model.Id == 0)
                {
                    model.CreatedDate = DateTime.Now.ToString();
                }

                AccountUser user = await GetLoggedInUser();

                model.AccountUserId = user.Id;

                if (model.FileLists?.Count > 0)
                {
                    string FileExtension = String.Empty;

                    //CREATE album with valid images or gives an ERROR
                    if (!ValidateFileExtension(model.FileLists, out FileExtension))
                    {
                        TempData["Error"] = "File Extension " + FileExtension + " is not allowed";
                        toastNotification.AddErrorToastMessage("File Extension " + FileExtension + " is not allowed");
                        return(RedirectToAction("NewAlbum"));
                    }

                    List <Photos> p     = new List <Photos>();
                    List <string> Paths = new List <string>();
                    Paths = await LMCommon.UploadMultiplePhoto(model.FileLists, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);

                    if (Paths.Count > 0)
                    {
                        foreach (var item in Paths)
                        {
                            Photos ph = new Photos();
                            ph.PhotoPath   = item;
                            ph.UserId      = user.Id;
                            ph.ImgName     = GetImageName(item);
                            ph.UplodedDate = DateTime.Now.ToString();
                            p.Add(ph);
                        }
                    }
                    model.PhotoList = p;
                }
                albumRepository.Add(model);
                toastNotification.AddSuccessToastMessage("Album save successfully");
            }
            return(RedirectToAction("NewAlbum"));
        }
        public async Task <IActionResult> UpdateAlbum(Album model)
        {
            //IF album is valid then proceed
            if (ModelState.IsValid)
            {
                if (model.Id == 0)
                {
                    model.CreatedDate = DateTime.Now.ToString();
                }
                AccountUser user = await GetLoggedInUser();

                model.AccountUserId = user.Id;
                if (model.FileLists?.Count > 0)
                {
                    string FileExtension = String.Empty;

                    //CHECK if file uploaded is wrong
                    if (!ValidateFileExtension(model.FileLists, out FileExtension))
                    {
                        //IF wrong file give an ERROR message
                        TempData["Error"] = "File Extension " + FileExtension + " is not allowed";
                        toastNotification.AddErrorToastMessage("File Extension " + FileExtension + " is not allowed");
                        return(RedirectToAction("AlbumDetail", new RouteValueDictionary(new { controller = "User", action = "AlbumDetail", albumId = model.ProtectorId })));
                    }
                    List <Photos> p     = new List <Photos>();
                    List <string> Paths = new List <string>();
                    Paths = await LMCommon.UploadMultiplePhoto(model.FileLists, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);

                    if (Paths.Count > 0)
                    {
                        foreach (var item in Paths)
                        {
                            Photos ph = new Photos();
                            ph.PhotoPath   = item;
                            ph.UserId      = user.Id;
                            ph.UplodedDate = DateTime.Now.ToString();
                            ph.ImgName     = GetImageName(item);

                            p.Add(ph);
                        }
                    }
                    model.PhotoList = p;
                }
                //SUCCESSFULY updated
                albumRepository.Add(model);
                toastNotification.AddSuccessToastMessage("Album update successfully");
            }

            return(RedirectToAction("NewAlbum"));
        }
        public async Task <IActionResult> ReplacePhoto(Photos model)
        {
            if (model != null)
            {
                string FileExtension = String.Empty;

                List <IFormFile> filelst = new List <IFormFile>();
                filelst.Add(model.ReplacePhoto);

                //CHECK for new file if it's valid then proceed
                if (!ValidateFileExtension(filelst, out FileExtension))
                {
                    TempData["Error"] = "File Extension " + FileExtension + " is not allowed";
                    return(RedirectToAction("AlbumDetail", new RouteValueDictionary(new { controller = "User", action = "AlbumDetail", albumId = model.AlbumEncrypted })));
                }

                Photos p = photoRepository.DeletePhoto(model.Id);
                //return RedirectToAction("AlbumDetail", new RouteValueDictionary(new { controller = "User", action = "AlbumDetail", albumId = AlbumEncrypted }));

                LMCommon.DeletePhoto(model.PhotoPath, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);

                string path = await LMCommon.UploadPhoto(model.ReplacePhoto, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);

                //REPLACE
                if (!String.IsNullOrEmpty(path))
                {
                    AccountUser user = await GetLoggedInUser();

                    Photos ph = new Photos();
                    ph.PhotoPath = path;

                    ph.AlbumId     = model.AlbumId;
                    ph.UserId      = user.Id;
                    ph.UplodedDate = DateTime.Now.ToString();
                    ph.ImgName     = GetImageName(path);

                    photoRepository.Add(ph);

                    toastNotification.AddSuccessToastMessage("Image Replace successfully");
                }
            }

            return(RedirectToAction("AlbumDetail", new RouteValueDictionary(new { controller = "User", action = "AlbumDetail", albumId = model.AlbumEncrypted })));
        }
        /// <summary>
        /// DELETE current user
        /// </summary>
        /// <param name="UserId"></param>
        /// <returns>all users view</returns>
        public async Task <IActionResult> DeleteUser(string UserId)
        {
            AccountUser user = await userManager.Users.Include(i => i.AlbumList).ThenInclude(r => r.PhotoList).Where(user => user.Id == UserId).FirstOrDefaultAsync();

            //user.AlbumList =   user.AlbumList.ToList();
            //   List<Album> albums=    albumRepository.GetUserAlbums(user.Id);
            if (user != null && user.AlbumList.Count > 0)
            {
                foreach (var item in user.AlbumList.ToList())
                {
                    foreach (var item2 in item.PhotoList.ToList())
                    {
                        LMCommon.DeletePhoto(item2.PhotoPath, hostingEnvironment.WebRootPath, configuration["PhotoPath"]);
                        photoRepository.DeletePhoto(item2.Id);
                    }
                    albumRepository.Delete(item.Id);
                }
            }

            await userManager.DeleteAsync(user);

            return(RedirectToAction("AllUsers"));
        }