internal static string OneVaginaOrVaginasNoun <T>(IVaginaCollection <T> collection, Conjugate conjugate) where T : IVagina
 {
     if (collection.vaginas.Count == 0)
     {
         return("");
     }
     return(CommonBodyPartStrings.OneOfDescription(collection.vaginas.Count > 1, conjugate, VaginaType.VaginaNoun(collection.vaginas.Count > 1)));
 }
        internal static string OneClitOrClitsShort <T>(IVaginaCollection <T> collection, Conjugate conjugate) where T : IVagina
        {
            if (collection.vaginas.Count == 0)
            {
                return("");
            }

            return(CommonBodyPartStrings.OneOfDescription(collection.vaginas.Count > 1, conjugate, AllClitsShortDescription(collection)));
        }
        internal static string EachVaginaOrVaginasShort <T>(IVaginaCollection <T> collection, Conjugate conjugate, out bool isPlural) where T : IVagina
        {
            isPlural = collection.vaginas.Count != 1;
            if (collection.vaginas.Count == 0)
            {
                return("");
            }

            return(CommonBodyPartStrings.EachOfDescription(collection.vaginas.Count > 1, conjugate, AllVaginasShortDescription(collection)));
        }
        internal static string AllClitsNoun <T>(IVaginaCollection <T> collection, out bool isPlural) where T : IVagina
        {
            isPlural = collection.vaginas.Count > 1;

            if (isPlural)
            {
                return(C**t.PluralClitNoun());
            }
            else
            {
                return(C**t.ClitNoun());
            }
        }
        internal static string AllVaginasShortDescription <T>(IVaginaCollection <T> collection, out bool isPlural) where T : IVagina
        {
            isPlural = collection.vaginas.Count != 1;

            if (collection.vaginas.Count == 0)
            {
                return("");
            }
            else if (collection.vaginas.Count == 1)
            {
                return(collection.vaginas[0].ShortDescription());
            }
            bool mismatched = collection.vaginas.Any(x => x.type != collection.vaginas[0].type);

            return(mismatched ? VaginaType.VaginaNoun(true) : collection.vaginas[0].ShortDescription(false));
        }
        private static string AllVaginasDesc <T>(IVaginaCollection <T> collection, bool full) where T : IVagina
        {
            if (collection.vaginas.Count == 0)
            {
                return("");
            }
            //If one, return normal c**k descript
            else if (collection.vaginas.Count == 1)
            {
                return(collection.vaginas[0].ShortDescription());
            }
            else
            {
                bool mismatched = collection.vaginas.Any(x => x.type != collection.vaginas[0].type);

                string[] countOptions = mismatched ? CommonGenitalStrings.mismatchedPairOptions : CommonGenitalStrings.matchedPairOptions;
                string   description  = mismatched ? RandomMixedVaginasText() : collection.vaginas[0].ShortDescription(true);

                return(Utils.RandomChoice(countOptions) + collection.AverageVagina().AdjectiveText(full) + description);
            }
        }
        internal static string AllClitsLongDescription <T>(IVaginaCollection <T> collection, out bool isPlural) where T : IVagina
        {
            isPlural = collection.vaginas.Count != 1;
            if (collection.vaginas.Count == 0)
            {
                return("");
            }
            //If one, return normal c**k descript
            else if (collection.vaginas.Count == 1)
            {
                return(collection.vaginas[0].c**t.ShortDescription());
            }
            else
            {
                bool mismatched = collection.vaginas.Any(x => x.type != collection.vaginas[0].type);

                string[] countOptions = mismatched ? CommonGenitalStrings.mismatchedPairOptions : CommonGenitalStrings.matchedPairOptions;
                string   description  = mismatched ? RandomMixedClitsText() + AllClitsNoun(collection) : AllClitsShortDescription(collection);

                return(Utils.RandomChoice(countOptions) + description);
            }
        }
        internal static string AllClitsShortDescription <T>(IVaginaCollection <T> collection, out bool isPlural) where T : IVagina
        {
            isPlural = collection.vaginas.Count != 1;

            if (collection.vaginas.Count == 0)
            {
                return("");
            }
            else if (collection.vaginas.Count == 1)
            {
                return(ClitStrings.ShortDesc(collection.vaginas[0].c**t.length));
            }
            else
            {
                if (Math.Abs(collection.vaginas[0].c**t.length - collection.vaginas[1].c**t.length) < 1)
                {
                    return(ClitStrings.SizeAdjective(collection.vaginas.Average(x => x.c**t.length)) + AllClitsNoun(collection));
                }
                else
                {
                    return("mismatched " + AllClitsNoun(collection));
                }
            }
        }
 internal static string AllVaginasNoun <T>(IVaginaCollection <T> collection) where T : IVagina => AllVaginasNoun(collection, out _);
 internal static string OneVaginaOrVaginasNoun <T>(IVaginaCollection <T> collection) where T : IVagina => OneVaginaOrVaginasNoun(collection, Conjugate.YOU);
 internal static string AllVaginasFullDescription <T>(IVaginaCollection <T> collection, out bool isPlural) where T : IVagina
 {
     isPlural = collection.vaginas.Count != 1;
     return(AllVaginasDesc(collection, true));
 }
 internal static string AllVaginasFullDescription <T>(IVaginaCollection <T> collection) where T : IVagina
 {
     return(AllVaginasDesc(collection, true));
 }
 internal static string AllVaginasLongDescription <T>(IVaginaCollection <T> collection) where T : IVagina
 {
     return(AllVaginasDesc(collection, false));
 }
 internal static string AllClitsLongDescription <T>(IVaginaCollection <T> collection) where T : IVagina => AllClitsLongDescription(collection, out _);
 internal static string EachVaginaOrVaginasShort <T>(IVaginaCollection <T> collection) where T : IVagina => EachVaginaOrVaginasShort(collection, Conjugate.YOU);
 internal static string EachClitOrClitsNoun <T>(IVaginaCollection <T> collection, Conjugate conjugate) where T : IVagina
 {
     return(EachClitOrClitsNoun(collection, conjugate, out bool _));
 }
 internal static string EachClitOrClitsNoun <T>(IVaginaCollection <T> collection) where T : IVagina => EachClitOrClitsNoun(collection, Conjugate.YOU);
 internal static string OneClitOrClitsShort <T>(IVaginaCollection <T> collection) where T : IVagina => OneClitOrClitsShort(collection, Conjugate.YOU);
 internal static string EachVaginaOrVaginasShort <T>(IVaginaCollection <T> collection, Conjugate conjugate) where T : IVagina
 {
     return(EachVaginaOrVaginasShort(collection, conjugate, out bool _));
 }
 internal static string AllVaginasNoun <T>(IVaginaCollection <T> collection, out bool isPlural) where T : IVagina
 {
     isPlural = collection.vaginas.Count > 1;
     return(VaginaType.VaginaNoun(collection.vaginas.Count > 1));
 }
 internal static string AllVaginasShortDescription <T>(IVaginaCollection <T> collection) where T : IVagina => AllVaginasShortDescription(collection, out _);
 private static int NumVaginas <T>(this IVaginaCollection <T> collection) where T : IVagina
 {
     return(collection.vaginas.Count);
 }