import type { Config } from "../config.js";
/**
 * Video metadata interface containing all fields that can be extracted
 */
export interface VideoMetadata {
    id?: string;
    title?: string;
    fulltitle?: string;
    description?: string;
    alt_title?: string;
    display_id?: string;
    uploader?: string;
    uploader_id?: string;
    uploader_url?: string;
    creators?: string[];
    creator?: string;
    channel?: string;
    channel_id?: string;
    channel_url?: string;
    channel_follower_count?: number;
    channel_is_verified?: boolean;
    timestamp?: number;
    upload_date?: string;
    release_timestamp?: number;
    release_date?: string;
    release_year?: number;
    modified_timestamp?: number;
    modified_date?: string;
    duration?: number;
    duration_string?: string;
    view_count?: number;
    concurrent_view_count?: number;
    like_count?: number;
    dislike_count?: number;
    repost_count?: number;
    average_rating?: number;
    comment_count?: number;
    age_limit?: number;
    live_status?: string;
    is_live?: boolean;
    was_live?: boolean;
    playable_in_embed?: string;
    availability?: string;
    media_type?: string;
    playlist_id?: string;
    playlist_title?: string;
    playlist?: string;
    playlist_count?: number;
    playlist_index?: number;
    playlist_autonumber?: number;
    playlist_uploader?: string;
    playlist_uploader_id?: string;
    playlist_channel?: string;
    playlist_channel_id?: string;
    webpage_url?: string;
    webpage_url_domain?: string;
    webpage_url_basename?: string;
    original_url?: string;
    filename?: string;
    ext?: string;
    categories?: string[];
    tags?: string[];
    cast?: string[];
    location?: string;
    license?: string;
    series?: string;
    series_id?: string;
    season?: string;
    season_number?: number;
    season_id?: string;
    episode?: string;
    episode_number?: number;
    episode_id?: string;
    track?: string;
    track_number?: number;
    track_id?: string;
    artists?: string[];
    artist?: string;
    genres?: string[];
    genre?: string;
    composers?: string[];
    composer?: string;
    album?: string;
    album_type?: string;
    album_artists?: string[];
    album_artist?: string;
    disc_number?: number;
    extractor?: string;
    epoch?: number;
    [key: string]: unknown;
}
/**
 * Extract video metadata without downloading the actual video content.
 * Uses yt-dlp's --dump-json flag to get comprehensive metadata.
 *
 * @param url - The URL of the video to extract metadata from
 * @param fields - Optional array of specific fields to extract. If not provided, returns all available metadata
 * @param config - Configuration object (currently unused but kept for consistency)
 * @returns Promise resolving to formatted metadata string or JSON object
 * @throws {Error} When URL is invalid or metadata extraction fails
 *
 * @example
 * ```typescript
 * // Get all metadata
 * const metadata = await getVideoMetadata('https://youtube.com/watch?v=...');
 * console.log(metadata);
 *
 * // Get specific fields only
 * const specificData = await getVideoMetadata(
 *   'https://youtube.com/watch?v=...',
 *   ['id', 'title', 'description', 'channel']
 * );
 * console.log(specificData);
 * ```
 */
export declare function getVideoMetadata(url: string, fields?: string[], _config?: Config): Promise<string>;
/**
 * Get a human-readable summary of key video metadata fields.
 * This is useful for quick overview without overwhelming JSON output.
 *
 * @param url - The URL of the video to extract metadata from
 * @param config - Configuration object (currently unused but kept for consistency)
 * @returns Promise resolving to a formatted summary string
 * @throws {Error} When URL is invalid or metadata extraction fails
 *
 * @example
 * ```typescript
 * const summary = await getVideoMetadataSummary('https://youtube.com/watch?v=...');
 * console.log(summary);
 * // Output:
 * // Title: Example Video Title
 * // Channel: Example Channel
 * // Duration: 10:30
 * // Views: 1,234,567
 * // Upload Date: 2023-12-01
 * // Description: This is an example video...
 * ```
 */
export declare function getVideoMetadataSummary(url: string, _config?: Config): Promise<string>;
