using System.Text.Json; using DX86.Modules; using Library; namespace ChatClient; public class Tester { public static async Task Main(string[] args) { MessageSender ms = new MessageSender("log.txt"); ItemSelector selector = new ItemSelector(ms); InputBox inputBox = new InputBox(ms); MessageBox messageBox = new MessageBox(ms); Console.Write("Enter the server IP address: "); string ip = Console.ReadLine(); if (ip == "devsrv") ip = "185.113.120.99"; else if (ip == "local") ip = "127.0.0.1"; Console.Write("Enter the port: "); int port = int.Parse(Console.ReadLine()); Server server = new Server(ip, port); bool running = true; string[] testCommands = new[] { "login", "logout", "get self employee", "get worker byid", "get worker bycode", "clock in", "clock out", "clock break", "clockhistory", "help" }; server.OnMessageReceived = (message) => ms.Log(message); server.OnCommandReceived = (message) => ms.Log(message); while (running) { try { selector.SetTitle("VPR-MAV BACKEND TESTER"); string command = selector.SelectItemFromList(testCommands); if (command == "help") { string response = await server.HelpCommand(); // split response into string[] at \n var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: Help", responseLines); } else if (command == "login") { string user = inputBox.ShowAsync("Login", new List { "Enter username" }); string password = inputBox.ShowAsync("Login", new List { "Enter password" }); string response = await server.Login(user, password); // split response into string[] at \n var responseLines = response.Split("%break").ToList(); messageBox.ShowAsync("Command Result: Login", responseLines); } else if (command == "logout") { string response = await server.Logout(); // split response into string[] at \n var responseLines = response.Split("%break").ToList(); messageBox.ShowAsync("Command Result: Logout", responseLines); } else if (command == "get self employee") { Employee employee = await server.GetLoggedInEmployee(); messageBox.ShowAsync("Command Result: Get Self Employee", new List { $"ID: {employee.Id}", $"Code: {employee.Code}", $"Surname: {employee.Surname}", $"Forename: {employee.Forename}", $"clocked: {employee.EmployeeState.ToFriendlyString()}", }); } else if (command == "clock in") { string response = await server.ClockIn(); // split response into string[] at \n var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: clock in", responseLines); } else if (command == "clock out") { string response = await server.ClockOut(); // split response into string[] at \n var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: clock out", responseLines); } else if (command == "clock break") { string response = await server.ClockBreak(); // split response into string[] at \n var responseLines = response.Split("%break").ToList(); await messageBox.ShowAsync("Command Result: clock break", responseLines); } else if (command == "clockhistory") { List history = new List(); string historyString = server.FullClockHistory().Result; ClockHistoryResponse historyResponse; try { historyResponse = JsonSerializer.Deserialize(historyString); } catch (Exception e) { ms.Error(e.Message); return; } Dictionary employees = new Dictionary(); foreach (ClockEntry clockEntry in historyResponse.data) { if (!employees.ContainsKey(clockEntry.EmployeeId)) { Employee newEmployee = await server.GetEmployee(id: clockEntry.EmployeeId); employees.Add(clockEntry.EmployeeId, newEmployee); ms.Log(newEmployee.ToJson()); } string stateStr = clockEntry.NewState switch { 0 => "OUT", 1 => "IN", 2 => "BREAK", _ => "UNKNOWN" }; history.Add($"{clockEntry.EmployeeId}-{employees[clockEntry.EmployeeId].Code} - {stateStr} - {clockEntry.ChangeTime}"); //Console.WriteLine($"{clockEntry.EmployeeId}-{employees[clockEntry.EmployeeId].Code} - {clockEntry.NewState} - {clockEntry.ChangeTime}"); } ItemSelector selectorTemp = new ItemSelector(ms); selectorTemp.SetTitle("Clock History"); selectorTemp.SelectItemFromList(history.ToArray()); //Console.ReadKey(); } } catch (Exception ex) { await messageBox.ShowAsync("Error", new List { ex.Message }); } /* string input = ""; if (command.Contains("login")) input = inputBox.ShowAsync("Login", new List { "Enter username and password (space-separated)" }); else if (command.Contains("get worker")) input = inputBox.ShowAsync("Worker", new List { "Enter ID or Code" }); else inputBox.ShowAsync("Info", new List { "No additional parameters required." }); string fullCmd = $"{command} {input}".Trim(); string response = await server.ExecuteCommandAsync(fullCmd); try { using var doc = JsonDocument.Parse(response); var formatted = JsonSerializer.Serialize(doc, new JsonSerializerOptions { WriteIndented = true }); await messageBox.ShowAsync("Server Response", formatted.Split("%break").ToList()); } catch { await messageBox.ShowAsync("Server Response", new List { response }); } string again = inputBox.ShowAsync("Continue?", new List { "Type 'exit' to quit, anything else to continue" }); if (again.Trim().ToLower() == "exit") running = false; */ } } } public class ClockEntry { public int EmployeeId { get; set; } public int NewState { get; set; } public DateTime ChangeTime { get; set; } } public class ClockHistoryResponse { public bool error { get; set; } public List data { get; set; } = new(); }