import { IContentHubClient } from "../clients/content-hub-client";
import { ICultureLoader } from "../clients/culture-loader";
import { IExtendedContentHubClient } from "../clients/extended-client";
import { IEntityDefinition } from "../contracts/base";
import { Entity, IEntity } from "../contracts/base/entity";
import { EntityBase } from "../contracts/base/entity-base";
import { ICultureLoadOption } from "../contracts/querying/culture-load-option";
import { TypedEntityCreator, TypedEntityCreatorBase } from "../mappers/typed-entity-creator";
import { IRelationFactory } from "./relation-factory";
/**
 * Factory to create {@link IEntity} instances.
 */
export interface IEntityFactory {
    /**
     * Create an {@link IEntity} instance for the {@link IEntityDefinition} for which a definition name is specified.
     * @param definitionName - Name of the definition from which to create an entity
     * @param cultureLoadOption - Culture load option
     */
    createAsync(definitionName: string, cultureLoadOption?: ICultureLoadOption): Promise<IEntity>;
    /**
     * Create an {@link IEntity} instance for the {@link IEntityDefinition} that is specified.
     * @param definition - The definition from which to create an entity
     * @param cultureLoadOption - Culture load option
     */
    createAsync(definition: IEntityDefinition, cultureLoadOption?: ICultureLoadOption): Promise<IEntity>;
}
export declare abstract class EntityFactoryBase<T extends EntityBase> implements IEntityFactory {
    private readonly _client;
    private readonly _cultureLoader;
    private readonly _relationFactory;
    private readonly _entityCreator;
    constructor(client: IContentHubClient, relationFactory: IRelationFactory, cultureLoader: ICultureLoader, entityCreator: TypedEntityCreatorBase<T>);
    createAsync(param: string | IEntityDefinition, cultureLoadOption?: ICultureLoadOption): Promise<IEntity>;
    private getEntityDefinitionAsync;
}
export declare class EntityFactory extends EntityFactoryBase<Entity> {
    constructor(client: IExtendedContentHubClient, relationFactory: IRelationFactory, cultureLoader: ICultureLoader, entityCreator: TypedEntityCreator);
}
