Mike Phares 73de1070b8 SegmentB, personKey,
personKeyFormatted and Sorting
2022-09-01 01:18:08 -07:00

84 lines
3.8 KiB
C#

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<string, List<MappingContainer>> GetKeyValuePairs(Item[] items)
{
Dictionary<string, List<MappingContainer>> 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;
}
}