public async Task <IActionResult> InitiateSendMessage(DiagnoseDetailPageViewModel data)
        {
            bool ShowMessageForm = false;

            tenantGroupName = HttpContext.Session.Get <string>("SelectedTenantGroupName");
            tenant          = HttpContext.Session.Get <string>("SelectedTenantName");
            var refreshtoken = await HttpContext.GetTokenAsync("refresh_token").ConfigureAwait(false);

            accessToken = _commonService.GetAccessTokenWVD(refreshtoken); //await HttpContext.GetTokenAsync("access_token");


            if (data.UserSessions.Where(x => x.IsSelected == true).ToList().Count > 0)
            {
                ShowMessageForm  = true;
                ViewBag.ErrorMsg = "";
            }
            else
            {
                ViewBag.ErrorMsg = "Please select at least one user";
                ShowMessageForm  = false;
            }

            return(View("ActivityHostDetails", new DiagnoseDetailPageViewModel()
            {
                Title = string.Empty,
                Message = string.Empty,
                ConnectionActivity = data.ConnectionActivity,
                ShowConnectedUser = true,
                ShowMessageForm = ShowMessageForm,
                UserSessions = await GetUserSessions(accessToken, tenantGroupName, tenant, data.ConnectionActivity.SessionHostPoolName, data.ConnectionActivity.SessionHostName).ConfigureAwait(false),
                selectedUsername = data.UserSessions.Where(x => x.IsSelected == true).ToList(),
                VMPerformance = await GetVMPerformance(data.ConnectionActivity.SessionHostName).ConfigureAwait(false)
            }));
        }
        public async Task <IActionResult> SendMessage(DiagnoseDetailPageViewModel data)
        {
            if (ModelState.IsValid)
            {
                var viewData      = new SendMessageQuery();
                var messageStatus = new List <MessageStatus>();
                tenantGroupName = HttpContext.Session.Get <string>("SelectedTenantGroupName");
                tenant          = HttpContext.Session.Get <string>("SelectedTenantName");
                var refreshtoken = await HttpContext.GetTokenAsync("refresh_token").ConfigureAwait(false);

                accessToken = _commonService.GetAccessTokenWVD(refreshtoken); //await HttpContext.GetTokenAsync("access_token");

                if (string.IsNullOrEmpty(data.Message) && string.IsNullOrEmpty(data.Title))
                {
                    ViewBag.TitleErrorMsg   = "Subject is required";
                    ViewBag.MessageErrorMsg = "Message is required";
                }
                else if (string.IsNullOrEmpty(data.Title))
                {
                    ViewBag.TitleErrorMsg = "Title is required";
                }
                else if (string.IsNullOrEmpty(data.Message))
                {
                    ViewBag.MessageErrorMsg = "Message is required";
                }

                else
                {
                    if (data.UserSessions.Where(x => x.IsSelected == true).ToList().Count > 0)
                    {
                        foreach (var item in data.UserSessions.Where(x => x.IsSelected == true).ToList())
                        {
                            var sendMessageQuery = new SendMessageQuery()
                            {
                                tenantGroupName   = item.tenantGroupName,
                                tenantName        = item.tenantName,
                                hostPoolName      = item.hostPoolName,
                                sessionHostName   = item.sessionHostName,
                                sessionId         = item.sessionId,
                                messageTitle      = data.Title,
                                messageBody       = data.Message,
                                userPrincipalName = item.userPrincipalName,
                                adUserName        = item.adUserName
                            };
                            var Content = new StringContent(JsonConvert.SerializeObject(sendMessageQuery), Encoding.UTF8, "application/json");
                            _logger.LogInformation($"Call service to send message to {item.userPrincipalName}");
                            var response = await _userSessionService.SendMessage(accessToken, sendMessageQuery).ConfigureAwait(false);

                            if (response == HttpStatusCode.OK.ToString())
                            {
                                messageStatus.Add(new MessageStatus()
                                {
                                    Message = $"Message sent successfully to {item.adUserName}",
                                    Status  = "Success"
                                });
                            }
                            else if (response == HttpStatusCode.Forbidden.ToString() || response == HttpStatusCode.Unauthorized.ToString())
                            {
                                messageStatus.Add(new MessageStatus()
                                {
                                    Message = $"Failed to send message to {item.adUserName} . You don't have permissions to send message.",
                                    Status  = "Error"
                                });
                            }
                            else
                            {
                                messageStatus.Add(new MessageStatus()
                                {
                                    Message = $"Failed to send message to {item.adUserName}",
                                    Status  = "Error"
                                });
                            }
                        }
                        ViewBag.ErrorMsg = "";
                    }
                    else
                    {
                        ViewBag.ErrorMsg = "Please select at least one user";
                    }
                }
                return(View("ActivityHostDetails", new DiagnoseDetailPageViewModel()
                {
                    UserSessions = data.UserSessions.Where(usr => usr.IsSelected = true)
                                   .Select(usr => { usr.IsSelected = false; return usr; })
                                   .ToList(),
                    Title = data.Title,
                    Message = data.Message,
                    SendMsgStatuses = messageStatus,
                    ConnectionActivity = data.ConnectionActivity,
                    ShowConnectedUser = true,
                    ShowMessageForm = true,
                    selectedUsername = data.UserSessions.Where(x => x.IsSelected == true).ToList(),
                    VMPerformance = await GetVMPerformance(data.ConnectionActivity.SessionHostName).ConfigureAwait(false)
                }));
            }
            else
            {
                return(View("ActivityHostDetails", new DiagnoseDetailPageViewModel()
                {
                    UserSessions = data.UserSessions.Where(usr => usr.IsSelected = true)
                                   .Select(usr => { usr.IsSelected = false; return usr; })
                                   .ToList(),
                    ConnectionActivity = data.ConnectionActivity,
                    ShowConnectedUser = true,
                    ShowMessageForm = true,
                    Title = data.Title,
                    Message = data.Message,
                    selectedUsername = data.UserSessions.Where(x => x.IsSelected == true).ToList(),
                    VMPerformance = await GetVMPerformance(data.ConnectionActivity.SessionHostName).ConfigureAwait(false)
                }));
            }
        }
        public async Task <IActionResult> LogOffUserSession(DiagnoseDetailPageViewModel data)
        {
            var viewData = new LogOffUserQuery();

            tenantGroupName = HttpContext.Session.Get <string>("SelectedTenantGroupName");
            tenant          = HttpContext.Session.Get <string>("SelectedTenantName");
            var refreshtoken = await HttpContext.GetTokenAsync("refresh_token").ConfigureAwait(false);

            accessToken = _commonService.GetAccessTokenWVD(refreshtoken); //await HttpContext.GetTokenAsync("access_token");

            var messageStatus = new List <MessageStatus>();

            if (data.UserSessions.Where(x => x.IsSelected == true).ToList().Count > 0)
            {
                foreach (var item in data.UserSessions.Where(x => x.IsSelected == true).ToList())
                {
                    var logOffUserQuery = new LogOffUserQuery()
                    {
                        tenantGroupName = item.tenantGroupName,
                        tenantName      = item.tenantName,
                        hostPoolName    = item.hostPoolName,
                        sessionHostName = item.sessionHostName,
                        sessionId       = item.sessionId,
                        adUserName      = item.adUserName
                    };
                    var Content = new StringContent(JsonConvert.SerializeObject(logOffUserQuery), Encoding.UTF8, "application/json");
                    _logger.LogInformation($"Service Call to log off user session ");
                    // var response = await client.PostAsync($"SessionHost/LogOffUser", Content);
                    var response = await _userSessionService.LogOffUserSession(accessToken, logOffUserQuery).ConfigureAwait(false);

                    if (response == HttpStatusCode.OK.ToString() || response == "Success")
                    {
                        messageStatus.Add(new MessageStatus()
                        {
                            Message = $"Log off successfully for {item.adUserName} user session.",
                            Status  = "Success"
                        });
                    }
                    else if (response == HttpStatusCode.Forbidden.ToString() || response == HttpStatusCode.Unauthorized.ToString())
                    {
                        messageStatus.Add(new MessageStatus()
                        {
                            Message = $"Failed to log off  {item.adUserName} . You don't have permissions to log off user.",
                            Status  = "Error"
                        });
                    }
                    else
                    {
                        messageStatus.Add(new MessageStatus()
                        {
                            Message = $"Failed to logoff {item.adUserName} user session.",
                            Status  = "Error"
                        });
                    }
                }
                ViewBag.ErrorMsg = "";
            }
            else
            {
                ViewBag.ErrorMsg = "Please select at least one user";
            }
            await Task.Delay(1500); // delay the process for 1.5 second to get current list of user sessions


            return(View("ActivityHostDetails", new DiagnoseDetailPageViewModel()
            {
                Title = string.Empty,
                Message = string.Empty,
                SendMsgStatuses = messageStatus,
                ConnectionActivity = data.ConnectionActivity,
                ShowConnectedUser = true,
                ShowMessageForm = false,
                UserSessions = await GetUserSessions(accessToken, tenantGroupName, tenant, data.ConnectionActivity.SessionHostPoolName, data.ConnectionActivity.SessionHostName).ConfigureAwait(false),
                VMPerformance = await GetVMPerformance(data.ConnectionActivity.SessionHostName).ConfigureAwait(false)
            }));
        }
 public IActionResult GetUserSessions(DiagnoseDetailPageViewModel data)
 {
     return(View("UserSessions", data));
 }