import type { Expression, ArithmeticExpression, ArrayObjectType } from '../types';
/** A field reference or arithmetic expression (resolves to an Operand). */
type FieldOrExpr<T> = `$${string & keyof T}` | ArithmeticExpression;
/** A literal value (preserves template literal autocomplete via `string & {}`). */
type Literal = (string & {}) | number | boolean | null;
/** Wrapper to force a value to be treated as a literal, not a field reference. */
type ValWrapper = {
    __val: true;
    value: any;
};
/** Right-hand operand: field reference, expression, literal, or val-wrapped. */
type RightOperand<T> = FieldOrExpr<T> | Literal | ValWrapper;
/**
 * Constraint builder with `$`-prefixed field references and type-safe
 * autocompletion via template literal types.
 *
 * ```typescript
 * const c = new Constraint<typeof factors>();
 * c.eq("$OS", "Mac")
 * c.gt(c.mul("$Price", "$Qty"), 10000)
 * c.sum("$A", "$B", "$C")
 * ```
 */
export declare class Constraint<T extends Record<string, readonly any[]> = ArrayObjectType> {
    eq(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression;
    ne(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression;
    gt(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression;
    lt(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression;
    gte(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression;
    lte(left: FieldOrExpr<T>, right: FieldOrExpr<T> | RightOperand<T>): Expression;
    in(left: FieldOrExpr<T>, values: any[]): Expression;
    and(...conditions: Expression[]): Expression;
    or(...conditions: Expression[]): Expression;
    not(condition: Expression): Expression;
    add(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression;
    sub(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression;
    mul(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression;
    div(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression;
    mod(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression;
    pow(left: FieldOrExpr<T> | RightOperand<T>, right: FieldOrExpr<T> | RightOperand<T>): ArithmeticExpression;
    sum(...args: (FieldOrExpr<T> | RightOperand<T>)[]): ArithmeticExpression;
    product(...args: (FieldOrExpr<T> | RightOperand<T>)[]): ArithmeticExpression;
    fn(requires: (string & keyof T)[], evaluate: (row: {
        [K in keyof T]: any;
    }) => boolean): Expression;
    val(value: any): ValWrapper;
}
export {};
