import { ShareStatus, ShareType } from '../../../protection-plan/domain/models/plan-share';
import PersonalProtectionPlan, { ProtectionPlanStatus } from '../../../protection-plan/domain/models/personal-protection-plan';
import { MergeTriggerStatus, TriggerStatus, TriggerType } from '../../../protection-plan/domain/models/trigger';
import { BlockChainStorageOption, PlanStorageOption } from '../../../protection-plan/domain/models/storage-option';
import { OnlyOne } from "../../../../../core/modules/_shared/infrastructure/typescript/utils";
export interface PlanTriggerView {
    id: TriggerType;
    countdown?: {
        days: number;
        hours: number;
        minutes: number;
        seconds?: number;
    };
    settings?: {
        email?: string;
        phone?: string;
    };
    status: TriggerStatus | MergeTriggerStatus;
}
export type PlanBeneficiaryRelationView = 'WIFE' | 'HUSBAND' | 'SPOUSE' | 'CHILD' | 'GRANDCHILD' | 'PARENT' | 'GRANDPARENT' | 'FAMILY_MEMBER' | 'FRIEND' | 'BUSINESS_PARTNER' | 'COLLEAGUE' | 'LAWYER' | 'NOTARY' | 'TRUSTEE' | 'EXECUTOR' | 'OTHER';
export interface PlanBeneficiaryView {
    id: string;
    firstName: string;
    lastName?: string;
    email?: string;
    code?: string;
    relation?: PlanBeneficiaryRelationView;
    profilePictureUrl?: string;
}
export interface ShareholderView {
    id: string;
    beneficiary: PlanBeneficiaryView;
    storage: PlanStorageOption;
    deviceId?: string;
    isMergeAuthority: boolean;
    isOwner?: boolean;
}
export interface PlanShareView {
    id: string;
    shareholder?: ShareholderView;
    identifiers: string[];
    type: ShareType;
    storage: PlanStorageOption;
    status: ShareStatus;
    claimedAt?: Date;
    verifiedAt?: Date;
    mobileShareVerification?: string;
}
export interface PlanStorageLayer {
    id: string;
    name: string;
}
/**
 * Summary representation of a protection plan
 *
 */
export interface ProtectionPlanSummaryProps {
    id: string;
    code: string;
    mergeThreshold: number;
    owner: {
        id: string;
        firstName: string;
        lastName: string;
        profilePictureUrl?: string;
    };
    details: {
        name: string;
        description?: string;
        privateNotes?: string;
    };
    shares: PlanShareView[];
    status: ProtectionPlanStatus;
    triggers: PlanTriggerView[];
    contractAddress?: string;
    storage?: BlockChainStorageOption | 'HSM';
    network?: 'TESTNET' | 'MAINNET';
    createdAt: Date;
    configuredAt?: Date;
    lastReleasedAt?: Date;
    mergeCount: number;
    type: 'BACKUP' | 'INHERITANCE';
    beneficiaries: PlanBeneficiaryView[];
    storageLayers: PlanStorageLayer[];
}
type BeneficiaryShare = Omit<PlanShareView, 'shareholder'> & {
    shareholder: Omit<ShareholderView, 'beneficiary'> & {
        beneficiary: PlanBeneficiaryView;
    };
};
export interface ProtectionPlanSummaryPrimitiveProps extends Omit<ProtectionPlanSummaryProps, 'type'> {
    type: string;
}
/**
 * Class that represents a protection plan summary.
 *
 */
export declare class ProtectionPlanSummary {
    private props;
    /** @ignore */
    constructor(props: ProtectionPlanSummaryProps);
    /**
     * Unique identifier of the protection plan.
     */
    get id(): string;
    /**
     * Type
     */
    get type(): "BACKUP" | "INHERITANCE";
    /**
     * Type
     */
    get isConfigured(): boolean;
    get isProtected(): boolean;
    get canConfigurePlan(): boolean;
    get canMergePlan(): boolean;
    /**
     * Status
     */
    get status(): ProtectionPlanStatus;
    /**
     * Merge threshold
     */
    get mergeThreshold(): number;
    /**
     * Storage layers
     */
    get storageLayers(): PlanStorageLayer[];
    /**
     * Human-readable code associated with the plan.
     */
    get code(): string;
    /**
     * Plan owner details.
     */
    get owner(): {
        id: string;
        firstName: string;
        lastName: string;
        profilePictureUrl?: string;
    };
    /**
     * Details describing the plan (e.g., name, description).
     */
    get details(): {
        name: string;
        description?: string;
        privateNotes?: string;
    };
    /**
     * Share allocations defined in the plan.
     */
    get shares(): PlanShareView[];
    /**
     * Storage type
     */
    get storageType(): "VAULT" | "HSM" | "BLOCKCHAIN";
    /**
     * Beneficiary shares
     */
    get beneficiaryShares(): BeneficiaryShare[];
    /**
     * Conditions or events that trigger the plan execution.
     */
    get triggers(): PlanTriggerView[];
    /**
     * On-chain contract address where the plan is deployed (if any).
     */
    get contractAddress(): string | undefined;
    /**
     * Main storage
     */
    get storage(): "HSM" | BlockChainStorageOption | undefined;
    /**
     * Recovery shares amount
     */
    get recoverySharesAmount(): number;
    /**
     * Merge Authority beneficiaries
     */
    get mergeAuthorityBeneficiaries(): BeneficiaryShare[];
    /**
     * Network
     */
    get network(): "TESTNET" | "MAINNET" | undefined;
    /**
     * Date when the plan was created.
     */
    get createdAt(): Date;
    /**
     * Fully-resolved list of beneficiaries involved in the plan.
     */
    get beneficiaries(): PlanBeneficiaryView[];
    get validatorSharesCount(): number;
    get mobileSharesCount(): number;
    get coldSharesCount(): number;
    get recoverySharesCount(): number;
    /** @ignore */
    static fromPrimitives(props: ProtectionPlanSummaryPrimitiveProps): ProtectionPlanSummary;
    /** @ignore */
    static fromProtectionPlan(plan: PersonalProtectionPlan): ProtectionPlanSummary;
    private static mapShareholder;
    private static mapBeneficiary;
    /**
     * Return class object to pure JSON
     */
    toPrimitives(): ProtectionPlanSummaryPrimitiveProps;
    findShareByDeviceId(deviceId: string): PlanShareView | undefined;
    findShareByBeneficiaryEmail(email: string): PlanShareView | undefined;
    isUserMergeAuthority(email: string): boolean | undefined;
    findBeneficiaryBy(beneficiary: OnlyOne<{
        id: string;
        email: string;
        code: string;
    }>): PlanBeneficiaryView | undefined;
    findShareholderBy(beneficiary: OnlyOne<{
        id: string;
        email: string;
        code: string;
    }>): (Omit<ShareholderView, "beneficiary"> & {
        beneficiary: PlanBeneficiaryView;
    }) | undefined;
}
export {};
