import type { AppLogger } from "@paroicms/internal-server-lib";
import type { ResizeRule, ScImageCompressionQualityPolicyStep } from "@paroicms/public-anywhere-lib";
import type { GetOriginalImage, ImageCacheOwnerTransaction, ImageVariant, ImageVariantStorage, ImageVariantWithBinary, NewVariantInput } from "./engine-types.js";
export interface ImageCacheEngine {
    getImageVariantWithBinary(options: {
        mediaId: string;
        mediaType: string;
        rawWidth: number;
        rawHeight: number;
    }): Promise<ImageVariantWithBinary | undefined>;
    getImageVariantWithBinaryByOwner(options: {
        mediaId: string;
        mediaType: string;
        ownerHandle: string;
        rawResizeR: ResizeRule;
    }): Promise<ImageVariantWithBinary | undefined>;
    makeImageAvailable(input: NewVariantAndOwnerInput): Promise<ImageVariant>;
    createOwnerTransaction(ownerHandle: string): ImageCacheOwnerTransaction;
    invalidate(options: {
        mediaId: string;
    } | {
        mediaIds: string[];
    } | {
        ownerHandles: string[];
    }): Promise<void>;
    /**
     * Delete the images that have no ownerHandle and that have not been used recently.
     */
    cleanUnusedValues(): Promise<void>;
    clearCache(): Promise<void>;
    getUsedRawSizesByMedia(mediaId: string): Promise<import("./engine-types.js").UsedRawSize[]>;
    close(): Promise<void>;
}
export interface NewVariantAndOwnerInput extends NewVariantInput {
    ownerHandle: string;
    isHandleReusable: boolean;
    /**
     * If `true`, the `ownerHandle` is used for a single variant with the same `mediaType` and
     * `mediaId`. Also, `getImageVariantWithBinaryByOwner` can be safely used to fetch the image
     * variant even when the variant is still being processed.
     */
    canBeRetrievedByOwner: boolean;
}
export interface CreateImageCacheEngineOptions {
    storage: ImageVariantStorage;
    getOriginalImage: GetOriginalImage;
    logger?: AppLogger;
    dependsOn: string;
    qualityPolicy: ScImageCompressionQualityPolicyStep[];
    /**
     * For example: `"14d"`. Leave `undefined` to keep cache data undefinitely.
     */
    timeToIdle?: string;
    debugMode?: boolean;
}
export declare function createImageCacheEngine(options: CreateImageCacheEngineOptions): Promise<{
    imageCache: ImageCacheEngine;
    isFresh: boolean;
    databaseId: string;
}>;
//# sourceMappingURL=image-cache-engine.d.ts.map