using System.Collections.Generic; using System.Linq; using System.Text.Json.Nodes; namespace Elwig.Helpers.Billing { public class EditBillingData : BillingData { protected readonly IEnumerable AttributeVariants; public EditBillingData(JsonObject data, IEnumerable attributeVariants) : base(data) { AttributeVariants = attributeVariants; } public static EditBillingData FromJson(string json, IEnumerable attributeVariants) { return new(ParseJson(json), attributeVariants); } public IEnumerable GetPaymentGraphEntries() { Dictionary> dict1 = []; Dictionary> dict2 = []; var p = GetPaymentEntry(); if (p is JsonObject paymentObj) { foreach (var (selector, node) in paymentObj) { var val = node?.AsValue(); if (val == null) { continue; } else if (val.TryGetValue(out var price)) { if (!dict2.ContainsKey(price)) dict2[price] = []; dict2[price].Add(selector); } else if (val.TryGetValue(out var curve)) { var idx = int.Parse(curve.Split(":")[1] ?? "0"); if (!dict1.ContainsKey(idx)) dict1[idx] = []; dict1[idx].Add(selector); } } } else if (p is JsonValue paymentVal) { var idx = paymentVal.GetValue(); if (!dict2.ContainsKey(idx)) dict2[idx] = []; dict2[idx].Add("default"); } Dictionary curves = GetCurves(); decimal[] virtCurves = [.. dict2.Keys.Order()]; for (int i = 0; i < virtCurves.Length; i++) { var idx = virtCurves[i]; dict1[1000 + i] = dict2[idx]; curves[1000 + i] = new Curve(CurveMode.Oe, new() { { 73, idx } }, null); } Dictionary> dict3 = []; return dict3.Select(e => new GraphEntry(e.Key, curves[e.Key], 50, 120)).ToList(); } public IEnumerable GetQualityGraphEntries() { Dictionary> dict1 = []; Dictionary> dict2 = []; foreach (var (qualid, q) in GetQualityEntry() ?? []) { if (q is JsonObject qualityObj) { foreach (var (selector, node) in qualityObj) { var val = node?.AsValue(); if (val == null) { continue; } else if (val.TryGetValue(out var price)) { if (!dict2.ContainsKey(price)) dict2[price] = []; dict2[price].Add(selector); } else if (val.TryGetValue(out var curve)) { var idx = int.Parse(curve.Split(":")[1] ?? "0"); if (!dict1.ContainsKey(idx)) dict1[idx] = []; dict1[idx].Add(selector); } } } else if (q is JsonValue qualityVal) { var idx = qualityVal.GetValue(); if (!dict2.ContainsKey(idx)) dict2[idx] = []; dict2[idx].Add($"{qualid}/"); } } // TODO List list = []; return list; } } }