91 lines
3.6 KiB
C#
91 lines
3.6 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text.Json.Nodes;
|
|
|
|
namespace Elwig.Helpers.Billing {
|
|
public class EditBillingData : BillingData {
|
|
|
|
protected readonly IEnumerable<string> AttributeVariants;
|
|
|
|
public EditBillingData(JsonObject data, IEnumerable<string> attributeVariants) :
|
|
base(data) {
|
|
AttributeVariants = attributeVariants;
|
|
}
|
|
|
|
public static EditBillingData FromJson(string json, IEnumerable<string> attributeVariants) {
|
|
return new(ParseJson(json), attributeVariants);
|
|
}
|
|
|
|
public IEnumerable<GraphEntry> GetPaymentGraphEntries() {
|
|
Dictionary<int, List<string>> dict1 = [];
|
|
Dictionary<decimal, List<string>> 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<decimal>(out var price)) {
|
|
if (!dict2.ContainsKey(price)) dict2[price] = [];
|
|
dict2[price].Add(selector);
|
|
} else if (val.TryGetValue<string>(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<decimal>();
|
|
if (!dict2.ContainsKey(idx)) dict2[idx] = [];
|
|
dict2[idx].Add("default");
|
|
}
|
|
|
|
Dictionary<int, Curve> 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<int, List<string>> dict3 = [];
|
|
|
|
|
|
|
|
return dict3.Select(e => new GraphEntry(e.Key, curves[e.Key], 50, 120)).ToList();
|
|
}
|
|
|
|
public IEnumerable<GraphEntry> GetQualityGraphEntries() {
|
|
Dictionary<int, List<string>> dict1 = [];
|
|
Dictionary<decimal, List<string>> 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<decimal>(out var price)) {
|
|
if (!dict2.ContainsKey(price)) dict2[price] = [];
|
|
dict2[price].Add(selector);
|
|
} else if (val.TryGetValue<string>(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<decimal>();
|
|
if (!dict2.ContainsKey(idx)) dict2[idx] = [];
|
|
dict2[idx].Add($"{qualid}/");
|
|
}
|
|
}
|
|
|
|
// TODO
|
|
|
|
List<GraphEntry> list = [];
|
|
|
|
return list;
|
|
}
|
|
}
|
|
}
|