/**
 * Framework Strategy Registry
 * Manages registration and selection of framework strategies
 */
import type { createClient } from '@supabase/supabase-js';
import { SeedingStrategy, DatabaseSchema, FrameworkDetectionResult } from './strategy-interface';
type SupabaseClient = ReturnType<typeof createClient>;
export interface StrategyRegistryOptions {
    enableFallback?: boolean;
    minimumConfidence?: number;
    debug?: boolean;
}
export interface StrategySelection {
    strategy: SeedingStrategy;
    detection: FrameworkDetectionResult;
    reason: string;
}
export declare class StrategyRegistry {
    private strategies;
    private client;
    private options;
    constructor(client: SupabaseClient, options?: StrategyRegistryOptions);
    /**
     * Register a seeding strategy
     */
    register(strategy: SeedingStrategy): Promise<void>;
    /**
     * Register multiple strategies
     */
    registerAll(strategies: SeedingStrategy[]): Promise<void>;
    /**
     * Unregister a strategy
     */
    unregister(strategyName: string): void;
    /**
     * Get all registered strategies
     */
    getStrategies(): SeedingStrategy[];
    /**
     * Get a specific strategy by name
     */
    getStrategy(name: string): SeedingStrategy | undefined;
    /**
     * Select the best strategy for the given schema
     */
    selectStrategy(schema: DatabaseSchema): Promise<StrategySelection>;
    /**
     * Select strategy with manual override
     */
    selectStrategyWithOverride(schema: DatabaseSchema, frameworkOverride?: string): Promise<StrategySelection>;
    /**
     * Find the fallback strategy (typically generic)
     */
    private findFallbackStrategy;
    /**
     * Get detection results for all strategies
     */
    getAllDetectionResults(schema: DatabaseSchema): Promise<Array<{
        strategy: string;
        detection: FrameworkDetectionResult;
    }>>;
    /**
     * Validate that a strategy works with the current schema
     */
    validateStrategy(strategyName: string, schema: DatabaseSchema): Promise<{
        valid: boolean;
        issues: string[];
        recommendations: string[];
    }>;
    /**
     * Clear all registered strategies
     */
    clear(): void;
}
export {};
//# sourceMappingURL=strategy-registry.d.ts.map