using System.Diagnostics.Eventing.Reader; using System.Globalization; using System.Text.Json.Nodes; using TarifasANEEL.Services; using TarifasANEEL.Utilities; namespace TarifasANEEL.Models { public class Tarifa { private const string DISTRIBUTOR_KEY = "NumCPFCNPJ"; private const string SUBGROUP_KEY = "DscSubGrupoTarifario"; private const string MODALITY_KEY = "DscModalidadeTarifaria"; public required int ID_dist { get; set; } public required string Grupo { get; set; } public required string Perfil { get; set; } public required string Ciclo { get; set; } public DateTime? DatInicioVigencia { get; set;} public DateTime? DatFimVigencia { get; set;} public double Energia_P { get; set;} public double Energia_FP { get; set;} public double Enc_P { get; set;} public double Enc_FP { get; set;} public double Dem_P { get; set;} public double Dem_FP { get; set;} public double ER_P { get; set;} public double ER_FP { get; set;} public double Megaflex { get; set;} public double Covid_P { get; set;} public double Covid_FP { get; set;} public double Desc_Rural { get; set;} public double EH_P { get; set;} public double EH_FP { get; set;} public static Tarifa FromRecord(JsonNode record) { ArgumentNullException.ThrowIfNull(record); return new Tarifa { ID_dist = DatabaseService.GetDistribuidoraId(record[DISTRIBUTOR_KEY]?.ToString() ?? ""), Grupo = record[SUBGROUP_KEY]?.ToString() ?? "", Perfil = TarifaHelper.BuildProfileName(record, record[MODALITY_KEY]?.ToString() ?? ""), Ciclo = TarifaHelper.ParseResolution(record), DatInicioVigencia = DateTime.Parse(record[nameof(DatInicioVigencia)]?.ToString()!), DatFimVigencia = DateTime.Parse(record[nameof(DatFimVigencia)]?.ToString()!) }; } public void UpdateComponentValue(JsonNode record) { int test = 0; var subgroupSuffix = Grupo[0].ToString(); var component = record["DscComponenteTarifario"]?.ToString() ?? ""; var unit = record["DscUnidade"]?.ToString() ?? ""; var rawpeak = record["DscPostoTarifario"]?.ToString() ?? ""; var modality = record["DscModalidadeTarifaria"]?.ToString().ToUpper() ?? ""; var value = double.TryParse(record["VlrComponenteTarifario"]?.ToString(), out var parsedValue) ? parsedValue : 0; var peakSuffix = rawpeak[0].ToString(); switch ((subgroupSuffix, modality, component, unit, peakSuffix)) { // Group A cases case ("A", "GERAÇÃO", "TUSD", "R$/kW", "N"): Dem_P = Dem_FP = value; break; case ("A", "CONVENCIONAL", "TE", "R$/MWh", var peak): switch (peak) { case "N": Energia_P = Energia_FP = value; break; case "F": Energia_FP = value; break; case "P": Energia_P = value; break; } break; case ("A", "CONVENCIONAL", "TUSD", "R$/MWh", "N"): Enc_P = Enc_FP = value; break; case ("A", "AZUL", "TE", "R$/MWh", var peak) when peak is "F" or "P": if (peak == "F") Energia_FP = value; else Energia_P = value; break; case ("A", "AZUL", "TUSD", "R$/MWh", var peak) when peak is "F" or "P": if (peak == "F") Enc_FP = value; else Enc_P = value; break; case ("A", "AZUL", "TUSD", "R$/kW", var peak) when peak is "F" or "P": if (peak == "F") Dem_FP = value; else Dem_P = value; break; case ("A", "VERDE", "TE", "R$/MWh", var peak) when peak is "F" or "P": if (peak == "P") Energia_P = value; else Energia_FP = value; break; case ("A", "VERDE", "TUSD", "R$/kW", "N"): Dem_FP = value; Dem_P = 0; break; case ("A", "VERDE", "TUSD", "R$/MWh", var peak) when peak is "F" or "P": if (peak == "P") Enc_P = value; else Enc_FP = value; break; // Group B cases case ("B", "CONVENCIONAL" or "PRÉ-PAGAMENTO", var comp, "R$/MWh", "N"): if (comp == "TUSD") Enc_P = Enc_FP = value; else if (comp == "TE") Energia_P = Energia_FP = value; break; case ("B", "BRANCA", var comp, "R$/MWh", var peak): if (comp == "TE") if (peak == "P") Energia_P = value; else Energia_FP += value; else if (comp == "TUSD") if (peak == "P") Enc_P = value; else Enc_FP += value; break; case ("B", "GERAÇÃO", "TUSD", "R$/kW", "N"): Dem_P = Dem_FP = value; break; default: if ((component == "TE" && unit == "R$/kW" && value != 0) || !((subgroupSuffix == "A" || subgroupSuffix == "B") && (modality is "GERAÇÃO" or "CONVENCIONAL" or "AZUL" or "VERDE" or "BRANCA" or "PRÉ-PAGAMENTO" or "DISTRIBUIÇÃO" or "ENERGIA SUPRIMENTO"))) { test++; } break; } if (test > 0) { Console.WriteLine("Sem lógica:\t{0}",string.Join("\t",new string[] { ID_dist.ToString(), Ciclo, Grupo, Perfil, component, peakSuffix, unit, value.ToString("C", CultureInfo.CreateSpecificCulture("pt-BR")) })); } } public bool HasAllEmptyValues() { // Adjust this method based on your Tarifa properties return Energia_P == 0 && Energia_FP == 0 && Enc_P == 0 && Enc_FP == 0 && Dem_P == 0 && Dem_FP == 0 && ER_P == 0 && ER_FP == 0 && Megaflex == 0 && Covid_P == 0 && Covid_FP == 0 && Desc_Rural == 0 && EH_P == 0 && EH_FP == 0; } } }