using System; using System.Linq; using AppConv.General; using AppConv.Units; using Base; namespace AppConv; public sealed class App : IApp { private static readonly IUnitType[] Processors = [ new Temperature(), new Weight(), new Length(), new Area(), new Volume(), new Angle(), new Storage(), new Radix() ]; public string[] RecognizedNames => [ "conv", "convert" ]; public MatchConfidence GetConfidence(Command cmd) { return cmd.Text.Contains(" to ", StringComparison.InvariantCultureIgnoreCase) ? MatchConfidence.Possible : MatchConfidence.None; } public string ProcessCommand(Command cmd) { string[] data = cmd.Text.Split([ " to " ], 2, StringSplitOptions.None); string src = data[0].Trim(); string dst = data[1].Trim(); if (src.Length == 0 || dst.Length == 0) { throw new CommandException("Unrecognized conversion app syntax."); } string result = string.Empty; IUnitType? used = Processors.FirstOrDefault(processor => processor.TryProcess(src, dst, out result)); if (used == null) { throw new CommandException("Could not recognize conversion units."); } return result; } }