namespace Tiku.Application.Storage;

public interface IObjectStorageService
{
    string ConfiguredDefaultProvider();
    string ConfiguredDefaultBucket();
    string NormalizeProvider(string? value, string? fallback = null);
    string ValidateObjectKey(Guid tenantId, string objectKey);
    string ValidateMimeType(string mimeType);
    long? ValidateFileSize(long? fileSizeBytes);
    void AssertUploadProvider(string provider);
    void AssertWritableLocation(StorageAssetLocation location);

    Task<ObjectStorageSignedUrl> SignUploadAsync(
        ObjectStorageUploadSignRequest request,
        CancellationToken cancellationToken = default);

    Task<ObjectStorageSignedUrl> SignDownloadAsync(
        ObjectStorageDownloadSignRequest request,
        CancellationToken cancellationToken = default);

    Task<ObjectStorageWriteResult> WriteObjectAsync(
        ObjectStorageWriteRequest request,
        CancellationToken cancellationToken = default);

    Task<ObjectStorageMetadata> HeadObjectAsync(
        ObjectStorageHeadRequest request,
        CancellationToken cancellationToken = default);
}
