using Elwig.Models.Entities; using System; using System.Collections.Generic; namespace Elwig.Helpers.Billing { public record struct RawQualVaribute { public string QualId; public string? SortId; public string? AttrId; public string? CultId; public RawQualVaribute(string qualid, string? sortid, string? attrid, string? cultid) { QualId = qualid; SortId = sortid; AttrId = attrid; CultId = cultid; } } public record struct RawVaribute : IComparable { public string? SortId; public string? AttrId; public string? CultId; public RawVaribute(string? sortid, string? attrid, string? cultid) { SortId = sortid; AttrId = attrid; CultId = cultid; } public RawVaribute(string id) { var p1 = id.Split('/')[0].Split('-')[0]; SortId = p1 == "" ? null : p1; AttrId = id.Contains('/') ? id.Split('/')[1].Split('-')[0] : null; CultId = id.Contains('-') ? id.Split('-')[1] : null; } public readonly override string ToString() { return $"{SortId}" + (AttrId != null ? $"/{AttrId}" : "") + (CultId != null ? $"-{CultId}" : ""); } public readonly int CompareTo(RawVaribute other) { return $"{SortId}/{AttrId}-{CultId}".CompareTo($"{other.SortId}/{other.AttrId}-{other.CultId}"); } } public class Varibute : IComparable { public WineVar? Variety { get; } public WineAttr? Attribute { get; } public WineCult? Cultivation { get; } public int? AssignedGraphId { get; set; } public int? AssignedAbgewGraphId { get; set; } public string Listing => $"{Variety?.SortId}" + (Attribute != null ? $"/{Attribute.AttrId}" : "") + (Cultivation != null ? $"-{Cultivation.CultId}" : ""); public string FullName => $"{Variety?.Name}" + (Variety != null && Attribute != null ? " " : "") + $"{Attribute?.Name}" + ((Variety != null || Attribute != null) && Cultivation != null ? " " : "") + $"{Cultivation?.Name}"; public Varibute(RawVaribute raw) : this(raw.SortId != null ? new WineVar(raw.SortId, raw.SortId) : null, raw.AttrId != null ? new WineAttr(raw.AttrId, raw.AttrId) : null, raw.CultId != null ? new WineCult(raw.CultId, raw.CultId) : null) { } public Varibute(RawVaribute raw, Dictionary vars, Dictionary attrs, Dictionary cults) : this(raw.SortId != null && raw.SortId != "" ? vars[raw.SortId] : null, raw.AttrId != null && raw.AttrId != "" ? attrs[raw.AttrId] : null, raw.CultId != null && raw.CultId != "" ? cults[raw.CultId] : null) { } public Varibute(WineVar? var, WineAttr? attr, WineCult? cult) { Variety = var; Attribute = attr; Cultivation = cult; } public override string ToString() { return Listing; } public int CompareTo(Varibute? other) { return Listing.CompareTo(other?.Listing); } } }