using System; using System.Collections.Generic; using System.Threading.Tasks; using SzCore; using SzCore.DataObjects; using SzCore.Defaults; namespace SzCli; public class Program { private static readonly DefaultLocalFileManager FileManager = new(); private static readonly Logger Logger = new(FileManager); private static readonly DefaultDatabaseHandler DbHandler = new(); private static readonly SzEvaluator Evaluator = new(); private static SzDataHandler? _dataHandler; public static async Task Main() { SZ.Init(FileManager, Logger, DbHandler); _dataHandler = SZ.DataHandler; Logger.Log("// -- SZ CLI -- //"); var result = await _dataHandler.GetFieldValueFromPath("npcs@1_0.bobbert.race"); Logger.Log(result.Value + result.Error); bool running = true; while (running) { Console.WriteLine("\n--- Main Menu ---"); Console.WriteLine("1. Create Data Object Template"); Console.WriteLine("2. Delete Template"); Console.WriteLine("3. Create Dataset"); Console.WriteLine("4. Delete Dataset"); Console.WriteLine("5. Exit"); Console.Write("\nSelect an option: "); switch (Console.ReadLine()) { case "1": await HandleCreateTemplate(); break; case "2": await HandleDeleteTemplate(); break; case "3": await HandleCreateDataset(); break; case "4": await HandleDeleteDataset(); break; case "5": running = false; break; default: Console.WriteLine("Invalid option."); break; } } } private static async Task HandleCreateTemplate() { Console.Write("Enter Template Name: "); string name = Console.ReadLine() ?? ""; Console.Write("Enter Data Object Type: "); string type = Console.ReadLine() ?? ""; var fields = new List(); while (true) { Console.Write("\nAdd a field? (y/n): "); if (Console.ReadLine()?.ToLower() != "y") break; Console.Write(" Field ID: "); string fId = Console.ReadLine() ?? ""; Console.WriteLine(" Select Field Type:"); var types = Enum.GetValues(); for (int i = 0; i < types.Length; i++) { Console.WriteLine($" {i}. {types[i]}"); } Console.Write(" Enter number: "); if (!int.TryParse(Console.ReadLine(), out int choice) || choice < 0 || choice >= types.Length) { choice = 0; } var fieldResult = _dataHandler!.CreateTemplateField(fId, types[choice]); if (fieldResult.IsSuccess && fieldResult.Value is not null) { fields.Add(fieldResult.Value); } } var result = _dataHandler!.CreateDataObjectTemplate(name, type, fields: fields); if (result.IsSuccess && result.Value is not null) { await _dataHandler.SaveTemplateAsync(result.Value); Console.WriteLine($"\nTemplate '{result.Value.Id}' saved!"); } } private static async Task HandleDeleteTemplate() { Console.Write("Enter Template ID to delete: "); string id = Console.ReadLine() ?? ""; var result = await _dataHandler!.DeleteTemplateAsync(id); Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}"); } private static async Task HandleCreateDataset() { Console.Write("Enter Dataset Name: "); string name = Console.ReadLine() ?? ""; Console.Write("Enter Template ID to use: "); string tId = Console.ReadLine() ?? ""; var templateResult = await _dataHandler!.LoadTemplateAsync(tId); if (!templateResult.IsSuccess) { Console.WriteLine($"Error: {templateResult.Error}"); return; } var datasetResult = await _dataHandler.CreateDatasetAsync(name, tId); if (!datasetResult.IsSuccess) return; var dataset = datasetResult.Value; while (true) { Console.Write("Add a DataObject? (y/n): "); if (Console.ReadLine()?.ToLower() != "y") break; Console.Write(" Object Name: "); string objName = Console.ReadLine() ?? ""; var objResult = _dataHandler.CreateDataObject(templateResult.Value!, objName); if (objResult.IsSuccess) { foreach (var field in objResult.Value!.Fields.Values) { Console.Write($" Value for {field.Id} ({field.FieldType}): "); field.Value = Console.ReadLine() ?? ""; } dataset!.DataObjects.Add(objResult.Value.Id, objResult.Value); } } Console.WriteLine("\nValidating dataset..."); var evalResult = await Evaluator.EvaluateDatasetAsync(dataset!); if (!evalResult.IsSuccess) { Console.WriteLine("Validation Failed:"); Console.WriteLine(evalResult.Error); Console.Write("Save anyway? (y/n): "); if (Console.ReadLine()?.ToLower() != "y") return; } await _dataHandler.SaveDatasetAsync(dataset!); Console.WriteLine("Dataset saved!"); } private static async Task HandleDeleteDataset() { Console.Write("Enter Dataset ID to delete: "); string id = Console.ReadLine() ?? ""; var result = await _dataHandler!.DeleteDatasetAsync(id); Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}"); } }