export interface DownloadState {
    download_id: string;
    download_status: string;
    video_id: string;
    format_id: string;
    subtitle_id: string | null;
    queue_index: number | null;
    playlist_id: string | null;
    playlist_indices: string | null;
    title: string;
    url: string;
    host: string;
    thumbnail: string | null;
    channel: string | null;
    duration_string: string | null;
    release_date: string | null;
    view_count: number | null;
    like_count: number | null;
    playlist_title: string;
    playlist_url: string;
    playlist_n_entries: number;
    playlist_channel: string | null;
    resolution: string | null;
    ext: string | null;
    abr: number | null;
    vbr: number | null;
    acodec: string | null;
    vcodec: string | null;
    dynamic_range: string | null;
    process_id: number | null;
    status: string | null;
    item: string | null;
    progress: number | null;
    total: number | null;
    downloaded: number | null;
    speed: number | null;
    eta: number | null;
    filepath: string | null;
    filetype: string | null;
    filesize: number | null;
    output_format: string | null;
    embed_metadata: number;
    embed_thumbnail: number;
    square_crop_thumbnail: number;
    sponsorblock_remove: string | null;
    sponsorblock_mark: string | null;
    use_aria2: number;
    custom_command: string | null;
    queue_config: string | null;
    created_at?: string;
    updated_at?: string;
}

export interface Download {
    download_id: string;
    download_status: string;
    video_id: string;
    format_id: string;
    subtitle_id: string | null;
    queue_index: number | null;
    playlist_id: string | null;
    playlist_indices: string | null;
    resolution: string | null;
    ext: string | null;
    abr: number | null;
    vbr: number | null;
    acodec: string | null;
    vcodec: string | null;
    dynamic_range: string | null;
    process_id: number | null;
    status: string | null;
    item: string | null;
    progress: number | null;
    total: number | null;
    downloaded: number | null;
    speed: number | null;
    eta: number | null;
    filepath: string | null;
    filetype: string | null;
    filesize: number | null;
    output_format: string | null;
    embed_metadata: number;
    embed_thumbnail: number;
    square_crop_thumbnail: number;
    sponsorblock_remove: string | null;
    sponsorblock_mark: string | null;
    use_aria2: number;
    custom_command: string | null;
    queue_config: string | null;
    created_at: string;
    updated_at: string;
}

export interface DownloadProgress {
    status: string | null;
    item: string | null;
    progress: number | null;
    speed: number | null;
    downloaded: number | null;
    total: number | null;
    eta: number | null;
}

export interface Paginated<T = any> {
    current_page: number;
    from: number;
    first_page: number;
    last_page: number;
    pages: Array<{
        label: string;
        page: number;
        active: boolean;
    }>;
    next_page: number | null;
    per_page: number;
    prev_page: number | null;
    to: number;
    total: number;
    data: T[];
}
