import type { BaseModel } from '../base_model/base_model.js';
import { EmbeddedQueryBuilder } from './embedded_query_builder.js';
/**
 * Proxy for single embedded documents with full CRUD capabilities
 * Returns an EmbeddedModelInstance that behaves exactly like a regular model
 */
export declare class EmbeddedSingleProxy<T extends typeof BaseModel> {
    private _value;
    private _parent;
    private _fieldName;
    private _modelClass;
    constructor(parent: BaseModel, fieldName: string, modelClass: T, initialValue?: any);
    /**
     * Set the embedded value
     */
    setValue(value: any): void;
    /**
     * Get the embedded value
     */
    getValue(): any;
    /**
     * Create a new embedded instance
     */
    create(attributes: Partial<InstanceType<T>>): any;
    /**
     * Clear the embedded value
     */
    clear(): void;
    /**
     * Mark parent model as dirty
     */
    private markParentDirty;
    /**
     * Serialize for database storage
     */
    toDocument(): any;
}
/**
 * Proxy for multiple embedded documents with full CRUD capabilities
 * Returns an array where each item is an EmbeddedModelInstance
 */
export declare class EmbeddedManyProxy<T extends typeof BaseModel> extends Array {
    private _parent;
    private _fieldName;
    private _modelClass;
    constructor(parent: BaseModel, fieldName: string, modelClass: T, initialValue?: any[]);
    /**
     * Set the items array
     */
    setItems(items: any[]): void;
    /**
     * Query the embedded documents
     */
    query(): EmbeddedQueryBuilder<T>;
    /**
     * Create a new embedded document
     */
    create(attributes: Partial<InstanceType<T>>): any;
    /**
     * Create multiple embedded documents
     */
    createMany(attributesArray: Partial<InstanceType<T>>[]): any[];
    /**
     * Remove an embedded document
     */
    remove(item: any): boolean;
    /**
     * Remove embedded documents by condition
     */
    removeWhere(callback: (item: any) => boolean): number;
    /**
     * Override push to maintain array indices
     */
    push(...items: any[]): number;
    /**
     * Override pop to maintain array indices
     */
    pop(): any;
    /**
     * Override splice to maintain array indices
     */
    splice(start: number, deleteCount?: number, ...items: any[]): any[];
    /**
     * Update array indices for all items
     */
    private updateArrayIndices;
    /**
     * Mark parent model as dirty
     */
    private markParentDirty;
    /**
     * Serialize for database storage
     */
    toDocument(): any[];
}
//# sourceMappingURL=embedded_proxies.d.ts.map