using AppScaffolding;
using CommandLine;
using CommandLine.Text;
using LibationFileManager;
using System;
using System.Collections.Generic;
using System.IO;
namespace LibationCli;
[Verb("help", HelpText = "Display more information on a specific command.")]
internal class HelpVerb
{
///
/// Name of the verb to get help about
///
[Value(0, Default = "")]
public string? HelpType { get; set; }
///
/// Create a base for
///
public static HelpText CreateHelpText() => new HelpText
{
AutoVersion = false,
AutoHelp = false,
Heading = $"LibationCli v{LibationScaffolding.BuildVersion.ToVersionString()}",
AdditionalNewLineAfterOption = true,
MaximumDisplayWidth = 80
};
public static HelpText GetGroupHelpText(CliCommandGroup group)
{
var helpText = CreateHelpText();
helpText.AddPreOptionsLine(group.HelpText);
helpText.AddPreOptionsLine($"{group.Name} commands:");
foreach (var subcommand in group.Subcommands)
helpText.AddPreOptionsLine($" {group.Name} {subcommand.Name} {subcommand.HelpText}");
return helpText;
}
///
/// Write the global verb list plus nested command groups (e.g. abs).
/// Groups are appended after because CommandLineParser has no post-options slot.
///
public static void WriteGlobalVerbList(
TextWriter error,
Type[] verbTypes,
IReadOnlyList groups,
string? preOptionsLine = null)
{
var helpText = CreateHelpText();
if (preOptionsLine is not null)
helpText.AddPreOptionsLine(preOptionsLine);
helpText.AddVerbs(verbTypes);
error.WriteLine(helpText);
foreach (var group in groups)
error.WriteLine($" {group.Name,-21}{group.HelpText}");
}
///
/// Get the 's
///
public HelpText GetHelpText()
{
var helpText = CreateHelpText();
var result = new Parser().ParseArguments([HelpType], Program.VerbTypes);
if (result.TypeInfo.Current == typeof(NullInstance))
{
//HelpType is not a defined verb so get LibationCli usage
helpText.AddVerbs(Program.VerbTypes);
}
else
{
helpText.AutoHelp = true;
helpText.AddDashesToOption = true;
helpText.AddOptions(result);
}
return helpText;
}
}