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 MappingFromFilterPost MappingFromFilterPost { init; get; } public MappingFromFilterPre MappingFromFilterPre { init; get; } public MappingFromItem MappingFromItem { init; get; } public MappingFromFilter MappingFromFilter { init; get; } public MappingFromLocation? MappingFromLocation { init; get; } public MappingFromPerson? MappingFromPerson => _MappingFromPerson; public List? MappingFromPhotoPrismCollection { init; get; } public string? SegmentC => _SegmentC; public SortingContainer? SortingContainer => _SortingContainer; [JsonConstructor] public Mapping(int? by, MappingFromFilter mappingFromFilter, MappingFromFilterPost mappingFromFilterPost, MappingFromFilterPre mappingFromFilterPre, MappingFromItem mappingFromItem, MappingFromLocation? mappingFromLocation, MappingFromPerson? mappingFromPerson, List? mappingFromPhotoPrismCollection, string? segmentC, SortingContainer? sortingContainer) { _By = by; _SegmentC = segmentC; MappingFromFilter = mappingFromFilter; MappingFromFilterPost = mappingFromFilterPost; MappingFromFilterPre = mappingFromFilterPre; MappingFromItem = mappingFromItem; MappingFromLocation = mappingFromLocation; _MappingFromPerson = mappingFromPerson; MappingFromPhotoPrismCollection = mappingFromPhotoPrismCollection; _SortingContainer = sortingContainer; } public Mapping(MappingFromFilter mappingFromFilter, MappingFromFilterPost mappingFromFilterPost, MappingFromFilterPre mappingFromFilterPre, MappingFromItem mappingFromItem, MappingFromLocation? mappingFromLocation, List? mappingFromPhotoPrismCollection) : this(null, mappingFromFilter, mappingFromFilterPost, mappingFromFilterPre, mappingFromItem, mappingFromLocation, null, mappingFromPhotoPrismCollection, 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); } }