private CharacterNameResultModel CreateCharacterName(AncestryDetailsModel ancestry, AncestryDetailsModel.AncestryOptionsModel selectedOption)
        {
            var segment   = _randomItemSelector.GetRandomWeightedItem(selectedOption.SegmentGroups);
            var nameParts = GetNameDefinitions(segment, ancestry.NameParts);
            var name      = CreateNameFromParts(nameParts, selectedOption.SeperatorChancePercentage, selectedOption.NamePartSeperators);

            return(new CharacterNameResultModel
            {
                AncestryCode = ancestry.Code,
                AncestryName = ancestry.Name,
                Definitions = nameParts.Where(x => x.Meanings?.Any() == true).ToArray(),
                Name = name,
                OptionCode = selectedOption.Code,
                OptionName = selectedOption.Name,
            });
        }
        public async Task <BuildingNameResultModel> GenerateBuildingName(string buildingTypeCode)
        {
            var buildingType = await GetBuildingType(buildingTypeCode);

            if (buildingType == null)
            {
                throw new ArgumentException($"{buildingTypeCode} is an invalid {nameof(buildingTypeCode)}");
            }
            var nameFormat = _randomItemSelector.GetRandomWeightedItem(buildingType.NameFormats);
            var nameGroups = await GetBuildingNameGroups();

            var buildingName = GenerateBuildingNameFromFormat(nameFormat.NameFormat, nameGroups);

            return(new BuildingNameResultModel
            {
                BuildingName = buildingName,
                BuildingTypeCode = buildingTypeCode,
                BuildingTypeName = buildingType.Name,
            });
        }