using View_by_Distance.Shared.Models.Methods; namespace View_by_Distance.Distance.Models; public class DistanceLimits : IDistanceLimits { private int _Days; private int _Distance; public double FaceAreaPermyriad { init; get; } public double RangeDaysDeltaTolerance { init; get; } public double FaceConfidencePercent { init; get; } public double FaceDistancePermyriad { init; get; } public int SortingMaximumPerFaceShouldBeHigh { init; get; } public bool RangeDaysDeltaTargetLessThenUpper { init; get; } public double RangeDistanceToleranceUpperLimit { init; get; } public DistanceLimits(int faceAreaPermyriad, int faceConfidencePercent, int faceDistancePermyriad, int[] rangeDaysDeltaTolerance, float[] rangeDistanceTolerance, float[] rangeFaceAreaTolerance, float[] rangeFaceConfidence, int sortingMaximumPerFaceShouldBeHigh, int? useFiltersCounter = null) { RangeDistanceToleranceUpperLimit = rangeDistanceTolerance[2]; SortingMaximumPerFaceShouldBeHigh = sortingMaximumPerFaceShouldBeHigh; RangeDaysDeltaTargetLessThenUpper = rangeDaysDeltaTolerance[1] > rangeDaysDeltaTolerance[2]; if (useFiltersCounter is null) { RangeDaysDeltaTolerance = rangeDaysDeltaTolerance[1]; FaceConfidencePercent = faceConfidencePercent * rangeFaceConfidence[1]; FaceAreaPermyriad = faceAreaPermyriad * rangeFaceAreaTolerance[1]; FaceDistancePermyriad = faceDistancePermyriad * rangeDistanceTolerance[1]; } else { RangeDaysDeltaTolerance = ((rangeDaysDeltaTolerance[2] - rangeDaysDeltaTolerance[0]) * 0.01 * useFiltersCounter.Value) + rangeDaysDeltaTolerance[1]; FaceConfidencePercent = faceConfidencePercent * ((rangeFaceConfidence[2] - rangeFaceConfidence[0]) * 0.01 * useFiltersCounter.Value) + rangeFaceConfidence[1]; FaceDistancePermyriad = faceDistancePermyriad * ((rangeDistanceTolerance[2] - rangeDistanceTolerance[0]) * 0.01 * useFiltersCounter.Value) + rangeDistanceTolerance[1]; FaceAreaPermyriad = faceAreaPermyriad * ((rangeFaceAreaTolerance[2] - rangeFaceAreaTolerance[0]) * 0.01 * useFiltersCounter.Value) + rangeFaceAreaTolerance[1]; } } string IDistanceLimits.GetCounts() { string result; List<(int Value, string Name)> results = [ new(_Days, nameof(_Days)), new(_Distance, nameof(_Distance)) ]; result = string.Join(' ', from l in results orderby l.Value descending select $"{l.Name}_{l.Value};"); return result; } void IDistanceLimits.AddCounts(int days, int distance) { _Days += days; _Distance += distance; } }