using System.Text.RegularExpressions; using MultiversalDiplomacy.Model; namespace MultiversalDiplomacy.Script; public class ValidatedOrdersScriptHandler(World world, bool strict = false) : IScriptHandler { public string Prompt => "valid> "; public World World { get; private set; } = world; /// /// Whether unsuccessful commands should terminate the script. /// public bool Strict { get; } = strict; public IScriptHandler? HandleInput(string input) { var args = input.Split(' ', StringSplitOptions.RemoveEmptyEntries); if (args.Length == 0) { return this; } var command = args[0]; switch (command) { case "assert" when args.Length == 1: Console.WriteLine("Usage:"); break; case "assert": string assertion = input["assert ".Length..]; OrderRegex re = new(World); Regex prov = new($"{re.Province} (.*)"); Match match = prov.Match(assertion); if (!match.Success) { Console.WriteLine($"Could not parse province from {assertion}"); return Strict ? null : this; } // TODO look up order once orders are validated and adjudicated Console.WriteLine("Order lookup not implemented yet"); return null; default: // noop on comments that begin with # if (command.StartsWith('#')) break; Console.WriteLine($"Unrecognized command: {command}"); if (Strict) return null; break; } return this; } }