using Svrnty.GeoManagement.Abstractions.Abstractions; using Svrnty.GeoManagement.Abstractions.Models; namespace Svrnty.GeoManagement.Abstractions; public static class ServiceCollectionExtensions { public static void To(this IAddress address, IAddress toAddress) { toAddress.Line1 = address.Line1; toAddress.Line2 = address.Line2; toAddress.City = address.City; toAddress.PostalCode = address.PostalCode; toAddress.Country = address.Country; toAddress.Subdivision = address.Subdivision; } public static void From(this IAddress address, IAddress fromAddress) { address.Line1 = fromAddress.Line1; address.Line2 = fromAddress.Line2; address.City = fromAddress.City; address.PostalCode = fromAddress.PostalCode; address.Country = fromAddress.Country; address.Subdivision = fromAddress.Subdivision; } public static string GetFormattedAddress(this IAddress address, FormattedAddressType formatType = FormattedAddressType.Full) { return formatType switch { FormattedAddressType.Full => FormatFullOneLine(address), FormattedAddressType.Compact => FormatCompactOneLine(address), FormattedAddressType.MultiLine => FormatMultiLine(address), _ => FormatFullOneLine(address) }; } private static string FormatFullOneLine(IAddress address) { if (string.IsNullOrWhiteSpace(address.Line2)) { return $"{address.Line1}, {address.City}, {address.Subdivision} {address.PostalCode}, {address.Country}"; } return $"{address.Line2}, {address.Line1}, {address.City}, {address.Subdivision} {address.PostalCode}, {address.Country}"; } private static string FormatCompactOneLine(IAddress address) { if (string.IsNullOrWhiteSpace(address.Line2)) { return $"{address.Line1}, {address.City}, {address.Subdivision}"; } return $"{address.Line2}, {address.Line1}, {address.City}, {address.Subdivision}"; } private static string FormatMultiLine(IAddress address) { if (string.IsNullOrWhiteSpace(address.Line2)) { return $"{address.Line1}\n{address.City}, {address.Subdivision} {address.PostalCode}\n{address.Country}"; } return $"{address.Line2}, {address.Line1}\n{address.City}, {address.Subdivision} {address.PostalCode}\n{address.Country}"; } }