using System.Globalization; using OpenNest; namespace OpenNest.Data; /// Operator-facing wording for set releases, shared by the release views and Nest Info. public static class SetReleaseText { /// Where a nest came from, such as "Released from set 'Kit A' revision 3 ×2 by J. Smith". public static string Origin(SetReleaseRecord release) { ArgumentNullException.ThrowIfNull(release); var text = $"Released from set '{release.SetName}' revision {release.SetRevision} ×{release.Multiplier}"; if (release.ReleasedAt != default) text += $" on {release.ReleasedAt.ToLocalTime().ToString("d", CultureInfo.CurrentCulture)}"; return string.IsNullOrWhiteSpace(release.ReleasedBy) ? text : $"{text} by {release.ReleasedBy}"; } /// /// How far the release's nests have got, such as "2 of 3 cut" or "1 of 2 cut, 1 deleted". /// Deleted nests are left out of the count. /// public static string Progress(SetReleaseRecord release) { ArgumentNullException.ThrowIfNull(release); var nests = release.Nests ?? Array.Empty(); var deleted = nests.Count(IsDeleted); var active = nests.Count - deleted; if (active == 0) return nests.Count == 1 ? "Its nest was deleted" : "All nests deleted"; var cut = nests.Count(n => !IsDeleted(n) && n.Nest?.Status == NestStatus.HasBeenCut); var text = $"{cut} of {active} cut"; return deleted == 0 ? text : $"{text}, {deleted} deleted"; } /// The state of one nest of a release: its status name, or "Deleted". public static string NestState(SetReleaseNest nest) { ArgumentNullException.ThrowIfNull(nest); if (IsDeleted(nest)) return "Deleted"; return nest.Nest is { } record ? NestStatuses.DisplayName(record.Status) : ""; } /// The material group a release nest was made for, such as "Carbon Steel A36 0.25 in laser". public static string Group(SetReleaseNest nest) { ArgumentNullException.ThrowIfNull(nest); var parts = new[] { nest.MaterialName, nest.MaterialGrade, $"{nest.Thickness.ToString("0.####", CultureInfo.CurrentCulture)} {UnitsHelper.GetShortString(nest.Units)}", nest.CutType.ToString().ToLowerInvariant(), }; return string.Join(" ", parts.Where(p => !string.IsNullOrWhiteSpace(p)).Select(p => p.Trim())); } // A nest the server no longer joins is as gone as a deleted one. private static bool IsDeleted(SetReleaseNest nest) => nest.Nest is null || nest.Nest.Deleted; }