import { OnModuleInit } from "@nestjs/common";
import { Asset, AssetService, CollectionService, ConfigService, EventBus, JobQueueService, ProductService, ProductVariantService, RelationPaths, RequestContext, SerializedRequestContext, TransactionalConnection } from "@vendure/core";
import { PluginPreviewImageHashCreateInput, PluginPreviewImageHashCreateResult, PluginPreviewImageHashForAllAssetsInput, PluginPreviewImageHashForCollectionInput, PluginPreviewImageHashForProductInput, PluginPreviewImageHashResult } from "../generated-admin-types";
import { PluginPreviewImageHashOptions } from "../types";
/**
 * The PreviewImageHashService provides methods for managing the creation of image hashes.
 *
 * @category Services
 */
export declare class PreviewImageHashService implements OnModuleInit {
    private assetService;
    private collectionService;
    private productService;
    private productVariantService;
    private configService;
    private eventBus;
    private jobQueueService;
    private connection;
    private options;
    /** @internal */
    constructor(assetService: AssetService, collectionService: CollectionService, productService: ProductService, productVariantService: ProductVariantService, configService: ConfigService, eventBus: EventBus, jobQueueService: JobQueueService, connection: TransactionalConnection, options: PluginPreviewImageHashOptions);
    private jobQueue;
    /**
     * Adds the hashing to the dedicated job queue
     */
    addToJobQueue(ctx: RequestContext, input: PluginPreviewImageHashCreateInput): Promise<import("@vendure/core/dist/job-queue/subscribable-job").SubscribableJob<{
        ctx: SerializedRequestContext;
        input: PluginPreviewImageHashCreateInput;
    }>>;
    /**
     * Convenience method to make the processing code more concise
     */
    private result;
    /**
     * Bootstrapping the plugin
     */
    onModuleInit(): Promise<void>;
    /**
     * Depending on `input.runSynchronously` will either generate the hash and persist it to the asset,
     * or will add this task to the dedicated job queue.
     *
     * If being run synchronously will return the asset so you can query the custom field directly
     */
    create(ctx: RequestContext, input: PluginPreviewImageHashCreateInput, relations?: RelationPaths<Asset>): Promise<PluginPreviewImageHashCreateResult>;
    /**
     * Enqueues hashing jobs for each asset inside this product.
     * Includes the product itself and all of its variants.
     *
     * Deduplicates the asset IDs.
     */
    createForProduct(ctx: RequestContext, input: PluginPreviewImageHashForProductInput): Promise<PluginPreviewImageHashResult>;
    /**
     * Helper for determining whether or not we should skip hash generation for a given asset.
     * Useful for keeping the logging DRY.
     *
     * @param shouldRegenerate Whether or not you want to regenerate existing hashes
     * @param asset The asset for which you would like to check
     * @returns Whether or not you should skip this asset
     */
    private shouldSkipGeneratingHash;
    /**
     * Enqueues hashing jobs for each asset inside a collection. This includes the collection itself,
     * the contained products and all of their variants.
     *
     * Due to how large collections can become, you may want to disable the deduplication of asset ids.
     *
     * If deduplication is enabled, jobs will be created only after gathering all assets first.
     * If disabled, jobs will be created as the assets are being read.
     *
     * No deduplication may result in assets being hashed multiple times, but the tradeoff is not having
     * to hold potentially millions of records in memory and just letting the worker take care of them eventually.
     */
    createForCollection(ctx: RequestContext, input: PluginPreviewImageHashForCollectionInput): Promise<PluginPreviewImageHashResult>;
    /**
     * Create preview image hashes for all assets.
     *
     * This mutation should be handled with extra care since an installation may hold hundreds of thousands of images.
     * This is mainly useful as a one-time-use utility to initialize all of the assets with hashes after installing the plugin.
     */
    createForAllAssets(ctx: RequestContext, input?: PluginPreviewImageHashForAllAssetsInput): Promise<PluginPreviewImageHashResult>;
}
