/// <summary>
        /// Saves the dialog function generation condition
        /// </summary>
        /// <param name="projectId">Project Id</param>
        /// <param name="dialogFunctionGenerationCondition">Dialog function generation condition</param>
        /// <returns>Task</returns>
        public async Task SaveDialogFunctionGenerationCondition(string projectId, DialogFunctionGenerationConditionCollection dialogFunctionGenerationCondition)
        {
            bool isNew = true;
            DialogFunctionGenerationConditionCollection existingCondition = await GetDialogFunctionGenerationConditions(projectId);

            if (existingCondition != null)
            {
                dialogFunctionGenerationCondition.Id = existingCondition.Id;
                isNew = false;
            }
            else
            {
                dialogFunctionGenerationCondition.Id = Guid.NewGuid().ToString();
            }
            dialogFunctionGenerationCondition.ProjectId = projectId;

            if (isNew)
            {
                await _DialogFunctionGenerationConditionCollection.InsertOneAsync(dialogFunctionGenerationCondition);
            }
            else
            {
                await _DialogFunctionGenerationConditionCollection.ReplaceOneAsync(s => s.Id == dialogFunctionGenerationCondition.Id, dialogFunctionGenerationCondition);
            }
        }
        /// <summary>
        /// Returns the dialog node function generation conditions
        /// </summary>
        /// <param name="projectId">Project Id</param>
        /// <returns>Dialog node function generation condition collection</returns>
        public async Task <DialogFunctionGenerationConditionCollection> GetDialogFunctionGenerationConditions(string projectId)
        {
            DialogFunctionGenerationConditionCollection existingCollection = await _dialogFunctionConditionDbAccess.GetDialogFunctionGenerationConditions(projectId);

            if (existingCollection != null)
            {
                return(existingCollection);
            }

            string conditionConfig = await LoadDefaultTemplateCode();

            DialogFunctionGenerationConditionCollection collection = JsonConvert.DeserializeObject <DialogFunctionGenerationConditionCollection>(conditionConfig);

            return(collection);
        }
        /// <summary>
        /// Returns the dialog node function generation conditions
        /// </summary>
        /// <param name="projectId">Project Id</param>
        /// <returns>Dialog node function generation condition collection</returns>
        public async Task <DialogFunctionGenerationConditionCollection> GetDialogFunctionGenerationConditions(string projectId)
        {
            DialogFunctionGenerationConditionCollection existingCollection = await _dialogFunctionConditionDbAccess.GetDialogFunctionGenerationConditions(projectId);

            if (existingCollection != null)
            {
                return(existingCollection);
            }

            JsonSerializerOptions jsonOptions = new JsonSerializerOptions();

            jsonOptions.Converters.Add(new JsonStringEnumConverter());

            string conditionConfig = await LoadDefaultTemplateCode();

            DialogFunctionGenerationConditionCollection collection = JsonSerializer.Deserialize <DialogFunctionGenerationConditionCollection>(conditionConfig, jsonOptions);

            return(collection);
        }
        /// <summary>
        /// Returns the dialog node function generation conditions
        /// </summary>
        /// <param name="projectId">Project Id</param>
        /// <returns>Dialog node function generation condition collection</returns>
        public async Task <DialogFunctionGenerationConditionCollection> GetDialogFunctionGenerationConditions(string projectId)
        {
            DialogFunctionGenerationConditionCollection generationCondition = await _DialogFunctionGenerationConditionCollection.Find(t => t.ProjectId == projectId).FirstOrDefaultAsync();

            return(generationCondition);
        }