import PlanShare, { PlanSharePrimitiveProps, ShareCreationStatus, ShareType } from '../../../protection-plan/domain/models/plan-share';
import ProtectionPlanPassphrase, { ProtectionPlanPassphrasePrimitiveProps, ProtectionPlanPassphraseProps } from '../../../protection-plan/domain/models/protection-plan-passphrase';
import Shareholder, { ShareholderPrimitiveProps } from "../../../protection-plan/domain/models/shareholder";
import Trigger, { TriggerPrimitiveProps } from '../../../protection-plan/domain/models/trigger';
import PersonalProtectionPlanView from '../../../protection-plan/domain/models/personal-protection-plan-view';
import { OnlyOne } from "../../../../../core/modules/_shared/infrastructure/typescript/utils";
export type ProtectionPlanStatus = 'PROTECTED' | 'DRAFT' | 'FAILED' | 'PENDING_SHARES' | 'MERGING_INITIALIZED' | 'MERGING_IN_PROGRESS' | 'SHARES_MERGED' | 'DATA_RELEASED';
export interface PlanPrivateKeys {
    validator?: string;
    backup?: string;
}
export interface PlanActiveMergeProcess {
    id: string;
    initializedAt?: Date;
    expiresAt?: Date;
}
export interface ProtectionPlanProps {
    id: string;
    code: string;
    contractAddress?: string;
    network?: string;
    passphrase?: ProtectionPlanPassphrase;
    privateKeys?: PlanPrivateKeys;
    owner: {
        id: string;
        firstName: string;
        lastName: string;
        profilePicture?: string;
    };
    details: {
        name: string;
        description?: string;
        privateNotes?: string;
    };
    mergeThreshold: number;
    encryptedData?: string;
    status: ProtectionPlanStatus;
    triggers: Trigger[];
    shares: PlanShare[];
    isDraft: boolean;
    createdAt: Date;
    type: 'BACKUP' | 'INHERITANCE';
    paidAt?: Date;
    activeMergeProcess?: PlanActiveMergeProcess;
    assetsMetadata: any;
    assetsConfig?: string;
    lastReleasedAt?: Date;
    mergeCount: number;
    lastReleaseRequest?: Date;
    isFree?: boolean;
    configuredAt?: Date;
    shareholders: Shareholder[];
    legacy?: any;
}
export interface ProtectionPlanPrimitiveProps extends Omit<ProtectionPlanProps, 'passphrase' | 'shares' | 'triggers' | "shareholders"> {
    shares: PlanSharePrimitiveProps[];
    triggers: TriggerPrimitiveProps[];
    passphrase?: ProtectionPlanPassphrasePrimitiveProps;
    shareholders: ShareholderPrimitiveProps[];
}
export declare const MAX_ADDITIONAL_PLAN_BENEFICIARIES = 9;
export default class PersonalProtectionPlan {
    protected props: ProtectionPlanProps;
    constructor(props: ProtectionPlanProps);
    get isConfigured(): boolean;
    get isBlockchain(): boolean;
    get assetsConfig(): string | undefined;
    get id(): string;
    get isFree(): boolean | undefined;
    get isTestNet(): boolean;
    get encryptedData(): string | undefined;
    get isReleased(): boolean;
    get remainingSecondsForClose(): number | undefined;
    get timeoutMinutesForClose(): number;
    get mergeExpiresAt(): Date | undefined;
    get details(): {
        name: string;
        description?: string;
        privateNotes?: string;
    };
    get name(): string;
    get network(): string | undefined;
    get code(): string;
    get status(): ProtectionPlanStatus;
    get isInMergeProcess(): boolean;
    get isDraft(): boolean;
    get isPendingShares(): boolean;
    get description(): string | undefined;
    get createdAt(): Date;
    get triggers(): Trigger[];
    get pendingTrigger(): Trigger | undefined;
    get unresolvedTrigger(): Trigger | undefined;
    get backupSharesAmount(): number;
    get mobileSharesAmount(): number;
    get coldSharesAmount(): number;
    get mobileShares(): PlanShare[];
    get coldShares(): PlanShare[];
    get planMainStorage(): import("../../../protection-plan/domain/models/storage-option").PlanStorageOption;
    get planMainChain(): import("../../../protection-plan/domain/models/storage-option").PlanStorageOption;
    get validatorShares(): PlanShare[];
    get backupShares(): PlanShare[];
    get beneficiaryShares(): PlanShare[];
    get shares(): PlanShare[];
    get ownerId(): string;
    get owner(): {
        fullName: string;
        id: string;
        firstName: string;
        lastName: string;
        profilePicture?: string;
    };
    get mergeThreshold(): number;
    get isBackupPlan(): boolean;
    get type(): "BACKUP" | "INHERITANCE";
    get contractAddress(): string | undefined;
    get hasDataReleased(): boolean;
    get privateKeys(): PlanPrivateKeys | undefined;
    get isProtected(): boolean;
    get mergeCount(): number;
    get lastReleasedAt(): Date | undefined;
    get isLegacy(): boolean;
    get storageLayers(): {
        id: import("../../../protection-plan/domain/models/storage-option").PlanStorageOption;
        name: string;
    }[];
    get requiresMobileEndToEndEncryption(): boolean;
    get lastReleaseRequest(): Date | undefined;
    get privateNotes(): string | undefined;
    get shareholders(): Shareholder[];
    toView(): PersonalProtectionPlanView;
    static fromPrimitives(props: ProtectionPlanPrimitiveProps): PersonalProtectionPlan;
    findShareholderByDeviceId(deviceId: string): Shareholder | undefined;
    findShareholderByCriteria(beneficiary: OnlyOne<{
        id: string;
        email: string;
        code: string;
        deviceId: string;
    }>): Shareholder | undefined;
    markAsPendingShares(): void;
    markAsProtected(): void;
    isMergeAuthority(id: string): boolean;
    findBeneficiaryShare(id: string): PlanShare | undefined;
    findShareByDeviceId(deviceId: string): PlanShare | undefined;
    updateColdShare(share: PlanShare): void;
    updateMobileShare(share: PlanShare): void;
    setContractAddress(address: string): void;
    toPrimitives(): ProtectionPlanPrimitiveProps;
    findShare(shareId: string): PlanShare | undefined;
    updatePlanPassphrase(passphrase: ProtectionPlanPassphraseProps): void;
    updatePrivateKeys(keys: PlanPrivateKeys): void;
    setHexData(data: any): void;
    private matchesShareType;
    updateSharesCreationStatus(type: ShareType | 'COLD' | 'MOBILE', status: ShareCreationStatus, shareId?: string): void;
    updateShareDeviceInfo(shareId: string, data: {
        deviceId: string;
        devicePassword?: string;
    }): void;
    updateSharesAddresses(type: ShareType | 'COLD' | 'MOBILE', shares: {
        [p: string]: string[];
    }): void;
}
