import { DataEntity } from './DataEntity.js';
import { DataNamespace } from './DataNamespace.js';
import { type DataPropertyType } from '../DataFormat.js';
import { type IThing } from '../../models/Thing.js';
/**
 * A fluent builder for constructing `DataEntity` instances.
 *
 * @example
 * ```typescript
 * const ns = new DataNamespace();
 * const userEntity = DataEntityBuilder.withName(namespace, 'User')
 *   .addTypedProperty('string', 'firstName')
 *   .addTypedProperty('string', 'lastName')
 *   .addTypedProperty('integer', 'age')
 *   .addNamedAssociation('address')
 *   .addTag('user')
 *   .addTaxonomy(['user', 'person'])
 *   .build();
 *
 * const addressEntity = DataEntityBuilder.withName(namespace, 'Address')
 *   .addTypedProperty('string', 'street')
 *   .addTypedProperty('string', 'city')
 *   .addTag('address')
 *   .build();
 *
 * // Adding a target association after entities creation:
 * userEntity.associations[0].addTarget(addressEntity)
 * ```
 *
 * @example
 * ```typescript
 * const newEntity = DataEntityBuilder.newEntity(namespace)
 *   .withInfo({name: "test entity", description: "test desc"})
 *   .build();
 *
 * // with parents
 * const baseEntity = DataEntityBuilder.withName(namespace, 'Base')
 *   .build()
 *
 * const specializedEntity = DataEntityBuilder.withName(namespace, 'Specialized')
 *   .addParent(baseEntity.key)
 *   .build()
 * ```
 * @deprecated
 */
export declare class DataEntityBuilder {
    private entity;
    private root;
    /**
     * Creates a new DataEntityBuilder.
     * @param root The namespace the entity will belong to.
     * @param name Optional name of the entity.
     */
    private constructor();
    /**
     * Creates a new DataEntityBuilder instance with a name.
     * @param root The namespace the entity will belong to.
     * @param name The name of the entity.
     * @returns A new DataEntityBuilder instance.
     */
    static withName(root: DataNamespace, name: string): DataEntityBuilder;
    /**
     * Creates a new DataEntityBuilder instance without a name.
     * @param root The namespace the entity will belong to.
     * @returns A new DataEntityBuilder instance.
     */
    static newEntity(root: DataNamespace): DataEntityBuilder;
    /**
     * Sets the key of the entity.
     * @param key The key of the entity.
     * @returns The current DataEntityBuilder instance.
     */
    withKey(key: string): DataEntityBuilder;
    /**
     * Adds a description to the entity.
     * @param description The description of the entity.
     * @returns The current DataEntityBuilder instance.
     */
    withDescription(description: string): DataEntityBuilder;
    /**
     * Adds info object to the entity
     * @param info The info object
     * @returns The current DataEntityBuilder instance.
     */
    withInfo(info: IThing): DataEntityBuilder;
    /**
     * Adds a tag to the entity.
     * @param tag The tag to add.
     * @returns The current DataEntityBuilder instance.
     */
    addTag(tag: string): DataEntityBuilder;
    /**
     * Adds multiple tags to the entity.
     * @param tags The tags to add.
     * @returns The current DataEntityBuilder instance.
     */
    addTags(tags: string[]): DataEntityBuilder;
    /**
     * Adds taxonomy to the entity.
     * @param taxonomy The taxonomy to add.
     * @returns The current DataEntityBuilder instance.
     */
    addTaxonomy(taxonomy: string[]): DataEntityBuilder;
    /**
     * Adds a typed property to the entity.
     * @param type The type of the property.
     * @param name The name of the property.
     * @returns The current DataEntityBuilder instance.
     */
    addTypedProperty(type: DataPropertyType, name?: string): DataEntityBuilder;
    /**
     * Adds a named property to the entity.
     * @param name The name of the property.
     * @returns The current DataEntityBuilder instance.
     */
    addNamedProperty(name: string): DataEntityBuilder;
    /**
     * Adds a named association to the entity.
     * @param name The name of the association.
     * @returns The current DataEntityBuilder instance.
     */
    addNamedAssociation(name: string): DataEntityBuilder;
    /**
     * Adds a target association to the entity.
     * @param target The target entity key of the association.
     * @param name Optional name of the association.
     * @returns The current DataEntityBuilder instance.
     */
    addTargetAssociation(target: string, name?: string): DataEntityBuilder;
    /**
     * Adds a foreign association to the entity.
     * @param target The target entity key of the association.
     * @param namespace The target entity namespace.
     * @param name Optional name of the association.
     * @returns The current DataEntityBuilder instance.
     */
    addForeignAssociation(target: string, namespace: string, name?: string): DataEntityBuilder;
    /**
     * Sets the entity as deprecated.
     * @param deprecated
     * @returns The current DataEntityBuilder instance.
     */
    setDeprecated(deprecated: boolean): DataEntityBuilder;
    /**
     * Adds a parent to the entity.
     * @param parentKey The key of the parent entity.
     * @returns The current DataEntityBuilder instance.
     */
    addParent(parentKey: string): DataEntityBuilder;
    /**
     * Adds multiple parents to the entity.
     * @param parentKeys The keys of the parent entities.
     * @returns The current DataEntityBuilder instance.
     */
    addParents(parentKeys: string[]): DataEntityBuilder;
    /**
     * Builds and returns the `DataEntity` instance.
     * @returns The constructed DataEntity instance.
     */
    build(): DataEntity;
}
//# sourceMappingURL=DataEntityBuilder.d.ts.map