namespace SIGCM2.Domain.Fiscal;
///
/// Jurisdicciones fiscales de Argentina: 23 provincias INDEC + Ciudad Autónoma de Buenos Aires.
/// Almacenado en BD como VARCHAR(50) (nombre del enum via ToString()).
///
public enum ProvinciaArgentina
{
BuenosAires,
Catamarca,
Chaco,
Chubut,
CiudadAutonomaDeBuenosAires,
Cordoba,
Corrientes,
EntreRios,
Formosa,
Jujuy,
LaPampa,
LaRioja,
Mendoza,
Misiones,
Neuquen,
RioNegro,
Salta,
SanJuan,
SanLuis,
SantaCruz,
SantaFe,
SantiagoDelEstero,
TierraDelFuego,
Tucuman
}
///
/// Extension methods para ProvinciaArgentina: mapping bidireccional con el display name
/// (nombre con acentos/espacios) que se usa para presentación en UI.
///
public static class ProvinciaArgentinaExtensions
{
private static readonly Dictionary DisplayNames = new()
{
[ProvinciaArgentina.BuenosAires] = "Buenos Aires",
[ProvinciaArgentina.Catamarca] = "Catamarca",
[ProvinciaArgentina.Chaco] = "Chaco",
[ProvinciaArgentina.Chubut] = "Chubut",
[ProvinciaArgentina.CiudadAutonomaDeBuenosAires] = "Ciudad Autónoma de Buenos Aires",
[ProvinciaArgentina.Cordoba] = "Córdoba",
[ProvinciaArgentina.Corrientes] = "Corrientes",
[ProvinciaArgentina.EntreRios] = "Entre Ríos",
[ProvinciaArgentina.Formosa] = "Formosa",
[ProvinciaArgentina.Jujuy] = "Jujuy",
[ProvinciaArgentina.LaPampa] = "La Pampa",
[ProvinciaArgentina.LaRioja] = "La Rioja",
[ProvinciaArgentina.Mendoza] = "Mendoza",
[ProvinciaArgentina.Misiones] = "Misiones",
[ProvinciaArgentina.Neuquen] = "Neuquén",
[ProvinciaArgentina.RioNegro] = "Río Negro",
[ProvinciaArgentina.Salta] = "Salta",
[ProvinciaArgentina.SanJuan] = "San Juan",
[ProvinciaArgentina.SanLuis] = "San Luis",
[ProvinciaArgentina.SantaCruz] = "Santa Cruz",
[ProvinciaArgentina.SantaFe] = "Santa Fe",
[ProvinciaArgentina.SantiagoDelEstero] = "Santiago del Estero",
[ProvinciaArgentina.TierraDelFuego] = "Tierra del Fuego",
[ProvinciaArgentina.Tucuman] = "Tucumán",
};
private static readonly Dictionary ByDisplayName =
DisplayNames.ToDictionary(kv => kv.Value, kv => kv.Key, StringComparer.Ordinal);
///
/// Retorna el nombre con acentos/espacios para presentación en UI y almacenamiento en BD.
///
public static string ToDisplayString(this ProvinciaArgentina provincia)
=> DisplayNames[provincia];
///
/// Parsea un display name a su valor de enum correspondiente.
/// Lanza si el nombre no corresponde a ningún valor.
///
public static ProvinciaArgentina FromDisplayString(string displayName)
{
if (ByDisplayName.TryGetValue(displayName, out var result))
return result;
throw new ArgumentException(
$"'{displayName}' no es un nombre de provincia válido. Usá uno de los valores de ProvinciaArgentina.",
nameof(displayName));
}
}