import { type SiteScopedStoragePath, type StorageBucketName, type StoragePath, type UserId, type UtcIsoDateTimeString } from '@riverbankcms/core';
import type { ActiveValidatedFileAsset, FileAssetId, FileAssetLifecycle, FileUsageReference } from './fileDomain';
export type FileAssetStorageObjectRef = {
    readonly storageBucket: StorageBucketName;
    readonly storagePath: StoragePath | SiteScopedStoragePath;
};
export type FileAssetDeletionInput = {
    readonly asset: ActiveValidatedFileAsset;
    readonly usageReferences: readonly FileUsageReference[];
    readonly requestedBy: UserId;
    readonly now: UtcIsoDateTimeString;
};
export type FileAssetDeletionPlan = {
    readonly tag: 'blocked-by-usage';
    readonly assetId: FileAssetId;
    readonly lifecycle: Extract<FileAssetLifecycle, {
        readonly tag: 'pending-delete';
    }>;
} | {
    readonly tag: 'delete-now';
    readonly assetId: FileAssetId;
    readonly storageObject: FileAssetStorageObjectRef;
    readonly derivativeAssetIds: readonly FileAssetId[];
    readonly lifecycle: Extract<FileAssetLifecycle, {
        readonly tag: 'deleted';
    }>;
};
export declare function planFileAssetDeletion(input: FileAssetDeletionInput): FileAssetDeletionPlan;
