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;
}
}