public ActionResult Index()
        {
            var languageQnAMakerSubscriptionKeyJson           = ConfigurationManager.AppSettings["LanguageQnAMakerSubscriptionKeyJson"];
            var languageQnAMakerKeyCombinations               = JsonConvert.DeserializeObject <List <LanguageQnAMakerKeyCombination> >(languageQnAMakerSubscriptionKeyJson);
            List <LanguageKbConfigurationViewModel> langKbLst = new List <LanguageKbConfigurationViewModel>();
            string languages = string.Empty;

            for (int i = 0; i < languageQnAMakerKeyCombinations.Count; i++)
            {
                LanguageKbConfigurationViewModel langKb = new LanguageKbConfigurationViewModel();
                langKb.LanguageCode = languageQnAMakerKeyCombinations[i].LanguageCode;
                langKbLst.Add(langKb);
                if (languages != string.Empty)
                {
                    languages = languages + "," + langKb.LanguageCode;
                }
                else
                {
                    languages = langKb.LanguageCode;
                }
            }

            this.ViewBag.Languages = languages;

            return(this.View(langKbLst));
        }
        /// <summary>
        /// Gets language specific knowledgebase and team details.
        /// </summary>
        /// <param name="languageCode">Language code.</param>
        /// <param name="languageName">Language Name.</param>
        /// <returns>List of <see cref="LanguageKbConfigurationViewModel"/></returns>
        public async Task <LanguageKbConfigurationViewModel> GetLanguageKbDetails(string languageCode, string languageName)
        {
            var languageKbConfigObject = await this.configurationProvider.GetSavedLanguageKBConfigurationEntityAsync(languageCode).ConfigureAwait(false);

            LanguageKbConfigurationViewModel languageKbDetail = new LanguageKbConfigurationViewModel()
            {
                LanguageCode = languageCode, LanguageDisplayName = languageName, KnowledgeBaseId = languageKbConfigObject.KnowledgeBaseId, TeamId = languageKbConfigObject.TeamId, WelcomeMessage = languageKbConfigObject.ChangeLanguageMessageText
            };

            return(languageKbDetail);
        }
        public async Task <ActionResult> SaveLanguageKbConfigurationDetails(LanguageKbConfigurationViewModel item)
        {
            string teamIdAfterParse = ParseTeamIdFromDeepLink(item.TeamId ?? string.Empty);

            if (string.IsNullOrWhiteSpace(teamIdAfterParse))
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "The provided team id is not valid."));
            }
            else
            {
                // Get bot supported languages from web.config.
                var languageQnAMakerSubscriptionKeyJson = ConfigurationManager.AppSettings["LanguageQnAMakerSubscriptionKeyJson"];
                var languageQnAMakerKeyCombinations     = JsonConvert.DeserializeObject <List <LanguageQnAMakerKeyCombination> >(languageQnAMakerSubscriptionKeyJson);
                var supportedLanguages = from languageQnAMakerKeyCombination in languageQnAMakerKeyCombinations
                                         select new BotLanguageDetail {
                    Code = languageQnAMakerKeyCombination.LanguageCode, Default = languageQnAMakerKeyCombination.Default, Name = languageQnAMakerKeyCombination.LanguageName
                };

                // Save the bot supported language details to table storage.
                await this.configurationProvider.UpsertEntityAsync(JsonConvert.SerializeObject(supportedLanguages), ConfigurationEntityTypes.SupportedLanguagesKey).ConfigureAwait(false);

                LanguageQnAMakerKeyCombination langQnaDetails = languageQnAMakerKeyCombinations.FirstOrDefault(x => x.LanguageCode == item.LanguageCode);
                IQnaServiceProvider            applicableQnaServiceProvider = this.qnaServiceProviders.FirstOrDefault(qsp => qsp.GetApplicableLanguageCode().Equals(item.LanguageCode));
                bool isValidKnowledgeBaseId = await applicableQnaServiceProvider.IsKnowledgeBaseIdValid(item.KnowledgeBaseId).ConfigureAwait(false);

                if (isValidKnowledgeBaseId)
                {
                    LanguageKBConfigurationEntity langKBConfigEntity = new LanguageKBConfigurationEntity();
                    langKBConfigEntity.TeamId                    = teamIdAfterParse;
                    langKBConfigEntity.KnowledgeBaseId           = item.KnowledgeBaseId;
                    langKBConfigEntity.ChangeLanguageMessageText = item.WelcomeMessage;
                    langKBConfigEntity.HelpTabText               = item.HelpTabText;
                    langKBConfigEntity.PartitionKey              = "LanguageKBConfiguration";
                    langKBConfigEntity.QnaMakerEndpointKey       = langQnaDetails.QnAMakerSubscriptionKey;
                    langKBConfigEntity.RowKey                    = item.LanguageCode;
                    bool isSaved = await this.configurationProvider.UpsertLanguageKBConfigurationEntityAsync(item.LanguageCode, langKBConfigEntity);

                    if (isSaved)
                    {
                        return(new HttpStatusCodeResult(HttpStatusCode.OK));
                    }
                    else
                    {
                        return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError, "Sorry, unable to save the team id due to an internal error. Try again."));
                    }
                }
                else
                {
                    return(new HttpStatusCodeResult(HttpStatusCode.BadRequest, "The provided knowledgebase id is not valid."));
                }
            }
        }