namespace SeaHaven.Services.Helpers { public static class UsStateCodes { private static readonly IReadOnlyDictionary Names = new Dictionary(StringComparer.Ordinal) { ["AL"] = "ALABAMA", ["AK"] = "ALASKA", ["AZ"] = "ARIZONA", ["AR"] = "ARKANSAS", ["CA"] = "CALIFORNIA", ["CO"] = "COLORADO", ["CT"] = "CONNECTICUT", ["DE"] = "DELAWARE", ["FL"] = "FLORIDA", ["GA"] = "GEORGIA", ["HI"] = "HAWAII", ["ID"] = "IDAHO", ["IL"] = "ILLINOIS", ["IN"] = "INDIANA", ["IA"] = "IOWA", ["KS"] = "KANSAS", ["KY"] = "KENTUCKY", ["LA"] = "LOUISIANA", ["ME"] = "MAINE", ["MD"] = "MARYLAND", ["MA"] = "MASSACHUSETTS", ["MI"] = "MICHIGAN", ["MN"] = "MINNESOTA", ["MS"] = "MISSISSIPPI", ["MO"] = "MISSOURI", ["MT"] = "MONTANA", ["NE"] = "NEBRASKA", ["NV"] = "NEVADA", ["NH"] = "NEW HAMPSHIRE", ["NJ"] = "NEW JERSEY", ["NM"] = "NEW MEXICO", ["NY"] = "NEW YORK", ["NC"] = "NORTH CAROLINA", ["ND"] = "NORTH DAKOTA", ["OH"] = "OHIO", ["OK"] = "OKLAHOMA", ["OR"] = "OREGON", ["PA"] = "PENNSYLVANIA", ["RI"] = "RHODE ISLAND", ["SC"] = "SOUTH CAROLINA", ["SD"] = "SOUTH DAKOTA", ["TN"] = "TENNESSEE", ["TX"] = "TEXAS", ["UT"] = "UTAH", ["VT"] = "VERMONT", ["VA"] = "VIRGINIA", ["WA"] = "WASHINGTON", ["WV"] = "WEST VIRGINIA", ["WI"] = "WISCONSIN", ["WY"] = "WYOMING" }; private static readonly IReadOnlyDictionary CodesByName = Names.ToDictionary(pair => pair.Value, pair => pair.Key, StringComparer.Ordinal); public static IReadOnlySet All { get; } = new HashSet(Names.Keys, StringComparer.Ordinal); /// /// Normalises a stored state value to its two-letter postal code. Accepts either a /// postal code ("IN") or a full state name ("Indiana"), case-insensitively, matching /// the storage forms produced by . Returns null when /// the value is blank or is not a recognised US state. /// public static string? ToCode(string? value) { if (string.IsNullOrWhiteSpace(value)) return null; var normalized = value.Trim().ToUpperInvariant(); if (All.Contains(normalized)) return normalized; return CodesByName.TryGetValue(normalized, out var code) ? code : null; } public static IReadOnlyCollection ExpandStorageValues(IEnumerable codes) { return codes .SelectMany(code => new[] { code, Names[code] }) .ToArray(); } } }