using ShippingCosts.Contracts; namespace ShippingCosts.Implementations; /// /// Default implementation of providing distance information /// for several countries /// /// public sealed class CountryDistanceProvider : ICountryDistanceProvider { private static readonly Dictionary distanceDatabase = new() { ["Brazil"] = new CountryDistanceInformation(9820, false, false), ["China"] = new CountryDistanceInformation(7466, false, false), ["Egypt"] = new CountryDistanceInformation(2906, false, false), ["France"] = new CountryDistanceInformation(1036, false, true), ["Germany"] = new CountryDistanceInformation(524, true, true), ["India"] = new CountryDistanceInformation(6186, false, false), ["Israel"] = new CountryDistanceInformation(2739, false, false), ["Italy"] = new CountryDistanceInformation(763, true, true), ["Japan"] = new CountryDistanceInformation(9278, false, false), ["Malaysia"] = new CountryDistanceInformation(9766, false, false), ["Namibia"] = new CountryDistanceInformation(8239, false, false), ["United Kingdom"] = new CountryDistanceInformation(1228, false, false), ["United States"] = new CountryDistanceInformation(7832, false, false), ["Switzerland"] = new CountryDistanceInformation(692, true, false) }; public CountryDistanceInformation? GetDistanceTo(string countryName) { bool success = distanceDatabase.TryGetValue(countryName, out var distance); return success ? distance : null; } public bool IsPossibleCountry(string countryName) { var country = GetDistanceTo(countryName); return country != null; } }