/**
 * Interactive Configuration Updates System
 * Phase 4, Checkpoint D2 - Interactive configuration prompt engine and user choice handling
 */
import { SchemaChange, ConfigurationImpact, MigrationSuggestion } from './schema-evolution';
export interface ConfigurationPrompt {
    id: string;
    type: 'schema_change' | 'migration_suggestion' | 'impact_resolution' | 'conflict_resolution';
    title: string;
    description: string;
    context: {
        affectedFiles: string[];
        schemaChanges: SchemaChange[];
        migrationSuggestions: MigrationSuggestion[];
        impactAnalysis: ConfigurationImpact[];
        estimatedEffort: 'LOW' | 'MEDIUM' | 'HIGH' | 'EXTENSIVE';
    };
    options: ConfigurationOption[];
    defaultOption?: string;
    required: boolean;
    dependencies: string[];
    metadata: {
        priority: 'LOW' | 'MEDIUM' | 'HIGH' | 'CRITICAL';
        riskLevel: 'LOW' | 'MEDIUM' | 'HIGH';
        reversible: boolean;
        estimatedTime: number;
    };
}
export interface ConfigurationOption {
    id: string;
    label: string;
    description: string;
    type: 'accept' | 'reject' | 'customize' | 'defer' | 'skip';
    consequences: string[];
    prerequisites: string[];
    actions: ConfigurationAction[];
    reversible: boolean;
    riskLevel: 'LOW' | 'MEDIUM' | 'HIGH';
}
export interface ConfigurationAction {
    type: 'file_update' | 'file_create' | 'file_backup' | 'schema_migration' | 'validation' | 'user_input';
    description: string;
    targetPath: string;
    parameters: Record<string, any>;
    rollbackAction?: ConfigurationAction;
    validation?: {
        type: 'syntax' | 'semantic' | 'compatibility';
        command?: string;
        expectedOutcome: string;
    };
}
export interface UserChoice {
    promptId: string;
    optionId: string;
    customParameters?: Record<string, any>;
    userNotes?: string;
    timestamp: Date;
    confidence: number;
}
export interface ConfigurationSession {
    id: string;
    startTime: Date;
    endTime?: Date;
    prompts: ConfigurationPrompt[];
    choices: UserChoice[];
    status: 'in_progress' | 'completed' | 'aborted' | 'deferred';
    metadata: {
        triggeredByChangeId: string;
        affectedFiles: string[];
        totalPrompts: number;
        completedPrompts: number;
        estimatedTotalTime: number;
        actualTime?: number;
    };
}
export interface PromptGenerationOptions {
    interactiveMode: boolean;
    autoAcceptLowRisk: boolean;
    requireConfirmationForHighRisk: boolean;
    includePreview: boolean;
    batchSimilarChanges: boolean;
    minimumRiskThreshold: 'LOW' | 'MEDIUM' | 'HIGH';
    timeoutSeconds: number;
    saveChoices: boolean;
}
export declare class ConfigurationPromptEngine {
    private sessions;
    private readline?;
    private options;
    constructor(options?: Partial<PromptGenerationOptions>);
    /**
     * Generate configuration prompts from schema changes and migration suggestions
     */
    generatePrompts(changes: SchemaChange[], impacts: ConfigurationImpact[], suggestions: MigrationSuggestion[]): Promise<ConfigurationPrompt[]>;
    /**
     * Start an interactive configuration session
     */
    startConfigurationSession(changes: SchemaChange[], impacts: ConfigurationImpact[], suggestions: MigrationSuggestion[]): Promise<ConfigurationSession>;
    /**
     * Present a single prompt to the user and collect their choice
     */
    presentPrompt(prompt: ConfigurationPrompt): Promise<UserChoice>;
    /**
     * Validate a user choice against prompt constraints
     */
    validateChoice(prompt: ConfigurationPrompt, choice: UserChoice): {
        isValid: boolean;
        errors: string[];
        warnings: string[];
    };
    /**
     * Execute the actions associated with a user choice
     */
    executeChoice(prompt: ConfigurationPrompt, choice: UserChoice, dryRun?: boolean): Promise<{
        success: boolean;
        executedActions: ConfigurationAction[];
        errors: string[];
        rollbackActions: ConfigurationAction[];
    }>;
    /**
     * Get the current session status
     */
    getSessionStatus(sessionId: string): ConfigurationSession | undefined;
    /**
     * Get all active sessions
     */
    getActiveSessions(): ConfigurationSession[];
    /**
     * Cleanup completed sessions
     */
    cleanupSessions(): void;
    /**
     * Private: Initialize readline interface
     */
    private initializeReadline;
    /**
     * Private: Group related schema changes for batch processing
     */
    private groupRelatedChanges;
    /**
     * Private: Generate prompt for schema changes
     */
    private generateSchemaChangePrompt;
    /**
     * Private: Generate prompt for migration suggestions
     */
    private generateMigrationPrompt;
    /**
     * Private: Generate prompt for impact resolution
     */
    private generateImpactResolutionPrompt;
    /**
     * Private: Sort prompts by priority and dependencies
     */
    private sortPromptsByPriority;
    /**
     * Private: Extract affected files from impacts
     */
    private extractAffectedFiles;
    /**
     * Private: Run interactive session
     */
    private runInteractiveSession;
    /**
     * Private: Get user choice through readline
     */
    private getUserChoice;
    /**
     * Private: Validate custom parameters
     */
    private validateCustomParameters;
    /**
     * Private: Execute a single configuration action
     */
    private executeAction;
    /**
     * Private: Execute file update action
     */
    private executeFileUpdate;
    /**
     * Private: Execute file create action
     */
    private executeFileCreate;
    /**
     * Private: Execute file backup action
     */
    private executeFileBackup;
    /**
     * Private: Execute validation action
     */
    private executeValidation;
    /**
     * Private: Save session to disk
     */
    private saveSession;
    /**
     * Cleanup resources
     */
    dispose(): void;
}
//# sourceMappingURL=interactive-configuration.d.ts.map