import type { SiteId } from '../../../../../../core/src/index';
import { type CliDatedOfferingCommandBatchSource, type CliDatedOfferingCommandCompileInput, type DatedOfferingReportSubject, type DatedOfferingUpsertItem } from '../../../site-commands';
import type { WriterOptions } from '../../../content/writer';
import type { PushScopeResult, ScopePushContext } from './types';
type CommandBackedDatedOfferingScopeConfig<TLocal, TRemote> = Readonly<{
    source: CliDatedOfferingCommandBatchSource;
    scopeName: string;
    itemLabelSingular: string;
    scopeCommand: DatedOfferingReportSubject['scopeCommand'];
    getIdentifier: (item: TLocal) => string;
    getDisplayLabel: (item: TLocal) => string;
    shouldPushItem?: (item: TLocal) => boolean;
    readLocal: (contentDir: string) => Promise<TLocal[]>;
    readMeta: (contentDir: string) => Promise<Record<string, {
        updatedAt?: string;
    }> | null>;
    fetchRemote: () => Promise<TRemote[]>;
    getRemoteUpdatedAt: (remote: TRemote) => string;
    findRemote: (remoteItems: readonly TRemote[], identifier: string) => TRemote | undefined;
    getRemoteIdentifier: (remote: TRemote) => string;
    updateLocalMeta: (contentDir: string, options?: WriterOptions) => Promise<void>;
    readOnlyStatusWarning?: (item: TLocal) => string | null;
    buildCompileInput: (input: Readonly<{
        source: CliDatedOfferingCommandBatchSource;
        siteId: SiteId;
        targetEnv: ScopePushContext['targetEnv'];
        upserts: readonly DatedOfferingUpsertItem<TLocal>[];
        deletes: readonly string[];
    }>) => CliDatedOfferingCommandCompileInput;
}>;
export declare function pushCommandBackedDatedOfferingScope<TLocal, TRemote>(ctx: ScopePushContext, config: CommandBackedDatedOfferingScopeConfig<TLocal, TRemote>): Promise<PushScopeResult>;
export {};
