/**
 * Extractor for processing KiCad symbol files and extracting symbol definitions
 * Combines file reading with S-Expression parsing to extract structured symbol data
 */
import { SymbolDefinition } from './SExpressionParser.js';
import { SymbolFileInfo } from './KiCadSymbolFileScanner.js';
/**
 * Extended symbol information including file metadata
 */
export interface ExtractedSymbol extends SymbolDefinition {
    /** Library name derived from file name */
    library: string;
    /** Source file path */
    sourceFile: string;
    /** Relative path from symbols root */
    relativePath: string;
    /** File last modified date */
    fileModified: Date;
    /** Whether this symbol has a description */
    hasDescription: boolean;
    /** Whether this symbol has keywords */
    hasKeywords: boolean;
    /** Combined search text (description + keywords) */
    searchText: string;
}
/**
 * Statistics for symbol extraction operation
 */
export interface ExtractionStatistics {
    /** Number of files processed */
    filesProcessed: number;
    /** Number of files that failed to process */
    filesWithErrors: number;
    /** Total number of symbols extracted */
    symbolsExtracted: number;
    /** Number of symbols with descriptions */
    symbolsWithDescriptions: number;
    /** Number of symbols with keywords */
    symbolsWithKeywords: number;
    /** Processing time in milliseconds */
    processingTime: number;
    /** List of processing errors */
    errors: ExtractionError[];
}
/**
 * Error information for failed extractions
 */
export interface ExtractionError {
    /** File that caused the error */
    file: string;
    /** Error message */
    message: string;
    /** Symbol name if applicable */
    symbolName?: string;
    /** Error type */
    type: 'parse_error' | 'file_read_error' | 'invalid_format' | 'encoding_error';
}
/**
 * Options for controlling symbol extraction
 */
export interface ExtractionOptions {
    /** Whether to include symbols without descriptions */
    includeWithoutDescription: boolean;
    /** Whether to include symbols without keywords */
    includeWithoutKeywords: boolean;
    /** Maximum file size to process in bytes (0 = no limit) */
    maxFileSize: number;
    /** Text encoding to use when reading files */
    encoding: BufferEncoding;
    /** Whether to continue processing on errors */
    continueOnError: boolean;
    /** Validate symbol definitions strictly */
    strictValidation: boolean;
}
/**
 * KiCad symbol extractor for processing symbol files
 */
export declare class KiCadSymbolExtractor {
    private parser;
    private options;
    private statistics;
    constructor(options?: Partial<ExtractionOptions>);
    /**
     * Extract symbols from a list of symbol files
     * @param symbolFiles - Array of symbol file information
     * @returns Promise resolving to array of extracted symbols
     */
    extractSymbolsFromFiles(symbolFiles: SymbolFileInfo[]): Promise<ExtractedSymbol[]>;
    /**
     * Extract symbols from a single file
     * @param fileInfo - Information about the symbol file
     * @returns Promise resolving to array of extracted symbols from the file
     */
    extractSymbolsFromFile(fileInfo: SymbolFileInfo): Promise<ExtractedSymbol[]>;
    /**
     * Get extraction statistics from the last operation
     * @returns Extraction statistics
     */
    getStatistics(): ExtractionStatistics;
    /**
     * Create an ExtractedSymbol from a SymbolDefinition
     * @param symbolDef - Symbol definition from parser
     * @param fileInfo - File information
     * @param libraryName - Library name derived from file
     * @returns Extended symbol with metadata
     * @private
     */
    private createExtractedSymbol;
    /**
     * Extract library name from file information
     * @param fileInfo - File information
     * @returns Library name
     * @private
     */
    private extractLibraryName;
    /**
     * Check if a symbol should be included based on options
     * @param symbol - Symbol to check
     * @returns True if symbol should be included
     * @private
     */
    private shouldIncludeSymbol;
    /**
     * Handle file processing errors
     * @param fileInfo - File that caused the error
     * @param error - Error that occurred
     * @private
     */
    private handleFileError;
    /**
     * Reset extraction statistics
     * @private
     */
    private resetStatistics;
    /**
     * Get a human-readable summary of the extraction results
     * @returns Formatted summary string
     */
    getExtractionSummary(): string;
    /**
     * Group errors by type for summary reporting
     * @returns Object with error counts by type
     * @private
     */
    private groupErrorsByType;
}
//# sourceMappingURL=KiCadSymbolExtractor.d.ts.map