import { DataAsset, DataAssetManager } from '../../../../../core/modules/data-assets';
import { SharedPlanShare } from '../../domain/models/shared-plan-share';
import { SharedProtectionPlanRepository } from '../../domain/repositories/shared-protection-plan-repository';
import { SharedConfigurationProcessRepository } from '../../domain/repositories/shared-configuration-process-repository';
import { SharedPlanEventListener, SharedPlanEventHandlers } from '../../domain/services/shared-plan-event-listener';
import { GenerateSharesUseCase } from './generate-shares-use-case';
import { DistributeSharesUseCase } from './distribute-shares-use-case';
export interface ConfigureSharedProtectionPlanInput {
    planId: string;
    assets: DataAsset[];
    storageLayersCount: number;
    /** Override threshold; defaults to plan.mergeThreshold */
    threshold?: number;
}
export interface ConfigureSharedProtectionPlanCallbacks {
    onSharesGenerated?: (shares: SharedPlanShare[]) => void;
    onSharesDistributed?: () => void;
    onCompleted?: () => void;
    onError?: (error: Error) => void;
    /** Signal that the backend pushed a process update via socket. */
    onProcessUpdated?: () => void;
}
export interface ConfigureSharedProtectionPlanDeps {
    planRepository: SharedProtectionPlanRepository;
    configRepository: SharedConfigurationProcessRepository;
    generateShares: GenerateSharesUseCase;
    distributeShares: DistributeSharesUseCase;
    eventListener: SharedPlanEventListener;
    assetManager: DataAssetManager;
}
export declare class ConfigureSharedProtectionPlanUseCase {
    private readonly deps;
    private activeSubscription;
    constructor(deps: ConfigureSharedProtectionPlanDeps);
    subscribe(planId: string, handlers: SharedPlanEventHandlers): void;
    unsubscribe(planId: string): void;
    execute(input: ConfigureSharedProtectionPlanInput, callbacks?: ConfigureSharedProtectionPlanCallbacks): Promise<void>;
}
