import { EventEmitter } from 'eventemitter3';
import { UserInteraction, PredictionResult, AdaptationSuggestion, ModelState, FeatureVector, ModelMetrics } from '../types/common.js';

/**
 * Events emitted by PredictionEngine
 */
export interface PredictionEngineEvents {
    'prediction': (result: PredictionResult) => void;
    'adaptation-suggested': (suggestion: AdaptationSuggestion) => void;
    'model-updated': (state: ModelState) => void;
    'training-complete': (metrics: ModelMetrics) => void;
    'error': (error: Error) => void;
}
/**
 * Configuration for prediction engine
 */
export interface PredictionEngineConfig {
    modelPath?: string;
    autoTrain?: boolean;
    trainingInterval?: number;
    minSamplesForTraining?: number;
    maxTrainingData?: number;
    learningRate?: number;
    featureEngineering?: boolean;
    enableOnlinelearning?: boolean;
}
/**
 * PredictionEngine provides AI-powered adaptive learning for user preferences
 */
export declare class PredictionEngine extends EventEmitter<PredictionEngineEvents> {
    private config;
    private model;
    private trainingData;
    private interactions;
    private featureConfig;
    private modelState;
    private trainingTimer;
    constructor(config?: PredictionEngineConfig);
    /**
     * Record user interaction for learning
     */
    recordInteraction(interaction: UserInteraction): void;
    /**
     * Predict preference adjustment based on current context
     */
    predictPreference(currentPreferences: Record<string, unknown>, context?: Record<string, unknown>): Promise<PredictionResult<Record<string, unknown>>>;
    /**
     * Suggest adaptations based on current behavior
     */
    suggestAdaptations(currentState: Record<string, unknown>, recentInteractions?: UserInteraction[]): Promise<AdaptationSuggestion[]>;
    /**
     * Add training data with feedback
     */
    addTrainingData(input: FeatureVector, output: unknown, feedback?: number): void;
    /**
     * Train the model with current data
     */
    trainModel(): void;
    /**
     * Get current model state
     */
    getModelState(): ModelState;
    /**
     * Clear training data and reset model
     */
    reset(): void;
    /**
     * Stop auto-training
     */
    destroy(): void;
    private startAutoTraining;
    private extractFeatures;
    private extractBehaviorFeatures;
    private processInteractionForLearning;
    private calculateConfidence;
    private generateAdaptationSuggestions;
    private generateReasoning;
    private detectMotionSensitivity;
    private detectCognitiveLoad;
    private evaluateModel;
    private getFeatureNames;
}
//# sourceMappingURL=engine.d.ts.map