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 => new string[] { "conv", "convert" }; public MatchConfidence GetConfidence(Command cmd) { return cmd.Text.IndexOf(" to ", StringComparison.InvariantCultureIgnoreCase) != -1 ? MatchConfidence.Possible : MatchConfidence.None; } public string ProcessCommand(Command cmd) { string[] data = cmd.Text.Split(new string[] { " 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; } } }