namespace View_by_Distance.Shared.Models.Stateless.Methods;

public interface IProperty
{ // ...

    string TestStatic_DateTimeFormat();
    static string DateTimeFormat() => "yyyy:MM:dd HH:mm:ss";

    int TestStatic_GetDeterministicHashCode(byte[] value) =>
        GetDeterministicHashCode(value);
    static int GetDeterministicHashCode(byte[] value) =>
        Property.GetDeterministicHashCode(value);

    List<DateTime> TestStatic_GetMetadataDateTimesByPattern(string dateTimeFormat, Models.FileHolder fileHolder) =>
        GetMetadataDateTimesByPattern(dateTimeFormat, fileHolder);
    static List<DateTime> GetMetadataDateTimesByPattern(string dateTimeFormat, Models.FileHolder fileHolder) =>
        Property.GetMetadataDateTimesByPattern(dateTimeFormat, fileHolder.FullName);

    int TestStatic_GetDeterministicHashCode(string value) =>
        GetDeterministicHashCode(value);
    static int GetDeterministicHashCode(string value) =>
        Property.GetDeterministicHashCode(value);

    DateTime TestStatic_GetDateTime(Models.Property? property) =>
        GetDateTime(property);
    static DateTime GetDateTime(Models.Property? property) =>
        Property.GetDateTime(property);

    DateTime TestStatic_GetMinimumDateTime(Models.Property? property) =>
        GetMinimumDateTime(property);
    static DateTime GetMinimumDateTime(Models.Property? property) =>
        Property.GetMinimumDateTime(property);

    (int Season, string seasonName) TestStatic_GetSeason(int dayOfYear) =>
        GetSeason(dayOfYear);
    static (int Season, string seasonName) GetSeason(int dayOfYear) =>
        Property.GetSeason(dayOfYear);

    string TestStatic_GetDiffRootDirectory(string diffPropertyDirectory) =>
        GetDiffRootDirectory(diffPropertyDirectory);
    static string GetDiffRootDirectory(string diffPropertyDirectory) =>
        Property.GetDiffRootDirectory(diffPropertyDirectory);

    bool TestStatic_Any(Models.Container[] propertyHolderCollections) =>
        Any(propertyHolderCollections);
    static bool Any(Models.Container[] propertyHolderCollections) =>
        Property.Any(propertyHolderCollections);

    (bool?, string[]) TestStatic_IsWrongYear(string[] segments, string year) =>
        IsWrongYear(segments, year);
    static (bool?, string[]) IsWrongYear(string[] segments, string year) =>
        Property.IsWrongYear(segments, year);

    (DateTime?, int?, string?) TestStatic_Get(Models.FileHolder fileHolder) =>
        Get(fileHolder);
    static (DateTime?, int?, string?) Get(Models.FileHolder fileHolder) =>
        Property.Get(fileHolder);

    DateTime? TestStatic_GetDateTimeFromName(Models.FileHolder fileHolder) =>
        GetDateTimeFromName(fileHolder);
    static DateTime? GetDateTimeFromName(Models.FileHolder fileHolder) =>
        Property.GetDateTimeFromName(fileHolder);

    List<DateTime> TestStatic_GetDateTimes(Models.Property property) =>
        GetDateTimes(property);
    static List<DateTime> GetDateTimes(Models.Property property) =>
        Property.GetDateTimes(property.CreationTime, property.LastWriteTime, property.DateTime, property.DateTimeDigitized, property.DateTimeFromName, property.DateTimeOriginal, property.GPSDateStamp);

    double TestStatic_GetStandardDeviation(IEnumerable<long> values, double average) =>
        GetStandardDeviation(values, average);
    static double GetStandardDeviation(IEnumerable<long> values, double average) =>
        Property.GetStandardDeviation(values, average);

    TimeSpan TestStatic_GetThreeStandardDeviationHigh(int minimum, Models.Container container) =>
        GetThreeStandardDeviationHigh(minimum, container);
    static TimeSpan GetThreeStandardDeviationHigh(int minimum, Models.Container container) =>
        Property.GetThreeStandardDeviationHigh(minimum, container);

    (int, List<DateTime>, List<Models.Item>) TestStatic_Get(Models.Container container, TimeSpan threeStandardDeviationHigh, int i) =>
        Get(container, threeStandardDeviationHigh, i);
    static (int, List<DateTime>, List<Models.Item>) Get(Models.Container container, TimeSpan threeStandardDeviationHigh, int i) =>
        Property.Get(container, threeStandardDeviationHigh, i);

    List<DateTime> TestStatic_GetDateTimes(DateTime creationTime, DateTime lastWriteTime, DateTime? dateTime, DateTime? dateTimeDigitized, DateTime? dateTimeFromName, DateTime? dateTimeOriginal, DateTime? gpsDateStamp) =>
        GetDateTimes(creationTime, lastWriteTime, dateTime, dateTimeDigitized, dateTimeFromName, dateTimeOriginal, gpsDateStamp);
    static List<DateTime> GetDateTimes(DateTime creationTime, DateTime lastWriteTime, DateTime? dateTime, DateTime? dateTimeDigitized, DateTime? dateTimeFromName, DateTime? dateTimeOriginal, DateTime? gpsDateStamp) =>
        Property.GetDateTimes(creationTime, lastWriteTime, dateTime, dateTimeDigitized, dateTimeFromName, dateTimeOriginal, gpsDateStamp);

}