import { DataAsset } from '../../../../../core/modules/data-assets';
/**
 * Props used to create a new protection plan.
 */
export interface ProtectionPlanInput {
    /**
     * Optional ID for the plan. Usually used for updates or internal references.
     */
    id?: string;
    /**
     * Plan type
     */
    type: 'BACKUP' | 'INHERITANCE';
    /**
     * Optional code to identify the plan in a human-readable way.
     */
    code?: string;
    /**
     * Details such as the plan title and description.
     */
    details: PlanDetailsInput;
    /**
     * Plan owner
     */
    owner?: PlanOwnerInput;
    /**
     * List of beneficiaries with their storage and identity information.
     */
    beneficiaries: PlanBeneficiaryInput[];
    /**
     * Configuration for how shares are distributed and recovered.
     */
    sharesConfiguration: PlanSharesConfigurationInput;
    /**
     * Configuration for storage options including blockchain and verification methods.
     */
    storageConfiguration: PlanStorageConfigurationInput;
    /**
     * List of triggers that initiate the plan.
     */
    triggers: PlanTriggerInput[];
    /**
     * Data assets associated with the plan.
     */
    assets: (DataAsset | Omit<DataAsset, "id"> & {
        id?: string;
    })[];
}
export interface PlanOwnerInput {
    id: string;
    firstName: string;
    lastName: string;
    email: string;
}
/**
 * Metadata describing the protection plan.
 */
export interface PlanDetailsInput {
    /**
     * Title of the plan.
     */
    title: string;
    /**
     * Optional public description of the plan.
     */
    description?: string;
    /**
     * Optional private notes, only visible to the plan owner.
     */
    privateNotes?: string;
}
/**
 * Blockchain options for storing plan data.
 */
export type BlockChainStorageOption = 'VECHAIN' | 'ETHEREUM' | 'OPTIMISM' | 'INHERITI_CHAIN';
/**
 * Storage methods for beneficiary shares.
 */
export type BeneficiaryShareStorage = 'SAFEKEY_PRO' | 'SAFEKEY_MOBILE';
/**
 * Verification options for mobile shares.
 */
export type MobileShareVerificationOption = 'INHERITI' | 'MOBILE_E2EE';
/**
 * Base details shared by all beneficiaries.
 */
export interface BaseBeneficiaryDetails {
    id?: string;
    firstName: string;
    lastName: string;
    code?: string;
}
/**
 * SAFEKEY_PRO beneficiary with optional email.
 */
export interface SafeKeyProBeneficiary extends BaseBeneficiaryDetails {
    email?: string;
}
/**
 * SAFEKEY_MOBILE beneficiary with required email.
 */
export interface SafeKeyMobileBeneficiary extends BaseBeneficiaryDetails {
    email: string;
}
/**
 * Base input for all plan beneficiaries.
 */
interface BasePlanBeneficiaryInput {
    /**
     * Whether this beneficiary is a merge authority.
     */
    isMergeAuthority: boolean;
}
/**
 * Beneficiary input for the plan, which includes either SAFEKEY_PRO or SAFEKEY_MOBILE options.
 */
export type PlanBeneficiaryInput = (BasePlanBeneficiaryInput & {
    storage: 'SAFEKEY_PRO';
    details: SafeKeyProBeneficiary;
}) | (BasePlanBeneficiaryInput & {
    storage: 'SAFEKEY_MOBILE';
    details: SafeKeyMobileBeneficiary;
});
/**
 * Countdown timer configuration for a trigger.
 */
interface TriggerCountdown {
    days: number;
    hours: number;
    minutes: number;
}
/**
 * Email-based trigger settings.
 */
type EmailTrigger = {
    id: 'LOGIN' | 'CLICK_LINK';
    countdown: TriggerCountdown;
    settings: {
        email: string;
    };
};
/**
 * Phone-based trigger settings.
 */
type PhoneTrigger = {
    id: 'SMS' | 'PHONE_CALL';
    countdown: TriggerCountdown;
    settings: {
        phone: string;
    };
};
export type MainStorage = BlockChainStorageOption | 'HSM' | "VAULT";
/**
 * Union of all supported trigger types.
 */
export type PlanTriggerInput = EmailTrigger | PhoneTrigger;
/**
 * Configuration for where and how plan data is stored.
 */
export interface PlanStorageConfigurationInput {
    /**
     * Option for the protection plan to store validator & recovery shares
     */
    option: MainStorage;
    /**
     * Method to verify shares stored in Safekey Mobile App
     */
    mobileShareVerification?: MobileShareVerificationOption;
}
/**
 * Configuration for how many shares are created and how many are needed to merge.
 */
export interface PlanSharesConfigurationInput {
    /**
     * Recovery shares to overpass missing shares
     */
    recoverySharesAmount: number;
    /**
     * Min amount of shares needed to open the plan
     */
    mergeThreshold: number;
}
export {};
