import { DataAsset } from '../../../../../../core/modules/data-assets';
import { MergeTriggerStatus, TriggerStatus } from '../../../../protection-plan/domain/models/trigger';
import PersonalProtectionPlan from '../../../../protection-plan/domain/models/personal-protection-plan';
import MergingProcess from '../../../../protection-plan/domain/models/merging-process/merging-process';
type MainTriggerStatus = TriggerStatus & MergeTriggerStatus;
type ShareType = 'VALIDATOR' | 'COLD' | 'MOBILE' | 'BACKUP';
export type MergeStatus = 'NOT_STARTED' | 'ACTIVATE_TRIGGERS' | 'COLLECT_COLD_SHARES' | 'COLLECT_VALIDATOR_SHARE' | 'COLLECT_MOBILE_PLAN_SHARES' | 'COLLECT_MA_PLAN_SHARES' | 'AVAILABLE_TO_REVEAL' | 'REVEALING_DATA' | 'REVEALED' | 'FINISHED';
export interface MergeProcessBuildState {
    /** Whether the cold-share collection sub-process is currently active */
    coldSharesInProgress?: boolean;
    /** Error from the last failed step */
    stepError?: any;
    /** Whether the data reveal is in progress */
    revealing?: boolean;
    /** Revealed plan data (set after RevealPlanDataUseCase succeeds) */
    planData?: DataAsset[] | null;
    /** True when auto-reveal is disabled and reveal is ready but not yet triggered */
    isAvailableToReveal?: boolean;
    /** Remaining seconds before the revealed data window closes */
    remainingTime?: number;
    /** Minutes configured for the data-release window */
    timeoutMinutesForClose?: number;
}
export interface PlanMergeProcessViewProps {
    plan?: {
        id: string;
        type: string;
    };
    processId?: string;
    planRevealInfo?: {
        isReleased: boolean;
        remainingSecondsForClose?: number;
        timeoutMinutesForClose?: number;
    };
    shares: {
        id: string;
        status: 'WAITING' | 'COLLECTING' | 'COLLECTED' | 'RELEASED';
        type: ShareType;
        shareholder: {
            isMergeAuthority: boolean;
            details: {
                firstName: string | undefined;
                lastName: string | undefined;
                types: any[];
                id: string;
                email: string | undefined;
            };
            type: ShareType;
        } | undefined;
    }[];
    revealedData: {
        secret: DataAsset[];
        timeoutMinutesForClose: number | undefined;
        remainingTime: number;
    } | undefined;
    triggers: {
        countdown: {
            days: number;
            hours: number;
            minutes: number;
            seconds: number;
        } | undefined;
        startedAt: Date | undefined;
        id: 'LOGIN' | 'CLICK_LINK' | 'SAFEKEY_2FA' | 'SMS' | 'PHONE_CALL';
        requiresVerification: boolean;
        status: MainTriggerStatus;
        expiresAt: Date | undefined;
        target: string;
    }[];
    steps: {
        id: string;
        status: 'IN_PROCESS' | 'COMPLETE' | 'INCOMPLETE' | 'ERROR';
        errorMessage?: string;
    }[];
    status: MergeStatus;
}
export declare class PlanMergeProcessView {
    private props;
    constructor(props: PlanMergeProcessViewProps);
    static notStarted(): PlanMergeProcessView;
    static build(plan?: PersonalProtectionPlan, process?: MergingProcess, state?: MergeProcessBuildState): PlanMergeProcessView;
    /**
     * Returns a new view with runtime state overlaid on top of the fetched data.
     * Call this in the hook to apply ephemeral state (errors, revealing, cold shares, etc.)
     * without re-fetching from the server.
     */
    withState(state: MergeProcessBuildState): PlanMergeProcessView;
    get steps(): {
        id: string;
        status: "IN_PROCESS" | "COMPLETE" | "INCOMPLETE" | "ERROR";
        errorMessage?: string;
    }[];
    get planId(): string | undefined;
    get processId(): string | undefined;
    get planRevealInfo(): {
        isReleased: boolean;
        remainingSecondsForClose?: number;
        timeoutMinutesForClose?: number;
    } | undefined;
    get planType(): string | undefined;
    get isFinished(): boolean;
    get activeStepId(): string | undefined;
    get status(): MergeStatus;
    get mergeAuthorityShareStorageType(): "COLD" | "MOBILE";
    get completeProgress(): number;
    get completedSteps(): {
        id: string;
        status: "IN_PROCESS" | "COMPLETE" | "INCOMPLETE" | "ERROR";
        errorMessage?: string;
    }[];
    get isDenied(): boolean;
    get isExpired(): boolean;
    get triggers(): {
        countdown: {
            days: number;
            hours: number;
            minutes: number;
            seconds: number;
        } | undefined;
        startedAt: Date | undefined;
        id: "LOGIN" | "CLICK_LINK" | "SAFEKEY_2FA" | "SMS" | "PHONE_CALL";
        requiresVerification: boolean;
        status: MainTriggerStatus;
        expiresAt: Date | undefined;
        target: string;
    }[];
    get pendingTrigger(): {
        countdown: {
            days: number;
            hours: number;
            minutes: number;
            seconds: number;
        } | undefined;
        startedAt: Date | undefined;
        id: "LOGIN" | "CLICK_LINK" | "SAFEKEY_2FA" | "SMS" | "PHONE_CALL";
        requiresVerification: boolean;
        status: MainTriggerStatus;
        expiresAt: Date | undefined;
        target: string;
    } | undefined;
    get isStarted(): boolean;
    get isCompleted(): boolean;
    get dataRevealed(): boolean;
    get hasPendingTrigger(): boolean;
    get revealedSecretData(): DataAsset[] | undefined;
    get remainingTimeForClose(): number | undefined;
    get timeoutMinutesForClose(): number | undefined;
    get pendingShare(): {
        id: string;
        status: "WAITING" | "COLLECTING" | "COLLECTED" | "RELEASED";
        type: ShareType;
        shareholder: {
            isMergeAuthority: boolean;
            details: {
                firstName: string | undefined;
                lastName: string | undefined;
                types: any[];
                id: string;
                email: string | undefined;
            };
            type: ShareType;
        } | undefined;
    } | undefined;
    get pendingBeneficiary(): {
        firstName: string | undefined;
        lastName: string | undefined;
        types: any[];
        id: string;
        email: string | undefined;
    } | undefined;
    get mobileShares(): {
        id: string;
        status: "WAITING" | "COLLECTING" | "COLLECTED" | "RELEASED";
        type: ShareType;
        shareholder: {
            isMergeAuthority: boolean;
            details: {
                firstName: string | undefined;
                lastName: string | undefined;
                types: any[];
                id: string;
                email: string | undefined;
            };
            type: ShareType;
        } | undefined;
    }[];
    get coldShares(): {
        id: string;
        status: "WAITING" | "COLLECTING" | "COLLECTED" | "RELEASED";
        type: ShareType;
        shareholder: {
            isMergeAuthority: boolean;
            details: {
                firstName: string | undefined;
                lastName: string | undefined;
                types: any[];
                id: string;
                email: string | undefined;
            };
            type: ShareType;
        } | undefined;
    }[];
    get beneficiariesShares(): {
        id: string;
        status: "WAITING" | "COLLECTING" | "COLLECTED" | "RELEASED";
        type: ShareType;
        shareholder: {
            isMergeAuthority: boolean;
            details: {
                firstName: string | undefined;
                lastName: string | undefined;
                types: any[];
                id: string;
                email: string | undefined;
            };
            type: ShareType;
        } | undefined;
    }[];
    get mergeAuthorityShare(): {
        id: string;
        status: "WAITING" | "COLLECTING" | "COLLECTED" | "RELEASED";
        type: ShareType;
        shareholder: {
            isMergeAuthority: boolean;
            details: {
                firstName: string | undefined;
                lastName: string | undefined;
                types: any[];
                id: string;
                email: string | undefined;
            };
            type: ShareType;
        } | undefined;
    } | undefined;
    toPrimitives(): PlanMergeProcessViewProps;
}
export {};
