/**
 * A/B Testing Framework
 *
 * Manages feature flags and variant assignment for experiments.
 * Uses consistent hashing to ensure players always get the same variant.
 *
 * Ported from Python ws/experiments/ab_testing.py
 *
 * NOTE: All experiments are DISABLED by default. Enable specific experiments
 * by setting their `enabled` flag to true when ready to run tests.
 */
export type VariantName = 'control' | 'treatment' | 'treatment_a' | 'treatment_b';
export interface FeatureFlag {
    enabled: boolean;
    variants: Record<string, number>;
    description: string;
}
export type FeatureFlags = Record<string, FeatureFlag>;
/**
 * All feature flags for A/B testing.
 * NOTE: All experiments are DISABLED by default for safety.
 * Enable specific experiments when ready to run tests.
 */
export declare const FEATURE_FLAGS: FeatureFlags;
/**
 * Manages A/B test variant assignment and tracking.
 */
export declare class ABTestingManager {
    private featureFlags;
    private cache;
    constructor(featureFlags?: FeatureFlags);
    /**
     * Get the assigned variant for a player and feature flag.
     * Uses consistent hashing to ensure same player always gets same variant.
     */
    getVariant(playerId: string, flagName: string): string;
    /**
     * Assign a variant using consistent hashing.
     */
    private assignVariant;
    /**
     * Check if a feature flag is enabled.
     */
    isFeatureEnabled(flagName: string): boolean;
    /**
     * Enable a feature flag.
     */
    enableFeature(flagName: string): void;
    /**
     * Disable a feature flag.
     */
    disableFeature(flagName: string): void;
    /**
     * Get all feature flags configuration.
     */
    getAllFlags(): FeatureFlags;
    /**
     * Get all enabled feature flags.
     */
    getEnabledFlags(): string[];
    /**
     * Get all variant assignments for a player.
     */
    getPlayerVariants(playerId: string): Record<string, string>;
    /**
     * Get variant assignments for enabled flags only.
     */
    getPlayerEnabledVariants(playerId: string): Record<string, string>;
    /**
     * Clear cached variant assignments.
     */
    clearCache(playerId?: string): void;
    /**
     * Add a new feature flag dynamically.
     */
    addFlag(name: string, flag: FeatureFlag): void;
    /**
     * Remove a feature flag.
     */
    removeFlag(name: string): void;
    /**
     * Get cache statistics.
     */
    getCacheStats(): {
        size: number;
        keys: string[];
    };
}
/**
 * Get or create the global A/B testing manager instance.
 */
export declare function getABManager(): ABTestingManager;
/**
 * Get variant assignment for a player (convenience function).
 */
export declare function getVariant(playerId: string, flagName: string): string;
/**
 * Check if a player is in treatment variant.
 */
export declare function isInTreatment(playerId: string, flagName: string): boolean;
/**
 * Check if a feature is enabled.
 */
export declare function isFeatureEnabled(flagName: string): boolean;
/**
 * Enable a feature flag globally.
 */
export declare function enableFeature(flagName: string): void;
/**
 * Disable a feature flag globally.
 */
export declare function disableFeature(flagName: string): void;
export declare const abTesting: {
    manager: typeof getABManager;
    getVariant: typeof getVariant;
    isInTreatment: typeof isInTreatment;
    isFeatureEnabled: typeof isFeatureEnabled;
    enableFeature: typeof enableFeature;
    disableFeature: typeof disableFeature;
    FEATURE_FLAGS: FeatureFlags;
};
//# sourceMappingURL=ab_testing.d.ts.map