import { type Result, type SiteId } from '../../../../core/src/index';
import type { ManagementClient } from '../../client/management/types';
import type { LocalCourse, LocalEvent, LocalEventCategory, LocalVenue } from '../content/reader';
import type { EnvTarget } from '../helpers';
import type { PushScopeResult } from '../commands/push/scopes/types';
import { type CliCommandCompileBatchSuccessWithReports, type CliCommandValidationCompileError } from './commandRuntime';
export type CliDatedOfferingCommandBatchSource = 'push_venues' | 'push_event_categories' | 'push_events' | 'push_courses' | 'push_all_dated_offerings';
export type DatedOfferingSiteCommandType = 'upsertVenue' | 'deleteVenue' | 'upsertEventCategory' | 'deleteEventCategory' | 'upsertEventSeries' | 'deleteEventSeries' | 'upsertCourse' | 'deleteCourse';
type DatedOfferingCounter = 'created' | 'updated' | 'deleted';
export type DatedOfferingReportSubject = Readonly<{
    scopeCommand: 'venues' | 'event-categories' | 'events' | 'courses';
    scopeName: string;
    itemLabelSingular: string;
    identifier: string;
    counter: DatedOfferingCounter;
}>;
export type CliDatedOfferingCommandCompileError = Readonly<{
    code: 'unsupported_local_shape';
    identifier: string;
    message: string;
}> | CliCommandValidationCompileError;
export type CliDatedOfferingCommandCompileInput = Readonly<{
    source: CliDatedOfferingCommandBatchSource;
    siteId: SiteId;
    targetEnv: EnvTarget;
    venues?: DatedOfferingUpsertInput<LocalVenue>;
    eventCategories?: DatedOfferingUpsertInput<LocalEventCategory>;
    events?: DatedOfferingUpsertInput<LocalEvent>;
    courses?: DatedOfferingUpsertInput<LocalCourse>;
    delete?: DatedOfferingDeleteInput;
}>;
export type DatedOfferingUpsertInput<TItem> = Readonly<{
    items: readonly DatedOfferingUpsertItem<TItem>[];
}>;
export type DatedOfferingUpsertItem<TItem> = Readonly<{
    item: TItem;
    exists: boolean;
}>;
export type DatedOfferingDeleteInput = Readonly<{
    venues?: readonly string[];
    eventCategories?: readonly string[];
    events?: readonly string[];
    courses?: readonly string[];
}>;
export type CliDatedOfferingCommandCompileSuccess = CliCommandCompileBatchSuccessWithReports<DatedOfferingSiteCommandType, DatedOfferingReportSubject>;
export declare const datedOfferingSiteCommandTypes: readonly ["upsertVenue", "deleteVenue", "upsertEventCategory", "deleteEventCategory", "upsertEventSeries", "deleteEventSeries", "upsertCourse", "deleteCourse"];
export declare function compileDatedOfferingPushCommands(input: CliDatedOfferingCommandCompileInput): Result<CliDatedOfferingCommandCompileSuccess, CliDatedOfferingCommandCompileError>;
export declare function executeDatedOfferingCommandPlanAsPushScopeResult(input: Readonly<{
    client: Pick<ManagementClient, 'venues' | 'eventCategories' | 'events' | 'courses'>;
    compiledPlan: CliDatedOfferingCommandCompileSuccess;
    scopeCommand: DatedOfferingReportSubject['scopeCommand'];
    scopeName: string;
}>): Promise<PushScopeResult>;
export declare function syncResultForDatedOfferingCommandCompileError(error: CliDatedOfferingCommandCompileError, scopeCommand: DatedOfferingReportSubject['scopeCommand'], scopeName: string): PushScopeResult;
export declare function courseSessionConflictMessage(error: unknown): string;
export {};
