/**
 * Advanced architecture patterns and design implementations
 *
 * This module implements enterprise-grade architectural patterns including
 * Factory, Strategy, Observer, Decorator, and Plugin patterns for maximum
 * extensibility and maintainability.
 */
import type { FilterOperationDict, ScreenerDataResult, QueryDict } from './types/models';
/**
 * Abstract Factory Pattern for creating different types of queries
 */
export declare abstract class QueryFactory {
    /**
     * Create a query for specific market type
     */
    static createMarketQuery(marketType: 'stock' | 'crypto' | 'forex' | 'india'): IQueryBuilder;
    /**
     * Create query from template
     */
    static createFromTemplate(template: QueryTemplate): IQueryBuilder;
}
/**
 * Query Builder Interface
 */
export interface IQueryBuilder {
    setColumns(columns: string[]): IQueryBuilder;
    setFilters(filters: FilterOperationDict[]): IQueryBuilder;
    setLimit(limit: number): IQueryBuilder;
    setMarkets(...markets: string[]): IQueryBuilder;
    build(): QueryDict;
}
/**
 * Stock Query Builder Implementation
 */
export declare class StockQueryBuilder implements IQueryBuilder {
    private query;
    setColumns(columns: string[]): IQueryBuilder;
    setFilters(filters: FilterOperationDict[]): IQueryBuilder;
    setLimit(limit: number): IQueryBuilder;
    setMarkets(...markets: string[]): IQueryBuilder;
    build(): QueryDict;
}
/**
 * Crypto Query Builder Implementation
 */
export declare class CryptoQueryBuilder implements IQueryBuilder {
    private query;
    setColumns(columns: string[]): IQueryBuilder;
    setFilters(filters: FilterOperationDict[]): IQueryBuilder;
    setLimit(limit: number): IQueryBuilder;
    setMarkets(..._markets: string[]): IQueryBuilder;
    build(): QueryDict;
}
/**
 * Forex Query Builder Implementation
 */
export declare class ForexQueryBuilder implements IQueryBuilder {
    private query;
    setColumns(columns: string[]): IQueryBuilder;
    setFilters(filters: FilterOperationDict[]): IQueryBuilder;
    setLimit(limit: number): IQueryBuilder;
    setMarkets(..._markets: string[]): IQueryBuilder;
    build(): QueryDict;
}
/**
 * India Stock Query Builder Implementation
 */
export declare class IndiaStockQueryBuilder implements IQueryBuilder {
    private query;
    setColumns(columns: string[]): IQueryBuilder;
    setFilters(filters: FilterOperationDict[]): IQueryBuilder;
    setLimit(limit: number): IQueryBuilder;
    setMarkets(..._markets: string[]): IQueryBuilder;
    build(): QueryDict;
}
/**
 * Query Template Interface
 */
export interface QueryTemplate {
    name: string;
    marketType: 'stock' | 'crypto' | 'forex' | 'india';
    columns: string[];
    filters: FilterOperationDict[];
    limit: number;
    description?: string;
}
/**
 * Strategy Pattern for different data processing strategies
 */
export interface IDataProcessor {
    process(data: ScreenerDataResult): ScreenerDataResult;
}
/**
 * Stock Data Processor
 */
export declare class StockDataProcessor implements IDataProcessor {
    process(data: ScreenerDataResult): ScreenerDataResult;
    private formatMarketCap;
    private categorizePE;
}
/**
 * India Stock Data Processor
 */
export declare class IndiaStockDataProcessor implements IDataProcessor {
    process(data: ScreenerDataResult): ScreenerDataResult;
    private formatMarketCapINR;
    private categorizeIndianPE;
}
/**
 * Crypto Data Processor
 */
export declare class CryptoDataProcessor implements IDataProcessor {
    process(data: ScreenerDataResult): ScreenerDataResult;
    private categorizeVolatility;
    private categorizePriceChange;
}
/**
 * Data Processing Context (Strategy Pattern)
 */
export declare class DataProcessingContext {
    private processor;
    constructor(processor: IDataProcessor);
    setProcessor(processor: IDataProcessor): void;
    processData(data: ScreenerDataResult): ScreenerDataResult;
}
/**
 * Observer Pattern for query events
 */
export interface IQueryObserver {
    onQueryStart(query: QueryDict): void;
    onQueryComplete(query: QueryDict, result: ScreenerDataResult): void;
    onQueryError(query: QueryDict, error: Error): void;
}
/**
 * Query Event Manager
 */
export declare class QueryEventManager {
    private observers;
    addObserver(observer: IQueryObserver): void;
    removeObserver(observer: IQueryObserver): void;
    notifyQueryStart(query: QueryDict): void;
    notifyQueryComplete(query: QueryDict, result: ScreenerDataResult): void;
    notifyQueryError(query: QueryDict, error: Error): void;
}
/**
 * Performance Observer Implementation
 */
export declare class PerformanceObserver implements IQueryObserver {
    private metrics;
    onQueryStart(query: QueryDict): void;
    onQueryComplete(query: QueryDict, _result: ScreenerDataResult): void;
    onQueryError(query: QueryDict, error: Error): void;
    getMetrics(): typeof this.metrics;
    getAverageQueryTime(): number;
}
/**
 * Plugin System for extensibility
 */
export interface IPlugin {
    name: string;
    version: string;
    initialize(): void;
    destroy(): void;
}
/**
 * Plugin Manager
 */
export declare class PluginManager {
    private plugins;
    registerPlugin(plugin: IPlugin): void;
    unregisterPlugin(name: string): void;
    getPlugin(name: string): IPlugin | undefined;
    getAllPlugins(): IPlugin[];
}
/**
 * Export architecture components
 */
export declare const Architecture: {
    readonly QueryFactory: typeof QueryFactory;
    readonly StockQueryBuilder: typeof StockQueryBuilder;
    readonly CryptoQueryBuilder: typeof CryptoQueryBuilder;
    readonly ForexQueryBuilder: typeof ForexQueryBuilder;
    readonly IndiaStockQueryBuilder: typeof IndiaStockQueryBuilder;
    readonly StockDataProcessor: typeof StockDataProcessor;
    readonly IndiaStockDataProcessor: typeof IndiaStockDataProcessor;
    readonly CryptoDataProcessor: typeof CryptoDataProcessor;
    readonly DataProcessingContext: typeof DataProcessingContext;
    readonly QueryEventManager: typeof QueryEventManager;
    readonly PerformanceObserver: typeof PerformanceObserver;
    readonly PluginManager: typeof PluginManager;
};
//# sourceMappingURL=architecture.d.ts.map