import { DataAsset } from '../../../src/core/modules/data-assets';
import { CreateSharedProtectionPlanUseCase } from '../../../src/shared-configuration/modules/shared-protection-plan/application/creation/create-shared-protection-plan-use-case';
import { ConfigureSharedProtectionPlanCallbacks, ConfigureSharedProtectionPlanUseCase } from '../../../src/shared-configuration/modules/shared-protection-plan/application/configuration-process/configure-shared-protection-plan-use-case';
import { AccessPolicyInput, CreateSharedProtectionPlanInput } from '../../../src/shared-configuration/modules/shared-protection-plan/domain/dto/shared-protection-plan-input';
import { AuthMethodType } from '../../../src/shared-configuration/modules/shared-protection-plan/domain/models/shared-plan-authentication-method';
export interface SharedPlanTemplate {
    id: string;
    name: string;
    description?: string;
    type: 'BACKUP' | 'BUSINESS_CONTINUITY';
    sharingModel: 'SHARED' | 'PRIVATE';
    moderatedAccess: boolean;
    teamIds: string[];
    extraModeratorIds: string[];
    authenticationMethodIds: AuthMethodType[];
    assets: DataAsset[];
    categoryId?: string;
}
export interface GenerateSharedPlansConfig {
    count: number;
    type?: SharedPlanTemplate['type'] | SharedPlanTemplate['type'][];
    sharingModel?: SharedPlanTemplate['sharingModel'] | SharedPlanTemplate['sharingModel'][];
    moderatedAccess?: boolean | 'random';
    authenticationMethodIds?: AuthMethodType[];
    teamIds?: string[];
    extraModeratorIds?: string[];
    categoryId?: string;
    assetsPerPlan?: number;
}
export interface SharedPlanRuleInput {
    tenantId: string;
    type: SharedPlanTemplate['type'];
    name: string;
    description?: string;
    sharingModel: SharedPlanTemplate['sharingModel'];
    teamIds?: string[];
    memberId?: string;
    creatorMemberId?: string;
    ownerMemberId?: string;
    moderatedAccess?: boolean;
    selectedModeratorIds?: string[];
    requestedMinimumApprovals?: number;
    requireAuth?: boolean;
    authenticationMethodIds?: AuthMethodType[];
    storageLayersCount: number;
    categoryId?: string;
    assets?: DataAsset[];
}
export interface CreateSharedPlansContext {
    tenantId: string;
    memberId?: string;
    creatorMemberId?: string;
    ownerMemberId?: string;
    storageLayersCount: number;
}
export interface ConfigureSharedPlanContext {
    storageLayersCount: number;
    callbacks?: ConfigureSharedProtectionPlanCallbacks;
}
export declare class SharedProtectionPlanTemplateGenerator {
    static randomTemplate(overrides?: Partial<SharedPlanTemplate>): SharedPlanTemplate;
    static generatePlans(config: GenerateSharedPlansConfig): SharedPlanTemplate[];
}
export declare function resolveDefaultPlanModeratorIds({ sharingModel, moderatedAccess, creatorMemberId, ownerMemberId, }: Pick<SharedPlanRuleInput, 'sharingModel' | 'moderatedAccess' | 'creatorMemberId' | 'ownerMemberId'>): string[];
export declare function resolveFinalPlanModeratorIds(input: Pick<SharedPlanRuleInput, 'sharingModel' | 'moderatedAccess' | 'creatorMemberId' | 'ownerMemberId' | 'selectedModeratorIds'>): string[];
export declare function buildPlanAccessPolicy({ sharingModel, teamIds, memberId, creatorMemberId, }: Pick<SharedPlanRuleInput, 'sharingModel' | 'teamIds' | 'memberId' | 'creatorMemberId'>): AccessPolicyInput;
export declare function buildSharedPlanCreatePayload(input: SharedPlanRuleInput): Omit<CreateSharedProtectionPlanInput, 'id'>;
export declare function createSharedPlans(plans: SharedPlanTemplate[], context: CreateSharedPlansContext, createUseCase: Pick<CreateSharedProtectionPlanUseCase, 'execute'>): Promise<SharedPlanTemplate[]>;
export declare function configureSharedPlan(plan: SharedPlanTemplate, context: ConfigureSharedPlanContext, configureUseCase: Pick<ConfigureSharedProtectionPlanUseCase, 'execute'>): Promise<void>;
export declare function configureSharedPlans(plans: SharedPlanTemplate[], context: ConfigureSharedPlanContext, configureUseCase: Pick<ConfigureSharedProtectionPlanUseCase, 'execute'>): Promise<void>;
