public async Task <IActionResult> View(TicketRepliesParameters parameters, int id)
        {
            var user = (TokenUser)HttpContext.Items["User"];

            if (parameters.Attachments != null)
            {
                parameters.Reply.Files = new List <StorageCreateParameters>();
                foreach (var attachment in parameters.Attachments)
                {
                    var fileBytes = new byte[] { };
                    if (attachment != null)
                    {
                        await using (var ms = new MemoryStream())
                        {
                            await attachment.CopyToAsync(ms);

                            fileBytes = ms.ToArray();
                        }
                        var fileName = Path.GetFileName(attachment.FileName);
                        parameters.Reply.Files.Add(new StorageCreateParameters
                        {
                            Name      = Path.GetFileNameWithoutExtension(fileName),
                            Bytes     = fileBytes,
                            Extension = Path.GetExtension(fileName)
                        });
                    }
                }
            }
            var result = await _replyProxy.Create(user.Token, new ReplyCreateParameters
            {
                ClientId   = parameters.Ticket.ClientId,
                StaffId    = parameters.Ticket.StaffMemberId,
                SenderType = SenderType.Client,
                TicketId   = id,
                Content    = parameters.Reply.Content,
                Files      = parameters.Reply?.Files
            });

            if (result == null)
            {
                TempData["errorMessage"] =
                    "There was a problem in sending your reply, please try again!";
                return(View());
            }
            _emailSender.Send(new EmailSendParameter
            {
                ToAddress = result.StaffMemberEmail,
                Subject   = $"Ticket number {result.Id} has a new reply",
                Body      = $"Hello {result.StaffMemberName}" + "," + $"{Environment.NewLine}"
                            + $"Ticket {result.Id}  has a new reply" + $"{Environment.NewLine}"
                            + "Please reply to the client as soon as possible to fix the issues."
            });
            TempData["message"] = "Your reply sent successfully!";

            return(RedirectToAction("View", new { id }));
        }
        public async Task <IActionResult> CloseTicket(TicketRepliesParameters parameters)
        {
            var user   = (TokenUser)HttpContext.Items["User"];
            var result = await _ticketProxy.Update(user.Token, parameters.Ticket.Id);

            if (result != null)
            {
                TempData["message"] = $" Your ticket id: {parameters.Ticket.Id } closed successfully";
                return(RedirectToAction("Index"));
            }
            TempData["errorMessage"] = $"Something went wrong, please try again to close your ticket.";
            return(RedirectToAction("View", new { result.Id }));
        }
        public async Task <IActionResult> StaffView(TicketRepliesParameters parameters, int id)
        {
            if (parameters.Attachments != null)
            {
                parameters.Reply.Files = new List <StorageCreateParameters>();
                foreach (var attachment in parameters.Attachments)
                {
                    byte[] fileBytes;
                    if (attachment == null)
                    {
                        continue;
                    }

                    await using (var ms = new MemoryStream())
                    {
                        await attachment.CopyToAsync(ms);

                        fileBytes = ms.ToArray();
                    }
                    var fileName = Path.GetFileName(attachment.FileName);
                    parameters.Reply.Files.Add(new StorageCreateParameters
                    {
                        Name      = Path.GetFileNameWithoutExtension(fileName),
                        Bytes     = fileBytes,
                        Extension = Path.GetExtension(fileName)
                    });
                }
            }
            await _replyProxy.Create(new ReplyCreateParameters
            {
                ClientId   = parameters.Ticket.ClientId,
                StaffId    = parameters.Ticket.StaffMemberId,
                SenderType = SenderType.StaffMember,
                TicketId   = id,
                Content    = parameters.Reply.Content,
                Files      = parameters.Reply.Files
            });

            TempData["message"] = $" Your reply is sent successfully ";

            return(RedirectToAction("StaffView", new { id }));
        }