import { ApprovalProcessSnapshot, CollectedShare, DmsStatus, SharedPlanDmsTriggerAction } from '../models/shared-plan-merge-process';
import { SharedPlanDmsTriggerProps } from '../models/shared-plan-dms-trigger';
export interface StartProcessResult {
    approvalProcess: ApprovalProcessSnapshot;
    status?: string;
    dmsStatus?: DmsStatus;
    dmsTriggers?: SharedPlanDmsTriggerProps[];
}
export interface OpenRevealWindowResult {
    revealStartedAt: Date;
    revealEndsAt: Date;
    timeoutMinutesForClose: number;
}
export interface SharedRevealOptions {
    timeoutMinutes: number;
}
export interface CollectSharesResult {
    dataShards: CollectedShare[];
    backupShards: CollectedShare[];
    keyShards: CollectedShare[];
    dek: string;
}
export interface GetAssetsMetadataResult {
    assetsMetadata: any;
}
export interface ActiveProcessSnapshot {
    id: string;
    planId: string;
    status: string;
    requestedAt: string;
    approvalProcess: ApprovalProcessSnapshot;
    revealStartedAt?: string;
    revealEndsAt?: string;
    timeoutMinutesForClose?: number;
    dmsStatus?: DmsStatus;
    dmsTriggers?: SharedPlanDmsTriggerProps[];
    dmsTriggerActions?: SharedPlanDmsTriggerAction[];
}
export interface CustodianShareAccessSnapshot {
    status: 'DISTRIBUTED' | 'CLAIMED' | 'PENDING' | 'INVALID' | 'NOT_FOUND';
    deviceType: string;
    shareId: string;
    distributedAt: string | null;
}
export type MergeAccessIntent = 'VIEW' | 'EDIT';
export interface SharedMergingProcessApiRepository {
    startProcess(planId: string, processId: string, accessIntent?: MergeAccessIntent): Promise<StartProcessResult>;
    getApprovals(processId: string): Promise<ApprovalProcessSnapshot>;
    getAssetsMetadata(processId: string): Promise<GetAssetsMetadataResult>;
    requestApproval(processId: string): Promise<void>;
    notifyApprovalParticipants(processId: string): Promise<void>;
    openRevealWindow(processId: string, options: SharedRevealOptions): Promise<OpenRevealWindowResult>;
    collectShares(processId: string): Promise<CollectSharesResult>;
    abortProcess(processId: string): Promise<void>;
    closePlan(processId: string): Promise<void>;
    markSharesCollected(processId: string): Promise<void>;
    markSharesReconstructed(processId: string): Promise<void>;
    markDataRevealed(processId: string): Promise<void>;
    findActiveByPlanId(planId: string, tenantId: string): Promise<ActiveProcessSnapshot | null>;
    getCustodianShareAccess(processId: string): Promise<CustodianShareAccessSnapshot>;
    getCustodianShareData(processId: string): Promise<{
        id: string;
        shares: string[];
        planId: string;
        isMergeAuthority: boolean;
    }>;
    distributeCustodianShareViaMobile(planId: string): Promise<void>;
    recordCustodianShareClaim(planId: string, shareId: string, deviceId: string, deviceType: 'SK_MOBILE' | 'SK_PRO'): Promise<void>;
    cancelCustodianShareClaim(processId: string): Promise<void>;
    releaseCustodianShareViaMobile(processId: string): Promise<void>;
    markCustodianShareAsCollected(processId: string, shareId: string): Promise<void>;
}
