import SharedProtectionPlan from '../models/shared-protection-plan';
import { SharedPlanShare } from '../models/shared-plan-share';
import { SharedPlanView } from '../models/shared-plan-view';
import { FindSharedPlansCriteria } from '../../application/listing/find-shared-protection-plans-by-criteria-use-case';
import { PaginationOptions, SortOptions } from "../../../../../core/modules/_shared";
import { ResourceCount } from '../../../../../core/modules/_shared/domain/models/resource-count';
export interface SharedProtectionPlanRepository {
    findById(id: string): Promise<SharedProtectionPlan | null>;
    findAll(): Promise<SharedPlanView[]>;
    findByCriteria(criteria: FindSharedPlansCriteria, pagination?: PaginationOptions, sort?: SortOptions): Promise<SharedPlanView[]>;
    count(criteria: FindSharedPlansCriteria): Promise<ResourceCount>;
    save(plan: SharedProtectionPlan): Promise<void>;
    delete(id: string): Promise<void>;
    /** Sends encrypted data, backup, and key shards to the backend to complete plan configuration. */
    configure(planId: string, dataShards: SharedPlanShare[], backupShards: SharedPlanShare[], keyShards: SharedPlanShare[], encryptedKey?: string, assetsMetadata?: any, custodianPair?: {
        keyShard: {
            id: string;
            data: string;
        };
        dataShard: {
            id: string;
            data: string;
        };
    }): Promise<void>;
    /** Re-distributes encrypted shares for an existing plan (requires active EDIT merge process). */
    reconfigure(planId: string, mergeProcessId: string, dataShards: SharedPlanShare[], backupShards: SharedPlanShare[], keyShards: SharedPlanShare[], encryptedKey?: string, assetsMetadata?: any, custodianPair?: {
        keyShard: {
            id: string;
            data: string;
        };
        dataShard: {
            id: string;
            data: string;
        };
    }): Promise<void>;
}
