using System.Text.Json; using DX86; using DX86.Modules; using Library; namespace Server; class Program { public static MessageSender messageSender; public static MessageBox messageBox; public static InputBox inputBox; public static ItemSelector itemSelector; public static MySQL mySql; private static List servers; static void Main(string[] args) { Console.WriteLine("Initializing server..."); // Initialize UI and logging components messageSender = new MessageSender("log.txt"); messageBox = new MessageBox(messageSender); inputBox = new InputBox(messageSender); itemSelector = new ItemSelector(messageSender); servers = new List(); // 1) Load existing DB config or prompt user + initialize mySql = LoadOrInitDatabase(); // 2) Start the rest of your server loop ServerLoop(); } private static MySQL LoadOrInitDatabase() { var cfg = DbConfig.Load(); if (cfg != null) { messageSender.Log("[Program] Loaded existing database configuration."); // Use existing credentials to connect (including cfg.Port) return new MySQL(cfg.Username, cfg.Password, cfg.Server, cfg.Port, cfg.Database, messageSender); } else { messageSender.Warn("[Program] No existing DB configuration found. Starting init…"); // REPLACE THE FOUR PROMPTS WITH YOUR FIVE ShowAsync(...) CALLS: string username = inputBox.ShowAsync("MySQL Configuration [1/5]", ["Username for MySQL Connections"]); string password = inputBox.ShowAsync("MySQL Configuration [2/5]", ["Password for MySQL Connections"]); string server = inputBox.ShowAsync("MySQL Configuration [3/5]", ["Server Address for MySQL Connections"]); string port = inputBox.ShowAsync("MySQL Configuration [4/5]", ["Port for MySQL Connections"]); string database = inputBox.ShowAsync("MySQL Configuration [5/5]", ["Database Name for Database Connections"]); return InitializeDatabase(username, password, server, port, database); } } /// /// Creates a new MySQL connection, runs the CREATE TABLE DDL, /// saves credentials in config.json, and returns the MySQL instance. /// private static MySQL InitializeDatabase( string username, string password, string server, string port, string database ) { // 1) Instantiate MySQL (will exit on failure) var db = new MySQL(username, password, server, port, database, messageSender); // 2) Create the 'employees' table if it does not exist: string createEmployeesTable = @" CREATE TABLE IF NOT EXISTS `employees` ( `Id` VARCHAR(36) NOT NULL PRIMARY KEY, `Code` VARCHAR(50) NOT NULL, `Surname` VARCHAR(100) NOT NULL, `Forename` VARCHAR(100) NOT NULL, `Email` VARCHAR(150) NOT NULL, `Phone` VARCHAR(50), `Street` VARCHAR(200), `City` VARCHAR(100), `Postcode` VARCHAR(20), `Country` VARCHAR(100), `Department` VARCHAR(100), `Position` VARCHAR(100), `EmployeeState` INT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; "; messageSender.Log("[Program] Creating 'employees' table if not present…"); var resultJson = db.ExecuteNonQuery(createEmployeesTable); // Parse resultJson safely using JsonDocument try { using var doc = JsonDocument.Parse(resultJson); var root = doc.RootElement; // Expecting { "error": bool, "data": ... } bool isError = root.GetProperty("error").GetBoolean(); if (isError) { // You can inspect root.GetProperty("data").GetString() if needed messageSender.Error("[Program] Failed to create 'employees' table: " + resultJson); Environment.Exit(1); } } catch (Exception ex) { // If something went wrong parsing JSON, treat it as a fatal error messageSender.Error($"[Program] Could not parse CREATE TABLE response: {ex.Message}"); messageSender.Error("[Program] Raw response: " + resultJson); Environment.Exit(1); } messageSender.Log("[Program] 'employees' table is ready."); // TODO: repeat db.ExecuteNonQuery(...) for any other tables you need // 3) Save the new credentials (including port) into config.json: var newCfg = new DbConfig { Username = username, Password = password, Server = server, Port = port, Database = database }; newCfg.Save(); messageSender.Log("[Program] Saved DB configuration to config.json."); return db; } private static void ServerLoop() { bool running = true; string[] menuItems; string selectedItem; servers.Add(new BackendServer("0.0.0.0", 3767, messageSender)); // Main server loop while (running) { menuItems = new[] { "Benutzerverwaltung", "Einstellungen", "Beenden" }; itemSelector.SetTitle("Hauptmenü"); //selectedItem = itemSelector.SelectItemFromList(menuItems); } } }