using HanaTui.Hana; using Spectre.Console; namespace HanaTui.Tui; /// /// The main operation menu. Returns the selected operation, or null to exit. /// public static class MainMenuScreen { public enum Operation { Export, Import, ImportRename, Copy, Drop, RenameDb, Backup, ChangeKey, Quit, } public static Operation Run(HdbUserstoreKey? key, string keyName) { AnsiConsole.Clear(); // Header with key info var rule = new Rule("[bold dodgerblue1]HANA Database Manager[/]") .RuleStyle(Style.Parse("dodgerblue1")); AnsiConsole.Write(rule); if (key is not null) { var conn = key.Host + ":" + key.Port + (string.IsNullOrEmpty(key.Tenant) ? "" : "@" + key.Tenant) + " user=" + key.User; AnsiConsole.MarkupLine( $" Key: [bold yellow]{Markup.Escape(key.Name)}[/] [dim]{Markup.Escape(conn)}[/]"); } else { AnsiConsole.MarkupLine($" Key: [bold yellow]{Markup.Escape(keyName)}[/]"); } AnsiConsole.WriteLine(); var choices = new Dictionary { ["1 Export Schema"] = Operation.Export, ["2 Import Schema"] = Operation.Import, ["3 Import & Rename Schema"] = Operation.ImportRename, ["4 Copy Schema"] = Operation.Copy, ["5 Drop Schema"] = Operation.Drop, ["6 Rename Database (Company Name)"] = Operation.RenameDb, ["7 Backup Tenant"] = Operation.Backup, ["----------------------------------"] = Operation.Quit, // separator placeholder ["k Change Key"] = Operation.ChangeKey, ["q Quit"] = Operation.Quit, }; // Build SelectionPrompt without the separator entry var prompt = new SelectionPrompt() .Title("[bold]Select operation:[/]") .PageSize(12) .HighlightStyle(Style.Parse("bold dodgerblue1")); foreach (var key2 in choices.Keys) { if (key2.StartsWith("--")) continue; prompt.AddChoice(key2); } var selected = AnsiConsole.Prompt(prompt); return choices.TryGetValue(selected, out var op) ? op : Operation.Quit; } }