using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.IO; using System.Text.Json; using System.Text.Json.Serialization; namespace Adaptation.FileHandlers.pcl; #nullable enable internal class Complete { public Complete(Header header, Summary summary, ReadOnlyCollection points) { Header = header; Summary = summary; Points = points; } public Header Header { get; } public Summary Summary { get; } public ReadOnlyCollection Points { get; } public static Complete? Get(Shared.Logistics logistics, List fileInfoCollection, ReadOnlyCollection lines) { Complete? result; Constant constant = new(); ReadOnlyCollection collection = new(lines); if (collection.Count <= constant.Take) result = null; else { Header? header = Header.Get(constant, collection); if (header is null) result = null; else { Summary? summary = SummarySegment.Get(constant, collection); if (summary is null) result = null; else { ReadOnlyCollection points = Point.GetCollection(constant, collection) ?? throw new NullReferenceException(nameof(summary)); if (points.Count == 0) result = null; else { result = new(header, summary, points); FileInfo fileInfo = new($"{logistics.ReportFullPath}.json"); string json = JsonSerializer.Serialize(result, CompleteSourceGenerationContext.Default.Complete); File.WriteAllText(fileInfo.FullName, json); File.SetLastWriteTime(fileInfo.FullName, logistics.DateTimeFromSequence); fileInfoCollection.Add(fileInfo); } } } } return result; } } [JsonSourceGenerationOptions(WriteIndented = true)] [JsonSerializable(typeof(Complete))] internal partial class CompleteSourceGenerationContext : JsonSerializerContext { }