import type { DomainEntity } from '../DomainEntity.js';
import type { DomainElement } from '../DomainElement.js';
import type { DomainProperty } from '../DomainProperty.js';
import type { DomainAssociation } from '../DomainAssociation.js';
import type { IThing } from '../../models/Thing.js';
/**
 * Adds a field to the given entity that is automatically generated by the system.
 *
 * @param entity The entity to which the auto field will be added.
 * @param autoField The name of the auto field to add.
 * @returns The added DomainElement representing the auto field.
 * @throws Error if the auto field is not supported.
 */
export declare function addAutoField(entity: DomainEntity, autoField: string): DomainElement;
/**
 * Adds the primary field (ID) to the given entity.
 * If the ID field already exists, it returns the existing field.
 * Otherwise, it creates a new ID field with a name based on the entity's name.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'id'
 * - primary: true
 * - readOnly: true
 * - schema.defaultValue: { type: 'function', value: 'uuid-v4' }
 *
 * @param entity The entity to which the ID field will be added.
 * @returns The added primary field property.
 */
export declare function addIdField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an email field to the given entity.
 * If the email field already exists, it returns the existing field.
 * Otherwise, it creates a new email field with a semantic annotation.
 * @param entity The entity to which the email field will be added.
 * @returns The added email field property.
 */
export declare function addEmailField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a password field to the given entity.
 * If the password field already exists, it returns the existing field.
 * Otherwise, it creates a new password field with a semantic annotation.
 * @param entity The entity to which the password field will be added.
 * @param info Additional information for the password field.
 * @returns The added password field property.
 */
export declare function addPasswordField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a version field to the given entity.
 * @param entity The entity to which the version field will be added.
 * The version field is used to track the version of the entity.
 * @returns The added version field property.
 */
export declare function addVersionField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
export declare function addNameField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a description field to the specified entity.
 * If a description field already exists, it returns the existing field.
 * Otherwise, it creates a new description field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'description'
 * - info.displayName: 'Description'
 *
 * Set semantics:
 * - `SemanticType.Description`
 *
 * @param entity The entity to which the description field will be added.
 * @returns The added description field property.
 */
export declare function addDescriptionField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a status field to the specified entity.
 * If a status field already exists, it returns the existing field.
 * Otherwise, it creates a new status field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'status'
 * - info.displayName: 'Status'
 * - schema.enum: ['Active', 'Draft', 'Archived']
 * - schema.defaultValue: { type: 'literal', value: 'Draft' }
 *
 * Set semantics:
 * - `SemanticType.Status`
 *
 * @param entity The entity to which the status field will be added.
 * @param info Additional information about the field.
 * @returns The added status field property.
 */
export declare function addStatusField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an owner field to the specified entity.
 * If an owner field already exists, it returns the existing field.
 * Otherwise, it creates a new owner field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'owner'
 * - info.displayName: 'Owner'
 * - required: true
 *
 * Set semantics:
 * - `SemanticType.ResourceOwnerIdentifier`
 *
 * @param entity The entity to which the owner field will be added.
 * @param info Additional information about the field.
 * @returns The added owner field property.
 */
export declare function addOwnerField(entity: DomainEntity, info?: Partial<IThing>): DomainAssociation;
/**
 * Adds an updated by field to the specified entity as an association to the User entity.
 * If an updated by field already exists, it returns the existing field.
 * Otherwise, it creates a new updated by field with the specified information.
 *
 * Set properties:
 * - info.name: 'updated_by'
 * - info.displayName: 'Updated By'
 * - required: true
 *
 * Set semantics:
 * - `SemanticType.ResourceOwnerIdentifier`
 *
 * @param entity The entity to which the updated by field will be added.
 * @param info Additional information about the field.
 * @returns The added updated by field property.
 */
export declare function addUpdatedByField(entity: DomainEntity, info?: Partial<IThing>): DomainAssociation;
/**
 * Adds a created at field to the specified entity.
 * If a created at field already exists, it returns the existing field.
 * Otherwise, it creates a new created at field with the specified information.
 *
 * Set properties:
 * - type: 'datetime'
 * - info.name: 'created_at'
 * - info.displayName: 'Created At'
 * - readOnly: true
 * - index: true
 * - schema.defaultValue: { type: 'function', value: 'now' }
 *
 * Set semantics:
 * - `CreatedTimestamp`
 *
 * @param entity The entity to which the created at field will be added.
 * @param info Additional information about the field.
 * @returns The created created at field.
 */
export declare function addCreatedAtField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an updated at field to the specified entity.
 * If an updated at field already exists, it returns the existing field.
 * Otherwise, it creates a new updated at field with the specified information.
 *
 * Set properties:
 * - type: 'datetime'
 * - info.name: 'updated_at'
 * - info.displayName: 'Updated At'
 * - readOnly: true
 * - index: true
 * - schema.defaultValue: { type: 'function', value: 'now' }
 *
 * Set semantics:
 * - `UpdatedTimestamp`
 *
 * @param entity The entity to which the updated at field will be added.
 * @param info Additional information about the field.
 * @returns The created updated at field.
 */
export declare function addUpdatedAtField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a deleted at field to the specified entity.
 * If a deleted at field already exists, it returns the existing field.
 * Otherwise, it creates a new deleted at field with the specified information.
 *
 * Set properties:
 * - required: true
 * - type: 'datetime'
 * - info.name: 'deleted_at'
 * - info.displayName: 'Deleted At'
 * - readOnly: true
 * - index: true
 * - schema.defaultValue: { type: 'function', value: 'now' }
 *
 * Set semantics:
 * - `SemanticType.DeletedTimestamp`
 *
 * @param entity The entity to which the deleted_at field will be added.
 * @param info Additional information about the field.
 * @returns The added deleted at field property.
 */
export declare function addDeletedAtField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an is_deleted field to the specified entity.
 * If an is_deleted field already exists, it returns the existing field.
 * Otherwise, it creates a new is_deleted field with the specified information.
 *
 * Set properties:
 * - type: 'boolean'
 * - info.name: 'is_deleted'
 * - info.displayName: 'Is Deleted'
 * - readOnly: true
 * - index: true
 * - schema.defaultValue: { type: 'literal', value: 'false' }
 *
 * Set semantics:
 * - `SemanticType.DeletedFlag`
 *
 * @param entity The entity to which the is_deleted field will be added.
 * @param info Additional information about the field.
 * @returns The added is_deleted field property.
 */
export declare function addIsDeletedField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a first name field to the specified entity.
 * If a first name field already exists, it returns the existing field.
 * Otherwise, it creates a new first name field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'first_name'
 * - info.displayName: 'First Name'
 *
 * @param entity The entity to which the first name field will be added.
 * @param info Additional information about the field.
 * @returns The created first name field.
 */
export declare function addFirstNameField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a first name field to the specified entity.
 * If a first name field already exists, it returns the existing field.
 * Otherwise, it creates a new first name field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'first_name'
 * - info.displayName: 'First Name'
 *
 * @param entity The entity to which the first name field will be added.
 * @param info Additional information about the field.
 * @returns The created first name field.
 */
export declare function addLastNameField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a phone field to the specified entity.
 * If a phone field already exists, it returns the existing field.
 * Otherwise, it creates a new phone field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'phone'
 * - info.displayName: 'Phone Number'
 * - index: true (to search by phone number)
 *
 * Set semantics:
 * - id: SemanticType.Phone
 *
 * @param entity The entity to which the phone field will be added.
 * @param info Additional information about the field.
 * @returns The created phone field.
 */
export declare function addPhoneField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an avatar URL field to the specified entity.
 * If an avatar URL field already exists, it returns the existing field.
 * Otherwise, it creates a new avatar URL field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'avatar_url'
 * - info.displayName: 'Avatar URL'
 *
 * Set semantics:
 * - id: SemanticType.ImageURL
 *
 * @param entity The entity to which the avatar URL field will be added.
 * @param info Additional information about the field.
 * @returns The created avatar URL field.
 */
export declare function addAvatarUrlField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a public unique name (slug) field to the specified entity.
 * If a public unique name field already exists, it returns the existing field.
 * Otherwise, it creates a new public unique name field with the specified information.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'slug'
 * - info.displayName: 'Public Unique Name'
 * - index: true
 * - required: true
 * - unique: true
 *
 * Set semantics:
 * - id: SemanticType.PublicUniqueName
 *
 * @param entity The entity to which the public unique name field will be added.
 * @param info Additional information about the field.
 * @returns The created public unique name field.
 */
export declare function addPublicUniqueNameField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a SKU field to the specified entity.
 * If a SKU field already exists, it returns the existing field.
 * Otherwise, it creates a new SKU field with semantic annotation.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'sku'
 * - info.displayName: 'SKU'
 * - required: true
 * - unique: true
 *
 * @param entity The entity to which the SKU field will be added.
 * @param info Additional information about the field.
 * @returns The created SKU field.
 */
export declare function addSkuField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a price field to the specified entity with currency semantic.
 * If a price field already exists, it returns the existing field.
 * Otherwise, it creates a new price field with proper currency handling.
 *
 * Set properties:
 * - type: 'number'
 * - info.name: 'price'
 * - info.displayName: 'Price'
 * - required: true
 * - schema.maximum: 0
 *
 * @param entity The entity to which the price field will be added.
 * @param info Additional information about the field.
 * @returns The created price field.
 */
export declare function addPriceField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a quantity field to the specified entity.
 * If a quantity field already exists, it returns the existing field.
 * Otherwise, it creates a new quantity field with validation.
 *
 * Set properties:
 * - type: 'number'
 * - info.name: 'quantity'
 * - info.displayName: 'Quantity'
 * - required: true
 * - schema.minimum: 0
 *
 * @param entity The entity to which the quantity field will be added.
 * @param info Additional information about the field.
 * @returns The created quantity field.
 */
export declare function addQuantityField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a weight field to the specified entity.
 * If a weight field already exists, it returns the existing field.
 * Otherwise, it creates a new weight field.
 *
 * Set properties:
 * - type: 'number'
 * - info.name: 'weight'
 * - info.displayName: 'Weight'
 *
 * @param entity The entity to which the weight field will be added.
 * @param info Additional information about the field.
 * @returns The created weight field.
 */
export declare function addWeightField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an images field to the specified entity for multiple image URLs.
 * If an images field already exists, it returns the existing field.
 * Otherwise, it creates a new images field with ImageURL semantic.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'images'
 * - info.displayName: 'Images'
 * - multiple: true
 *
 * @param entity The entity to which the images field will be added.
 * @param info Additional information about the field.
 * @returns The created images field.
 */
export declare function addImagesField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a status field with custom enum values to the specified entity.
 * This is not a regular enum field, it should represent a record status.
 * If a status field already exists, it returns the existing field.
 * Otherwise, it creates a new status field with provided enum values.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'status'
 * - info.displayName: 'Status'
 * - required: true
 * - schema.enum: provided enum values
 * - schema.defaultValue: first enum value
 *
 * @param entity The entity to which the status field will be added.
 * @param enumValues Array of status values.
 * @param info Additional information about the field.
 * @returns The created status field.
 */
export declare function addCustomStatusField(entity: DomainEntity, enumValues: string[], info?: Partial<IThing>): DomainProperty;
/**
 * Adds a boolean field to the specified entity.
 * If the field already exists, it returns the existing field.
 * Otherwise, it creates a new boolean field with default value.
 *
 * Set properties:
 * - type: 'boolean'
 * - required: true
 * - schema.defaultValue: provided default or 'false'
 *
 * @param entity The entity to which the boolean field will be added.
 * @param fieldName Name of the boolean field.
 * @param defaultValue Default boolean value.
 * @param info Additional information about the field.
 * @returns The created boolean field.
 */
export declare function addBooleanField(entity: DomainEntity, fieldName: string, defaultValue?: string, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a session ID field to the specified entity.
 * If a session ID field already exists, it returns the existing field.
 * Otherwise, it creates a new session ID field.
 *
 * Set properties:
 * - type: 'string'
 * - info.name: 'sessionId'
 * - info.displayName: 'Session ID'
 *
 * @param entity The entity to which the session ID field will be added.
 * @param info Additional information about the field.
 * @returns The created session ID field.
 */
export declare function addSessionIdField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds an expiration datetime field to the specified entity.
 * If an expiration field already exists, it returns the existing field.
 * Otherwise, it creates a new expiration field.
 *
 * Set properties:
 * - type: 'datetime'
 * - info.name: 'expiresAt'
 * - info.displayName: 'Expires At'
 *
 * @param entity The entity to which the expiration field will be added.
 * @param info Additional information about the field.
 * @returns The created expiration field.
 */
export declare function addExpiresAtField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a unit price field to the specified entity with currency semantic.
 * If a unit price field already exists, it returns the existing field.
 * Otherwise, it creates a new unit price field with proper currency handling.
 *
 * Set properties:
 * - type: 'number'
 * - info.name: 'unitPrice'
 * - info.displayName: 'Unit Price'
 * - required: true
 *
 * @param entity The entity to which the unit price field will be added.
 * @param info Additional information about the field.
 * @returns The created unit price field.
 */
export declare function addUnitPriceField(entity: DomainEntity, info?: Partial<IThing>): DomainProperty;
/**
 * Adds a currency amount field (subtotal, tax, shipping, etc.).
 */
export declare function addCurrencyAmountField(entity: DomainEntity, fieldName: string, displayName: string, info?: Partial<IThing>): DomainProperty;
export declare function addRecommendedFields(entity: DomainEntity): DomainElement[];
//# sourceMappingURL=Intelisense.d.ts.map