import { type Result, type SiteId } from '../../../../core/src/index';
import { type SiteCommandOf } from '../../../../site-commands/src/index';
import type { ManagementClient } from '../../client/management/types';
import type { LocalContent } from '../content/reader';
import type { EnvTarget } from '../helpers';
import type { NavigationDiff } from '../sync/diff';
import type { SyncResult } from '../sync';
import { type CliNavigationMenuName } from './commandKeys';
import { type CliCommandCompileBatchSuccessWithReports, type CliCommandExecutionError, type CliCommandExecutionReport, type CliCommandExecutionResult, type CliCommandValidationCompileError } from './commandRuntime';
export type CliNavigationCommandBatchSource = 'push_navigation';
export type CliNavigationCommandCompileError = Readonly<{
    code: 'missing_local_navigation_menu';
    name: CliNavigationMenuName;
    message: string;
}> | CliCommandValidationCompileError;
export type CliNavigationCommandCompileInput = Readonly<{
    source: CliNavigationCommandBatchSource;
    siteId: SiteId;
    targetEnv: EnvTarget;
    diff: readonly NavigationDiff[];
    local: Pick<LocalContent, 'navigation'>;
}>;
export type CliNavigationCommandCompileSuccess = CliCommandCompileBatchSuccessWithReports<NavigationSiteCommandType, NavigationCommandReportSubject>;
export type CliNavigationCommandExecutionError = CliCommandExecutionError<NavigationSiteCommandType>;
export type CliNavigationCommandExecutionResult = CliCommandExecutionResult<NavigationSiteCommandType>;
export type NavigationSiteCommandType = 'upsertNavigationMenu';
export type NavigationSiteCommand = SiteCommandOf<NavigationSiteCommandType>;
export type NavigationSiteCommandPlan = CliNavigationCommandCompileSuccess['plan'];
export declare const navigationSiteCommandTypes: readonly ["upsertNavigationMenu"];
export type NavigationCommandSyncCounter = 'created' | 'updated';
export type NavigationCommandReportSubject = Readonly<{
    name: CliNavigationMenuName;
    counter: NavigationCommandSyncCounter;
}>;
export type NavigationCommandExecutionReport = CliCommandExecutionReport<NavigationCommandReportSubject>;
type NavigationCommandCompiledPlan = Pick<CliNavigationCommandCompileSuccess, 'plan' | 'reportedCommands'>;
export declare function compileNavigationPushCommands(input: CliNavigationCommandCompileInput): Result<CliNavigationCommandCompileSuccess, CliNavigationCommandCompileError>;
export declare function executeNavigationCommandPlan(input: Readonly<{
    client: Pick<ManagementClient, 'navigation'>;
    plan: Pick<NavigationSiteCommandPlan, 'commands'>;
}>): Promise<CliNavigationCommandExecutionResult>;
export declare function executeNavigationCommandPlanAsReport(input: Readonly<{
    client: Pick<ManagementClient, 'navigation'>;
    compiledPlan: NavigationCommandCompiledPlan;
    onBeforeExecute?: (commandCount: number) => void;
}>): Promise<NavigationCommandExecutionReport>;
export declare function navigationCommandCompileErrorToReport(error: CliNavigationCommandCompileError): NavigationCommandExecutionReport;
export declare function navigationCommandExecutionToReport(input: Readonly<{
    execution: CliNavigationCommandExecutionResult;
    compiledPlan: NavigationCommandCompiledPlan;
}>): NavigationCommandExecutionReport;
export declare function navigationCommandReportToSyncResult(report: NavigationCommandExecutionReport): SyncResult;
export {};
