diff --git a/SzCli/Program.cs b/SzCli/Program.cs index 78cbf43..470ae59 100644 --- a/SzCli/Program.cs +++ b/SzCli/Program.cs @@ -10,9 +10,151 @@ public class Program private static readonly DefaultLocalFileManager FileManager = new(); private static readonly Logger Logger = new(); private static readonly DefaultDatabaseHandler DbHandler = new(); - + private static SzDataHandler _dataHandler; + public static void Main(string[] args) { SZ.Init(FileManager, Logger, DbHandler); + _dataHandler = SZ.DataHandler; + + Logger.Log("// -- SZ CLI -- //"); + + 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": HandleCreateTemplate(); break; + case "2": HandleDeleteTemplate(); break; + case "3": HandleCreateDataset(); break; + case "4": HandleDeleteDataset(); break; + case "5": running = false; break; + default: Console.WriteLine("Invalid option."); break; + } + } } -} + + private static void HandleCreateTemplate() + { + Console.Write("Enter Template Name: "); + string name = Console.ReadLine() ?? ""; + Console.Write("Enter Data Object Type (e.g., Item, Character): "); + 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() ?? ""; + + // Display Enum Options + 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) + { + Console.WriteLine(" Invalid selection. Defaulting to Text."); + choice = 0; // Default to Text + } + + SzFieldType selectedType = types[choice]; + + var fieldResult = _dataHandler.CreateTemplateField(fId, selectedType); + if (fieldResult.IsSuccess) + { + fields.Add(fieldResult.Value); + Console.WriteLine($" Added {selectedType} field: {fId}"); + } + else + { + Console.WriteLine($" Error creating field: {fieldResult.Error}"); + } + } + + var result = _dataHandler.CreateDataObjectTemplate(name, type, fields: fields); + if (result.IsSuccess) + { + _dataHandler.SaveTemplate(result.Value); + Console.WriteLine($"\nTemplate '{result.Value.Id}' saved successfully!"); + } + } + + private static void HandleDeleteTemplate() + { + Console.Write("Enter Template ID to delete: "); + string id = Console.ReadLine() ?? ""; + var result = _dataHandler.DeleteTemplate(id); + Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}"); + } + + private static void HandleCreateDataset() + { + Console.Write("Enter Dataset Name: "); + string name = Console.ReadLine() ?? ""; + Console.Write("Enter Template ID to use: "); + string tId = Console.ReadLine() ?? ""; + + var templateResult = _dataHandler.LoadTemplate(tId); + if (!templateResult.IsSuccess) + { + Console.WriteLine($"Error: {templateResult.Error}"); + return; + } + + var datasetResult = _dataHandler.CreateDataset(name, tId); + if (!datasetResult.IsSuccess) return; + + var dataset = datasetResult.Value; + bool addingObjects = true; + + while (addingObjects) + { + Console.Write("Add a DataObject to this dataset? (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.Value = Console.ReadLine() ?? ""; + } + // Assume SzDataset has a way to hold these objects in your actual implementation + dataset.DataObjects.Add(objResult.Value.Id, objResult.Value); + Console.WriteLine(" Object added to dataset draft."); + } + } + + _dataHandler.SaveDataset(dataset); + Console.WriteLine("Dataset saved!"); + } + + private static void HandleDeleteDataset() + { + Console.Write("Enter Dataset ID to delete: "); + string id = Console.ReadLine() ?? ""; + var result = _dataHandler.DeleteDataset(id); + Console.WriteLine(result.IsSuccess ? "Deleted." : $"Error: {result.Error}"); + } +} \ No newline at end of file diff --git a/SzCore/SzDataHandler.cs b/SzCore/SzDataHandler.cs index 2a85178..15bd42b 100644 --- a/SzCore/SzDataHandler.cs +++ b/SzCore/SzDataHandler.cs @@ -91,6 +91,8 @@ public class SzDataHandler DataObjectType = templateResult.Value.DataObjectType, Uuid = Guid.NewGuid() }; + + return SzResult.Success(newDataset); } @@ -196,14 +198,53 @@ public class SzDataHandler return SzResult.Success(newField); } - public SzResult> CreateFields(ISzTemplate template) + public SzResult CreateField(string id, SzFieldType fieldType, bool isList = false, string? value = null) { - return SzResult>.Failure("Not implemented"); + if (string.IsNullOrEmpty(id)) + return SzResult.Failure("Could not create field, the id parameter was empty"); + + var newField = new SzField() + { + Id = id, + FieldType = fieldType, + IsList = isList, + Value = value ?? "" + }; + + return SzResult.Success(newField); } - public SzResult CreateDataObject() + public SzResult> CreateFieldsFromTemplate(ISzTemplate template) { - return SzResult.Failure("Not implemented"); + var fields = new Dictionary(); + foreach (var tempField in template.TemplateFields.Values) + { + var newField = CreateField(tempField.Id, tempField.FieldType, tempField.IsList); + if (!newField.IsSuccess || newField.Value is null) + return SzResult>.Failure($"Could not create field: {newField.Error}"); + fields.Add(newField.Value.Id, newField.Value); + } + + return SzResult>.Success(fields); + } + + public SzResult CreateDataObject(SzDataObjectTemplate template, string name, string? id = null) + { + if (string.IsNullOrEmpty(name)) + return SzResult.Failure("Could not create object, name was empty"); + + var dataObject = new SzDataObject() + { + Name = name, + Id = id ?? name.ToLower().Replace(" ", "-").Trim() + }; + + var createFieldsResult = CreateFieldsFromTemplate(template); + if (!createFieldsResult.IsSuccess || createFieldsResult.Value is null) + return SzResult.Failure($"Could not create data object's fields: {createFieldsResult.Error}"); + dataObject.Fields = createFieldsResult.Value; + + return SzResult.Success(dataObject); } #endregion