public void FillChildMail(VMMailDetail hierarchicalMails, int parentMailId, List <Mail> allMails)
        {
            foreach (var item in allMails.Where(c => c.ParentMailId == parentMailId).ToList())
            {
                VMMailDetail childMail = VMMailDetail.Parse(item, item.User);

                hierarchicalMails.ChildMails.Add(childMail);

                FillChildMail(hierarchicalMails, childMail.MailId, allMails);
            }
        }
        public ActionResult Detail(int id)
        {
            // Huzurlarınızdaa, iyyyyğğrenç bir kod bloğu.

            User loggedUser = Session["LoggedUser"] as User;

            Mail detailedMail = _uow.MailManager.Get(x => x.MailId == id);

            if (detailedMail == null)
            {
                TempData["ProcessResult"] = "An error has occured when bringing mail.";
                TempData["AlertType"]     = "danger";
                return(RedirectToAction("Inbox"));
            }

            List <VMMailDetail> hierarchicalMails = new List <VMMailDetail>();
            List <Mail>         allMails          = _uow.MailManager.ListAll(x => x.IsActive && (x.SenderId == loggedUser.UserId || x.ReceiverId == loggedUser.UserId));

            var isDone = false;

            while (!isDone)
            {
                if (detailedMail.ParentMailId == null)
                {
                    isDone = true;
                }
                else
                {
                    detailedMail = _uow.MailManager.BringById(x => x.MailId == detailedMail.ParentMailId);
                }

                if (!detailedMail.IsRead)
                {
                    detailedMail.IsRead   = true;
                    detailedMail.ReadDate = DateTime.Now;
                    _uow.MailManager.Update(detailedMail);
                    _uow.SaveChanges();
                }
            }

            VMMailDetail parentMail = VMMailDetail.Parse(detailedMail, detailedMail.User);

            FillChildMail(parentMail, detailedMail.MailId, allMails);
            hierarchicalMails.Add(parentMail);

            return(View(hierarchicalMails));
        }