import { CypherASTNode } from "../CypherASTNode";
import type { CypherEnvironment } from "../Environment";
import type { Expr, Predicate } from "../types";
/** Case statement
 * @group Expressions
 * @see {@link https://neo4j.com/docs/cypher-manual/current/syntax/expressions/#query-syntax-case | Cypher Documentation}
 */
export declare class Case<C extends Expr | undefined = undefined> extends CypherASTNode {
    private readonly comparator;
    private readonly whenClauses;
    private default;
    constructor(comparator?: C);
    when(...exprs: C extends Expr ? Expr[] : [Predicate]): When<C>;
    else(defaultExpr: Expr): this;
    /**
     * @internal
     */
    getCypher(env: CypherEnvironment): string;
}
/**
 * @group Expressions
 */
export declare class When<T extends Expr | undefined> extends CypherASTNode {
    protected parent: Case<T>;
    private readonly predicates;
    private result;
    /** @internal */
    constructor(parent: Case<T>, predicate: Expr[]);
    then(expr: Expr): Case<T>;
    /**
     * @internal
     */
    getCypher(env: CypherEnvironment): string;
}
