import { BaseModel } from './balancy-model.class';
type Constructor<T> = {
    new (...args: any[]): T;
    getFileName(): string;
};
/**
 * Wrapper for singleton models. Supports both regular singletons and ConditionalTemplate-based singletons.
 * ConditionalTemplate singletons automatically update based on user conditions and priority.
 *
 * @example
 * ```typescript
 * // Get singleton wrapper
 * const singleton = CMS.getSingleton(SmartConfig);
 *
 * // Get current value
 * const config = singleton?.get();
 *
 * // Subscribe to changes
 * singleton?.onChange((model) => {
 *   console.log('Config changed:', model);
 * });
 * ```
 */
export declare class BalancySingleton<T extends BaseModel> {
    private readonly modelClass;
    private static instances;
    private readonly templateName;
    private readonly callbackId;
    private onChangedCallbacks;
    constructor(modelClass: Constructor<T>);
    /**
     * Get the current singleton instance. For ConditionalTemplate singletons,
     * this returns the variant with the highest priority whose condition passes.
     *
     * @returns Current singleton instance or null if not available
     */
    get(): T | null;
    /**
     * Subscribe to singleton changes. Useful for ConditionalTemplate singletons
     * that change based on user conditions.
     *
     * @param callback Function to call when singleton changes
     *
     * @example
     * ```typescript
     * singleton.onChange((model) => {
     *   console.log('New config:', model.name);
     * });
     * ```
     */
    onChange(callback: (model: T) => void): void;
    /**
     * Unsubscribe from singleton changes.
     *
     * @param callback Function to remove from callbacks
     */
    offChange(callback: (model: T) => void): void;
    /**
     * Static callback invoked from C++ when singleton changes
     * @private
     */
    private onSingletonChangedStatic;
    /**
     * Cleanup when singleton is no longer needed.
     * This unsubscribes from C++ callbacks and removes all event listeners.
     */
    dispose(): void;
}
export {};
//# sourceMappingURL=balancy-singleton.class.d.ts.map