using Oms.Domain.OrdersAggregate.Consts;
namespace Oms.Application.Monitor;
///
/// 将目的国映射为监控页线路 key(us/eu/sea/au/jp/uk/other)。
///
public static class MonitorRegionMapper
{
public static readonly string[] RegionKeys = ["us", "eu", "sea", "au", "jp", "uk"];
private static readonly HashSet UsCodes = new(StringComparer.OrdinalIgnoreCase)
{
"US", "USA", "840",
};
private static readonly HashSet UkCodes = new(StringComparer.OrdinalIgnoreCase)
{
"GB", "UK", "826",
};
private static readonly HashSet AuCodes = new(StringComparer.OrdinalIgnoreCase)
{
"AU", "AUS", "036",
};
private static readonly HashSet JpCodes = new(StringComparer.OrdinalIgnoreCase)
{
"JP", "JPN", "392",
};
private static readonly HashSet EuCodes = new(StringComparer.OrdinalIgnoreCase)
{
"DE", "FR", "IT", "ES", "NL", "BE", "PL", "SE", "AT", "PT", "IE", "DK", "FI", "GR", "CZ", "RO", "HU", "SK",
"276", "250", "380", "724", "528", "056", "616", "752", "040", "620", "372", "208", "246", "203", "348", "642",
};
private static readonly HashSet SeaCodes = new(StringComparer.OrdinalIgnoreCase)
{
"SG", "MY", "TH", "VN", "PH", "ID", "702", "458", "764", "704", "608", "360",
};
public static string MapCountryToRegion(string? countryCodeOrName)
{
var code = (countryCodeOrName ?? string.Empty).Trim();
if (string.IsNullOrWhiteSpace(code))
{
return "other";
}
if (UsCodes.Contains(code)) return "us";
if (UkCodes.Contains(code)) return "uk";
if (AuCodes.Contains(code)) return "au";
if (JpCodes.Contains(code)) return "jp";
if (EuCodes.Contains(code)) return "eu";
if (SeaCodes.Contains(code)) return "sea";
var upper = code.ToUpperInvariant();
if (upper.Contains("UNITED STATES") || upper == "美国") return "us";
if (upper.Contains("UNITED KINGDOM") || upper == "英国") return "uk";
if (upper.Contains("AUSTRALIA") || upper == "澳大利亚") return "au";
if (upper.Contains("JAPAN") || upper == "日本") return "jp";
if (upper.Contains("GERMANY") || upper.Contains("FRANCE") || upper == "德国" || upper == "法国") return "eu";
if (upper.Contains("SINGAPORE") || upper.Contains("MALAYSIA") || upper == "新加坡" || upper == "马来西亚") return "sea";
return "other";
}
public static bool IsDeliveredStatus(string? status) =>
string.Equals(status, OrderStatusCodes.DeliverySuccess, StringComparison.OrdinalIgnoreCase);
public static bool IsDeliveryFailedStatus(string? status) =>
string.Equals(status, OrderStatusCodes.DeliveryFailed, StringComparison.OrdinalIgnoreCase);
public static bool IsInTransitStatus(string? status) =>
string.Equals(status, OrderStatusCodes.Shipping, StringComparison.OrdinalIgnoreCase)
|| string.Equals(status, OrderStatusCodes.PendingOnline, StringComparison.OrdinalIgnoreCase);
}