import { Feature, FeatureKey, Context, BucketKey, BucketValue, RuleKey, Traffic, Force, Required, OverrideFeature, Variation, VariationValue, VariableKey, VariableValue, VariableSchema, StickyFeatures, InitialFeatures } from "@featurevisor/types";
import { Logger } from "./logger";
import { DatafileReader } from "./datafileReader";
import { ConfigureBucketKey, ConfigureBucketValue } from "./bucket";
import type { Statuses, InterceptContext } from "./instance";
export declare enum EvaluationReason {
    NOT_FOUND = "not_found",
    NO_VARIATIONS = "no_variations",
    NO_MATCH = "no_match",
    DISABLED = "disabled",
    REQUIRED = "required",
    OUT_OF_RANGE = "out_of_range",
    FORCED = "forced",
    INITIAL = "initial",
    STICKY = "sticky",
    RULE = "rule",
    ALLOCATED = "allocated",
    DEFAULTED = "defaulted",
    OVERRIDE = "override",
    ERROR = "error"
}
type EvaluationType = "flag" | "variation" | "variable";
export interface Evaluation {
    featureKey: FeatureKey;
    reason: EvaluationReason;
    bucketKey?: BucketKey;
    bucketValue?: BucketValue;
    ruleKey?: RuleKey;
    error?: Error;
    enabled?: boolean;
    traffic?: Traffic;
    forceIndex?: number;
    force?: Force;
    required?: Required[];
    sticky?: OverrideFeature;
    initial?: OverrideFeature;
    variation?: Variation;
    variationValue?: VariationValue;
    variableKey?: VariableKey;
    variableValue?: VariableValue;
    variableSchema?: VariableSchema;
}
export interface EvaluateOptions {
    type: EvaluationType;
    featureKey: FeatureKey | Feature;
    variableKey?: VariableKey;
    context: Context;
    logger: Logger;
    datafileReader: DatafileReader;
    statuses?: Statuses;
    interceptContext?: InterceptContext;
    stickyFeatures?: StickyFeatures;
    initialFeatures?: InitialFeatures;
    bucketKeySeparator?: string;
    configureBucketKey?: ConfigureBucketKey;
    configureBucketValue?: ConfigureBucketValue;
}
export declare function evaluate(options: EvaluateOptions): Evaluation;
export {};
