using System.Text.Json; namespace S8n.Components.Basics; public class Calculator { public object Execute(string @operator, object[] args) { if (args == null || args.Length < 2) { throw new ArgumentException("At least two arguments are required"); } // Convert arguments to decimal for precision, handling JsonElement var numbers = args.Select(a => { if (a is JsonElement jsonElement) { return jsonElement.GetDecimal(); } return Convert.ToDecimal(a); }).ToArray(); decimal result = 0; switch (@operator?.ToLower()) { case "add": result = numbers.Sum(); break; case "subtract": result = numbers[0]; for (int i = 1; i < numbers.Length; i++) { result -= numbers[i]; } break; case "multiply": result = numbers[0]; for (int i = 1; i < numbers.Length; i++) { result *= numbers[i]; } break; case "divide": result = numbers[0]; for (int i = 1; i < numbers.Length; i++) { if (numbers[i] == 0) { throw new DivideByZeroException("Division by zero is not allowed"); } result /= numbers[i]; } break; default: throw new ArgumentException($"Unknown operator: {@operator}"); } return new { Result = result }; } public object Reset(string @operator, object[] args) { // Return default inputs (operator = "add", args = [0, 0]) return new { @operator = "add", args = new decimal[] { 0, 0 } }; } }