import type { PulledEntries } from '../../client/management/types';
import type { LocalEntry } from '../content/reader';
import { type EntryBaseSnapshotTarget } from './entrySnapshots';
import { type EntryMergeDecision } from './entryMerge';
export type EntryMergePushScope = Readonly<{
    kind: 'all_entries';
}> | Readonly<{
    kind: 'content_type';
    contentType: string;
}> | Readonly<{
    kind: 'single_entry';
    contentType: string;
    identifier: string;
}>;
export type RemoteEntryMergePlan = Readonly<{
    scope: EntryMergePushScope;
    decisions: readonly EntryMergeDecision[];
    summary: RemoteEntryMergePlanSummary;
}>;
export type RemoteEntryMergePlanSummary = Readonly<{
    unchanged: number;
    bootstrapBase: number;
    preserveRemote: number;
    applyLocalCreate: number;
    applyLocalUpdate: number;
    applyLocalDelete: number;
    autoMerge: number;
    conflicts: number;
}>;
export type RemoteEntryMergePlanInput = Readonly<{
    contentDir: string;
    target: EntryBaseSnapshotTarget;
    scope: EntryMergePushScope;
    localEntries: ReadonlyMap<string, readonly LocalEntry[]>;
    remoteEntries: RemoteEntriesByType;
}>;
export type RemoteEntriesByType = ReadonlyMap<string, ReadonlyArray<PulledEntries['entries'][number]>>;
export declare function buildRemoteEntryMergePlan(input: RemoteEntryMergePlanInput): Promise<RemoteEntryMergePlan>;
export declare function summarizeEntryMergeDecisions(decisions: readonly EntryMergeDecision[]): RemoteEntryMergePlanSummary;
export declare function entryMergePushScope(input: Readonly<{
    contentType?: string;
    identifier?: string;
}>): EntryMergePushScope;
export declare function remotePulledEntriesByType(entries: Readonly<Record<string, PulledEntries['entries']>>): RemoteEntriesByType;
export declare function pulledEntriesToRemoteByType(contentType: string, entries: PulledEntries['entries']): RemoteEntriesByType;
