using System.Drawing.Imaging;
using System.Reflection;
using System.Text;
using View_by_Distance.Shared.Models.Methods;

namespace View_by_Distance.Property.Models.Stateless;

public interface IProperty
{

    string TestStatic_DateTimeFormat() =>
        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);

    byte[] TestStatic_GetBytes(string value) =>
       GetBytes(value);
    static byte[] GetBytes(string value) =>
        Property.GetBytes(value);

    DateTime? TestStatic_GetDateTime(string dateTimeFormat, string? value) =>
        GetDateTime(dateTimeFormat, value);
    static DateTime? GetDateTime(string dateTimeFormat, string? value) =>
        Property.GetDateTime(dateTimeFormat, value);

    PropertyItem TestStatic_GetPropertyItem(ConstructorInfo constructorInfo, int id, short type, string value) =>
       GetPropertyItem(constructorInfo, id, type, value);
    static PropertyItem GetPropertyItem(ConstructorInfo constructorInfo, int id, short type, string value) =>
        Property.GetPropertyItem(constructorInfo, id, type, value);

    (string?, DateTime[], Shared.Models.Property) TestStatic_GetProperty(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, Shared.Models.FileHolder fileHolder, Shared.Models.Property? property, bool isIgnoreExtension, bool isValidImageFormatExtension, int? id, ASCIIEncoding asciiEncoding) =>
        GetProperty(populateId, metadata, fileHolder, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding);
    static (string?, DateTime[], Shared.Models.Property) GetProperty(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, Shared.Models.FileHolder fileHolder, Shared.Models.Property? property, bool isIgnoreExtension, bool isValidImageFormatExtension, int? id, ASCIIEncoding asciiEncoding) =>
        Property.GetProperty(populateId, metadata, fileHolder, property, isIgnoreExtension, isValidImageFormatExtension, id, asciiEncoding);

    (DateTime?, DateTime[], int?, string?) TestStatic_Get(bool populateId, Shared.Models.FileHolder fileHolder, bool isIgnoreExtension, bool isValidImageFormatExtension, ASCIIEncoding asciiEncoding) =>
        Get(populateId, fileHolder, isIgnoreExtension, isValidImageFormatExtension, asciiEncoding);
    static (DateTime?, DateTime[], int?, string?) Get(bool populateId, Shared.Models.FileHolder fileHolder, bool isIgnoreExtension, bool isValidImageFormatExtension, ASCIIEncoding asciiEncoding) =>
        Property.Get(populateId, null, fileHolder, isIgnoreExtension, isValidImageFormatExtension, asciiEncoding);

    (DateTime?, DateTime[], int?, string?) TestStatic_Get(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, Shared.Models.FileHolder fileHolder, bool isIgnoreExtension, bool isValidImageFormatExtension, ASCIIEncoding asciiEncoding) =>
        Get(populateId, metadata, fileHolder, isIgnoreExtension, isValidImageFormatExtension, asciiEncoding);
    static (DateTime?, DateTime[], int?, string?) Get(bool populateId, IMetadata<MetadataExtractor.Directory>? metadata, Shared.Models.FileHolder fileHolder, bool isIgnoreExtension, bool isValidImageFormatExtension, ASCIIEncoding asciiEncoding) =>
        Property.Get(populateId, metadata, fileHolder, isIgnoreExtension, isValidImageFormatExtension, asciiEncoding);

}