import { DataAsset } from '../../../../../core/modules/data-assets';
import ProtectionPlanAccessPolicy, { ProtectionPlanAccessPolicyPrimitiveProps } from "./protection-plan-access-policy";
import { SharedPlanShare } from "./shared-plan-share";
import { SharedPlanModerator, SharedPlanModeratorPrimitiveProps } from "./shared-plan-moderator";
import { SharedPlanAuthenticationMethod, SharedPlanAuthenticationMethodPrimitiveProps } from "./shared-plan-authentication-method";
import { AuthenticationMode } from "./authentication-mode";
import { ApprovalMode } from "../dto/shared-protection-plan-input";
import { SharedPlanDmsTriggerProps } from "./shared-plan-dms-trigger";
export type SharedProtectionPlanStatus = 'DRAFT' | 'PROTECTED';
export type SharedProtectionPlanAccessType = 'MODERATED' | 'DIRECT';
export interface EffectivePlanPolicy<T> {
    value: T;
    source: 'org' | 'plan';
    customValue?: T;
    isOverridden: boolean;
}
export interface SharedPlanStorageLayer {
    id: "INHERITI_HSM" | "INHERITI_VAULT" | "INHERITI_CHAIN" | "GOOGLE_DRIVE" | "DROPBOX";
}
export interface SharedProtectionPlanProps {
    id: string;
    tenantId?: string;
    creatorMemberId?: string;
    type: 'BACKUP' | 'BUSINESS_CONTINUITY';
    name: string;
    description?: string;
    moderators?: SharedPlanModerator[];
    authenticationMethods?: SharedPlanAuthenticationMethod[];
    authenticationMode?: AuthenticationMode;
    approvalMode?: ApprovalMode;
    authenticationPolicy?: EffectivePlanPolicy<AuthenticationMode>;
    approvalModePolicy?: EffectivePlanPolicy<ApprovalMode>;
    accessPolicy: ProtectionPlanAccessPolicy;
    mergeThreshold: number;
    mergeCount: number;
    minimumApprovals?: number;
    shares: SharedPlanShare[];
    assets?: DataAsset[];
    status: SharedProtectionPlanStatus;
    storageLayers?: SharedPlanStorageLayer[];
    createdAt: Date;
    updatedAt: Date;
    privacyMode: "PUBLIC" | "PRIVATE";
    assetsMetadata: any;
    categoryId?: string | null;
    code?: string;
    withCustodian?: boolean;
    masterKeyEncrypted?: boolean;
    triggers?: SharedPlanDmsTriggerProps[];
}
export interface SharedPlanSharePrimitiveProps {
    id: string;
    storageLayerId?: string;
    addresses: string[];
    data?: string;
    key?: string;
    createdAt?: Date | string;
    distributedAt?: Date | string;
}
export interface SharedProtectionPlanPrimitiveProps extends Omit<SharedProtectionPlanProps, 'moderators' | 'authenticationMethods' | 'accessPolicy' | 'shares' | 'status' | 'createdAt' | 'updatedAt' | 'code'> {
    moderators?: SharedPlanModeratorPrimitiveProps[];
    authenticationMethods?: SharedPlanAuthenticationMethodPrimitiveProps[];
    authenticationMode?: AuthenticationMode;
    approvalMode?: ApprovalMode;
    authenticationPolicy?: EffectivePlanPolicy<AuthenticationMode>;
    approvalModePolicy?: EffectivePlanPolicy<ApprovalMode>;
    accessPolicy: ProtectionPlanAccessPolicyPrimitiveProps;
    shares: SharedPlanSharePrimitiveProps[];
    status: string;
    createdAt: Date | string;
    updatedAt: Date | string;
    code?: string;
}
export default class SharedProtectionPlan {
    private readonly props;
    constructor(props: SharedProtectionPlanProps);
    get id(): string;
    get tenantId(): string | undefined;
    get creatorMemberId(): string | undefined;
    get type(): 'BACKUP' | 'BUSINESS_CONTINUITY';
    get name(): string;
    get description(): string | undefined;
    get privacyMode(): 'PUBLIC' | 'PRIVATE';
    get accessPolicy(): ProtectionPlanAccessPolicy;
    get mergeThreshold(): number;
    get mergeCount(): number;
    get minimumApprovals(): number | undefined;
    get moderators(): SharedPlanModerator[] | undefined;
    get authenticationMethods(): SharedPlanAuthenticationMethod[] | undefined;
    get authenticationMode(): AuthenticationMode;
    get approvalMode(): ApprovalMode;
    get authenticationPolicy(): EffectivePlanPolicy<AuthenticationMode> | undefined;
    get approvalModePolicy(): EffectivePlanPolicy<ApprovalMode> | undefined;
    get totalShares(): number;
    get assets(): DataAsset[] | undefined;
    get status(): SharedProtectionPlanStatus;
    get storageLayers(): SharedPlanStorageLayer[] | undefined;
    get assetsMetadata(): any;
    get categoryId(): string | null;
    get createdAt(): Date;
    get code(): string | undefined;
    get withCustodian(): boolean;
    get masterKeyEncrypted(): boolean;
    get triggers(): SharedPlanDmsTriggerProps[] | undefined;
    get isDraft(): boolean;
    get isPrivate(): boolean;
    get requiresAuthentication(): boolean;
    get isModerated(): boolean;
    get accessType(): SharedProtectionPlanAccessType;
    get hasDirectAccess(): boolean;
    static create(props: Omit<SharedProtectionPlanProps, "shares" | "status" | "mergeCount">): SharedProtectionPlan;
    withAssetsMetadata(assetsMetadata: any): SharedProtectionPlan;
    toPrimitives(): SharedProtectionPlanPrimitiveProps;
    static fromPrimitives(raw: SharedProtectionPlanPrimitiveProps): SharedProtectionPlan;
}
