internal static void ShowTemplateGroupHelp(IReadOnlyCollection <ITemplateMatchInfo> templateGroup, IEngineEnvironmentSettings environmentSettings, INewCommandInput commandInput, IHostSpecificDataLoader hostDataLoader, TemplateCreator templateCreator, bool showImplicitlyHiddenParams = false)
        {
            if (templateGroup.Count == 0 || !TemplateResolver.AreAllTemplatesSameGroupIdentity(templateGroup))
            {
                return;
            }

            IReadOnlyList <ITemplateInfo> templateInfoList      = templateGroup.Select(x => x.Info).ToList();
            TemplateGroupParameterDetails?groupParameterDetails = DetermineParameterDispositionsForTemplateGroup(templateInfoList, environmentSettings, commandInput, hostDataLoader, templateCreator);

            if (groupParameterDetails != null)
            {
                if (!string.IsNullOrEmpty(groupParameterDetails.Value.AdditionalInfo))
                {
                    Reporter.Error.WriteLine(groupParameterDetails.Value.AdditionalInfo.Bold().Red());
                    Reporter.Error.WriteLine();
                    return;
                }
                // get the input params valid for any param in the group
                IReadOnlyDictionary <string, string> inputTemplateParams = CoalesceInputParameterValuesFromTemplateGroup(templateGroup);
                ShowTemplateDetailHeaders(templateInfoList);
                ShowParameterHelp(inputTemplateParams, showImplicitlyHiddenParams, groupParameterDetails.Value, environmentSettings, commandInput);
            }
            else
            {
                Reporter.Error.WriteLine(string.Format(LocalizableStrings.MissingTemplateContentDetected, commandInput.CommandName).Bold().Red());
            }
        }