import { RelationRole } from "../../contracts/base";
import CultureInfo from "../../culture-info";
import { IEntityLoadConfiguration } from "./entity-load-configuration";
import { LoadOption } from "./load-options";
import { IRelationSpecification } from "./relation-specification";
/**
 * An interface for a builder for instances of {@link IEntityLoadConfiguration}.
 */
export interface IEntityLoadConfigurationBuilder {
    /**
     * Indicates that entities should be loaded in the cultures specified by the load option.
     * @param loadOption - The load option
     */
    inCultures(loadOption: LoadOption): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded in the specified cultures.
     * @param culture - The cultures
     */
    inCultures(cultures: Array<CultureInfo>): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded in the specified culture.
     * @param culture - The culture
     */
    inCulture(culture: CultureInfo): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the properties specified by the load option.
     * @param loadOption - The load option
     */
    withProperties(loadOption: LoadOption): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the specified properties.
     * @param properties - The properties
     */
    withProperties(properties: Array<string>): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the specified property.
     * @param property - The name of the property
     */
    withProperty(property: string): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the relations specified by the load option.
     * @param loadOption - The load option
     */
    withRelations(loadOption: LoadOption): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the specified relations.
     * @param relations - The relations
     */
    withRelations(relations: Array<string>): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the specified relation specifications.
     * @param specifications - The relation specifications
     */
    withRelations(specifications: Array<IRelationSpecification>): IEntityLoadConfigurationBuilder;
    /**
     * Indicates that entities should be loaded with the specified relation in the specified role.
     * @param relation - The name of the relation
     * @param role - The role of the relation
     */
    withRelation(relation: string, role?: RelationRole): IEntityLoadConfigurationBuilder;
    /**
     * Gets the resulting instance of {@link IEntityLoadConfiguration}.
     */
    build(): IEntityLoadConfiguration;
}
export declare class EntityLoadConfigurationBuilder implements IEntityLoadConfigurationBuilder {
    private readonly _entityLoadConfiguration;
    constructor(entityLoadConfiguration?: IEntityLoadConfiguration);
    inCultures(option: LoadOption | Array<CultureInfo>): IEntityLoadConfigurationBuilder;
    inCulture(culture: CultureInfo): IEntityLoadConfigurationBuilder;
    withProperties(option: LoadOption | Array<string>): IEntityLoadConfigurationBuilder;
    withProperty(property: string): IEntityLoadConfigurationBuilder;
    withRelations(option: LoadOption | Array<string | IRelationSpecification>): IEntityLoadConfigurationBuilder;
    withRelation(relation: string, role?: RelationRole): IEntityLoadConfigurationBuilder;
    build(): Readonly<IEntityLoadConfiguration>;
}
