import type { User } from '@n8n/db';
import type { PackageWriter } from '../../io/package-writer';
import type { VariableConflictPolicy, VariableMissingMode } from '../../n8n-packages.types';
import type { ManifestEntry } from '../../spec/manifest.schema';
import type { PackageVariableRequirement } from '../../spec/requirements.schema';
export interface WorkflowVariableRequirement {
    workflowId: string;
    variableName: string;
}
export interface VariableExportRequest {
    user: User;
    requirements: WorkflowVariableRequirement[];
    writer: PackageWriter;
    includeVariableValues: boolean;
    projectTargetsById?: Map<string, string>;
}
export interface VariableExportResult {
    entries: ManifestEntry[];
    requirements: PackageVariableRequirement[];
}
export type PlacedVariableRequirement = PackageVariableRequirement & {
    globalPlacement: boolean;
    packageValue?: string;
};
export interface VariableImportRequest {
    requirements: PlacedVariableRequirement[] | undefined;
    missingMode: VariableMissingMode;
    conflictPolicy: VariableConflictPolicy;
}
export interface VariableResolutionFailure {
    name: string;
    usedByWorkflows: string[];
}
export interface VariableCreation {
    name: string;
    projectId?: string;
    value?: string;
    usedByWorkflows: string[];
}
export interface VariableConflict {
    name: string;
    projectId?: string;
    usedByWorkflows: string[];
}
export interface VariableOverwrite {
    variableId: string;
    name: string;
    projectId?: string;
    value: string;
    usedByWorkflows: string[];
}
export interface VariableLimitFailure {
    limit: number;
    remaining: number;
    requested: number;
    names: string[];
    usedByWorkflows: string[];
}
export declare function createFailure(requirement: PackageVariableRequirement): VariableResolutionFailure;
export declare function destinationKey(destination: {
    name: string;
    projectId?: string;
}): string;
export declare function dedupeCreationsByDestination(creations: VariableCreation[]): VariableCreation[];
export declare function divergentOverwrites(overwrites: VariableOverwrite[]): VariableConflict[];
export declare function computeVariableLimitFailure(creations: VariableCreation[], quota: {
    limit: number;
    remaining: number;
} | null): VariableLimitFailure | undefined;
export interface VariableImportPlan {
    matched: string[];
    missing: VariableResolutionFailure[];
    creations: VariableCreation[];
    conflicts: VariableConflict[];
    overwrites: VariableOverwrite[];
}
export interface VariableApplyResult {
    created: string[];
    stubbed: string[];
    skippedExisting: string[];
    updated: string[];
}
