/**
 * Batch folder operations for taglib-wasm
 * Provides APIs for scanning directories and processing multiple audio files
 */
import { type Tag } from "./simple.ts";
import type { AudioProperties } from "./types.ts";
/**
 * Metadata for a single audio file including path information
 */
export interface AudioFileMetadata {
    /** Absolute or relative path to the audio file */
    path: string;
    /** Basic tag information (title, artist, album, etc.) */
    tags: Tag;
    /** Audio properties (duration, bitrate, sample rate, etc.) */
    properties?: AudioProperties;
    /** Any errors encountered while reading this file */
    error?: Error;
}
/**
 * Options for scanning folders
 */
export interface FolderScanOptions {
    /** Whether to scan subdirectories recursively (default: true) */
    recursive?: boolean;
    /** File extensions to include (default: common audio formats) */
    extensions?: string[];
    /** Maximum number of files to process (default: unlimited) */
    maxFiles?: number;
    /** Progress callback called after each file is processed */
    onProgress?: (processed: number, total: number, currentFile: string) => void;
    /** Whether to include audio properties (default: true) */
    includeProperties?: boolean;
    /** Whether to continue on errors (default: true) */
    continueOnError?: boolean;
    /** Number of files to process in parallel (default: 4) */
    concurrency?: number;
}
/**
 * Result of a folder scan operation
 */
export interface FolderScanResult {
    /** Successfully processed files with metadata */
    files: AudioFileMetadata[];
    /** Files that failed to process */
    errors: Array<{
        path: string;
        error: Error;
    }>;
    /** Total number of audio files found */
    totalFound: number;
    /** Total number of files successfully processed */
    totalProcessed: number;
    /** Time taken in milliseconds */
    duration: number;
}
/**
 * Scan a folder and read metadata from all audio files
 *
 * @param folderPath - Path to the folder to scan
 * @param options - Scanning options
 * @returns Metadata for all audio files found
 *
 * @example
 * ```typescript
 * // Scan a folder recursively
 * const result = await scanFolder("/path/to/music");
 * console.log(`Found ${result.totalFound} audio files`);
 * console.log(`Successfully processed ${result.totalProcessed} files`);
 *
 * // Process results
 * for (const file of result.files) {
 *   console.log(`${file.path}: ${file.tags.artist} - ${file.tags.title}`);
 * }
 *
 * // Scan with options
 * const result2 = await scanFolder("/path/to/music", {
 *   recursive: false,
 *   extensions: [".mp3", ".flac"],
 *   onProgress: (processed, total, file) => {
 *     console.log(`Processing ${processed}/${total}: ${file}`);
 *   }
 * });
 * ```
 */
export declare function scanFolder(folderPath: string, options?: FolderScanOptions): Promise<FolderScanResult>;
/**
 * Update metadata for multiple files in a folder
 *
 * @param updates - Array of objects containing path and tags to update
 * @param options - Update options
 * @returns Results of the update operation
 *
 * @example
 * ```typescript
 * // Update multiple files
 * const updates = [
 *   { path: "/music/song1.mp3", tags: { artist: "New Artist" } },
 *   { path: "/music/song2.mp3", tags: { album: "New Album" } }
 * ];
 *
 * const result = await updateFolderTags(updates);
 * console.log(`Updated ${result.successful} files`);
 * ```
 */
export declare function updateFolderTags(updates: Array<{
    path: string;
    tags: Partial<Tag>;
}>, options?: {
    continueOnError?: boolean;
    concurrency?: number;
}): Promise<{
    successful: number;
    failed: Array<{
        path: string;
        error: Error;
    }>;
    duration: number;
}>;
/**
 * Find duplicate audio files based on metadata
 *
 * @param folderPath - Path to scan for duplicates
 * @param criteria - Which fields to compare (default: artist and title)
 * @returns Groups of potential duplicate files
 */
export declare function findDuplicates(folderPath: string, criteria?: Array<keyof Tag>): Promise<Map<string, AudioFileMetadata[]>>;
/**
 * Export metadata from a folder to JSON
 *
 * @param folderPath - Path to scan
 * @param outputPath - Where to save the JSON file
 * @param options - Scan options
 */
export declare function exportFolderMetadata(folderPath: string, outputPath: string, options?: FolderScanOptions): Promise<void>;
//# sourceMappingURL=folder-api.d.ts.map