Files
sessionzero-cs/SzCli/Program.cs

165 lines
5.7 KiB
C#

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<SzTemplateField>();
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<SzFieldType>();
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<SzDataObjectTemplate>(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}");
}
}