using System.Collections.ObjectModel; using System.Text.Json; using System.Text.Json.Serialization; namespace View_by_Distance.Shared.Models; public class Mapping : Properties.IMapping { protected int? _By; protected MappingFromPerson? _MappingFromPerson; public string? _SegmentC; protected SortingContainer? _SortingContainer; public int? By => _By; public MappingFromItem MappingFromItem { init; get; } public MappingFromFilter MappingFromFilter { init; get; } public MappingFromLocation? MappingFromLocation { init; get; } public List? MappingFromPhotoPrismCollection { init; get; } public MappingFromPerson? MappingFromPerson => _MappingFromPerson; public string? SegmentC => _SegmentC; public SortingContainer? SortingContainer => _SortingContainer; [JsonConstructor] public Mapping(int? by, MappingFromItem mappingFromItem, MappingFromFilter mappingFromFilter, MappingFromLocation? mappingFromLocation, List? mappingFromPhotoPrismCollection, MappingFromPerson? mappingFromPerson, string? segmentC, SortingContainer? sortingContainer) { _By = by; _SegmentC = segmentC; MappingFromItem = mappingFromItem; MappingFromFilter = mappingFromFilter; MappingFromLocation = mappingFromLocation; MappingFromPhotoPrismCollection = mappingFromPhotoPrismCollection; _MappingFromPerson = mappingFromPerson; _SortingContainer = sortingContainer; } public Mapping(MappingFromItem mappingFromItem, MappingFromFilter mappingFromFilter, MappingFromLocation? mappingFromLocation, List? mappingFromPhotoPrismCollection) : this(null, mappingFromItem, mappingFromFilter, mappingFromLocation, mappingFromPhotoPrismCollection, null, null, null) { } public override string ToString() { string result = JsonSerializer.Serialize(this, new JsonSerializerOptions() { WriteIndented = true }); return result; } public void UpdateMappingFromUnknownPerson(bool saveIndividually, SortingContainer sortingContainer) { _By = Stateless.IMapLogic.Sorting; _SortingContainer = sortingContainer; _SegmentC = !saveIndividually ? null : sortingContainer.Sorting.DistancePermyriad.ToString(); } public void UpdateMappingFromPerson(ReadOnlyCollection locationContainersFiles, int? approximateYears, string displayDirectoryName, PersonBirthday personBirthday, string segmentB) { _SortingContainer = null; _By = Stateless.IMapLogic.Mapping; _MappingFromPerson = new(approximateYears, displayDirectoryName, locationContainersFiles, personBirthday, segmentB); } public void UpdateMappingFromPerson(int? approximateYears, string displayDirectoryName, PersonBirthday personBirthday, string segmentB, string segmentC, SortingContainer sortingContainer, ReadOnlyCollection locationContainersFiles) { _SegmentC = segmentC; _By = Stateless.IMapLogic.Sorting; _SortingContainer = sortingContainer; _MappingFromPerson = new(approximateYears, displayDirectoryName, locationContainersFiles, personBirthday, segmentB); } }