using View_by_Distance.Shared.Models; namespace View_by_Distance.Map.Models.Stateless; internal abstract class MapLogic { internal static string GetDateKey(DateTime dateTime, Mapping mapping, DateTime minimumDateTime, bool? isWrongYear) { int years; string result; TimeSpan? timeSpan = Shared.Models.Stateless.Methods.IPersonBirthday.GetTimeSpan(minimumDateTime, isWrongYear, mapping.PersonBirthday); if (timeSpan.HasValue && timeSpan.Value.Ticks < 0) result = "!---"; else if (timeSpan.HasValue) { (years, _) = Shared.Models.Stateless.Methods.IPersonBirthday.GetAge(minimumDateTime, mapping.PersonBirthday); result = $"^{years:000}"; } else if (mapping.ApproximateYears.HasValue) { (years, _) = Shared.Models.Stateless.Methods.IAge.GetAge(minimumDateTime, dateTime.AddYears(-mapping.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(string[] ignoreRelativePaths, string argZero, List containers) { Dictionary> results = new(); string key; string dateKey; bool? isWrongYear; DateTime minimumDateTime; DateTime dateTime = DateTime.Now; MappingContainer mappingContainer; foreach (Container container in containers) { if (!container.Items.Any()) continue; if (!container.SourceDirectory.StartsWith(argZero)) continue; if (ignoreRelativePaths.Contains(Path.GetFileName(container.SourceDirectory))) continue; foreach (Item item in container.Items) { if (item.ImageFileHolder is null || item.Property?.Id is null || !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.PersonBirthday is null) continue; 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); dateKey = GetDateKey(dateTime, mapping, minimumDateTime, isWrongYear); key = string.Concat(mapping.PersonKey, dateKey); 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; } }