using View_by_Distance.Shared.Models; namespace View_by_Distance.Map.Models.Stateless; internal abstract class MapLogic { internal static string GetMappingSegmentB(long ticks, PersonBirthday personBirthday, int? approximateYears, DateTime minimumDateTime, bool? isWrongYear) { int years; string result; TimeSpan? timeSpan = Shared.Models.Stateless.Methods.IPersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, personBirthday); if (timeSpan.HasValue && timeSpan.Value.Ticks < 0) result = "!---"; else if (timeSpan.HasValue) { (years, _) = Shared.Models.Stateless.Methods.IPersonBirthday.GetAge(minimumDateTime, personBirthday); result = $"^{years:000}"; } else if (approximateYears.HasValue) { DateTime dateTime = new(ticks); (years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(minimumDateTime, dateTime.AddYears(-approximateYears.Value)); result = $"~{years:000}"; } else { string isWrongYearFlag = Shared.Models.Stateless.Methods.IItem.GetWrongYearFlag(isWrongYear); result = $"{isWrongYearFlag}{minimumDateTime:yyyy}"; } return result; } internal static Dictionary> GetKeyValuePairs(Item[] items) { Dictionary> results = new(); string key; bool? isWrongYear; string personKeyFormatted; DateTime minimumDateTime; MappingContainer mappingContainer; foreach (Item item in items) { if (item.Property?.Id is null || item.ImageFileHolder is null || item.ResizedFileHolder is null) continue; if (!item.Mapping.Any()) continue; foreach (Face face in item.Faces) { if (face.FaceEncoding is null || face.Location?.NormalizedPixelPercentage is null) continue; foreach (Mapping mapping in item.Mapping) { if (mapping.NormalizedPixelPercentage.HasValue && mapping.NormalizedPixelPercentage.Value != face.Location.NormalizedPixelPercentage.Value) continue; // if (named.NormalizedPixelPercentage is null && (Shared.Models.Stateless.INamed.OnlyUseNamedWithNormalizedPixelPercentagePopulatedForGetKeyValuePairs || item.Named.Count != 1 || item.Faces.Count != 1)) // continue; minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property); (isWrongYear, _) = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime); personKeyFormatted = Shared.Models.Stateless.Methods.IPersonBirthday.GetFormatted(mapping.PersonBirthday); key = string.Concat(personKeyFormatted, mapping.SegmentB); if (!results.ContainsKey(key)) results.Add(key, new()); mappingContainer = new(face, item.Property.Id.Value, isWrongYear, key, mapping, minimumDateTime); results[key].Add(mappingContainer); // if (named.NormalizedPixelPercentage is null) // break; } } } return results; } internal static (bool?, string[]) IsWrongYear(Item item) { (bool?, string[]) result; if (item.Property is null || item.ImageFileHolder is null) throw new NullReferenceException(); DateTime? minimumDateTime = Shared.Models.Stateless.Methods.IProperty.GetMinimumDateTime(item.Property); result = item.Property.IsWrongYear(item.ImageFileHolder.FullName, minimumDateTime); return result; } }