private static AiHubProjectInfo PickOrCreateAiHubProject()

in src/common/details/ai_python_generative_sdk/AiSdkConsoleGui_PickOrCreate_AiHubProject.cs [139:201]


        private static AiHubProjectInfo PickOrCreateAiHubProject(bool allowCreate, ICommandValues values, string subscription, string resourceId, out bool createNew)
        {
            ConsoleHelpers.WriteLineWithHighlight($"\n`AZURE AI PROJECT`");
            Console.Write("\rName: *** Loading choices ***");

            var json = PythonSDKWrapper.ListProjects(values, subscription);
            if (Program.Debug) Console.WriteLine(json);

            var parsed = !string.IsNullOrEmpty(json) ? JsonDocument.Parse(json) : default;
            var items = parsed?.GetPropertyArrayOrEmpty("projects") ?? Array.Empty<JsonElement>();

            var choices = new List<string>();
            var itemJsonElements = new List<JsonElement>();
            foreach (var item in items)
            {
                if (item.TryGetProperty("workspace_hub", out var workspaceHubElement))
                {
                    var hub = workspaceHubElement.GetString();
                    var hubOk = string.IsNullOrEmpty(resourceId) || hub == resourceId;
                    if (!hubOk) continue;

                    itemJsonElements.Add(item);

                    var name = item.GetProperty("name").GetString();
                    var location = item.GetProperty("location").GetString();
                    var displayName = item.GetProperty("display_name").GetString();

                    choices.Add(string.IsNullOrEmpty(displayName)
                        ? $"{name} ({location})"
                        : $"{displayName} ({location})");
                }
            }

            if (allowCreate)
            {
                choices.Insert(0, "(Create new)");
            }

            if (choices.Count == 0)
            {
                throw new ApplicationException($"CANCELED: No projects found");
            }

            Console.Write("\rName: ");
            var picked = ListBoxPicker.PickIndexOf(choices.ToArray());
            if (picked < 0)
            {
                throw new ApplicationException($"CANCELED: No project selected");
            }

            Console.WriteLine($"\rName: {choices[picked]}");
            var project = allowCreate
                ? (picked > 0 ? itemJsonElements[picked - 1] : default(JsonElement?))
                : itemJsonElements[picked];

            createNew = allowCreate && picked == 0;
            if (createNew)
            {
                project = TryCreateAiHubProjectInteractive(values, subscription, resourceId);
            }

            return AiHubProjectInfoFromToken(values, project);
        }