import { ISODateString } from '../../utils/types';
import { IFile } from '../../resources/Files/types';
export declare type NewTransferParams = {
    url: string;
    save_parent_id?: IFile['id'];
    callback_url?: string;
};
export declare type NewTransferError = {
    url: NewTransferParams['url'];
    status_code: number;
    error_type: string;
};
declare type TransferType = 'URL' | 'TORRENT' | 'PLAYLIST' | 'LIVE_STREAM' | 'N/A';
declare type TransferStatus = 'WAITING' | 'PREPARING_DOWNLOAD' | 'IN_QUEUE' | 'DOWNLOADING' | 'WAITING_FOR_COMPLETE_QUEUE' | 'WAITING_FOR_DOWNLOADER' | 'COMPLETING' | 'STOPPING' | 'SEEDING' | 'COMPLETED' | 'ERROR';
declare type TransferLink = {
    url: string;
    label: string;
};
declare type BaseTransfer = {
    availability: null | number;
    created_at: ISODateString;
    current_ratio: null | number;
    down_speed: number;
    downloaded: number;
    error_message: null | string;
    estimated_time: null | number;
    file_id: null | number;
    finished_at: null | ISODateString;
    id: number;
    is_private: boolean;
    name: string;
    save_parent_id: number;
    seconds_seeding: null | number;
    size: number;
    source: string;
    started_at: null | ISODateString;
    status: TransferStatus;
    type: TransferType;
    subscription_id: null | number;
    uploaded: number;
    up_speed: number;
    callback_url: null | string;
    client_ip: null | string;
    completion_percent: number;
    percent_done: number;
    created_torrent: boolean;
    download_id: number;
    hash: null | string;
    links: TransferLink[];
    peers_connected: number;
    peers_getting_from_us: number;
    peers_sending_to_us: number;
    simulated: boolean;
    torrent_link: null | string;
    tracker: null | string;
    tracker_message: null | string;
    updated_at?: ISODateString;
    userfile_exists?: boolean;
};
declare type FinishedTransfer = BaseTransfer & {
    finished_at: ISODateString;
    file_id: number;
};
declare type CompletedTransfer = FinishedTransfer & {
    status: 'COMPLETED';
};
declare type FailedTransfer = BaseTransfer & {
    status: 'ERROR';
    error_message: string;
};
declare type PreparingSeedingTorrentTransfer = FinishedTransfer & {
    type: 'TORRENT';
    status: 'PREPARING_SEED';
};
declare type SeedingTorrentTransfer = FinishedTransfer & {
    type: 'TORRENT';
    status: 'SEEDING';
    seconds_seeding: number;
    current_ratio: number;
};
declare type CompletedTorrentTransfer = SeedingTorrentTransfer & {
    status: 'COMPLETED';
};
export declare type TorrentTransfer = (BaseTransfer | FailedTransfer | SeedingTorrentTransfer | PreparingSeedingTorrentTransfer | CompletedTorrentTransfer) & {
    type: 'TORRENT';
    torrent_link: string;
};
export declare type URLTransfer = (BaseTransfer | FailedTransfer | CompletedTransfer) & {
    type: 'URL';
};
export declare type PlaylistTransfer = (BaseTransfer | FailedTransfer | CompletedTransfer) & {
    type: 'PLAYLIST';
    downloaded_items: number;
    total_items: number;
    recorded_seconds: number;
};
export declare type LiveStreamTransfer = (BaseTransfer | FailedTransfer | CompletedTransfer) & {
    type: 'LIVE_STREAM';
    recorded_seconds: number;
};
export declare type Transfer = TorrentTransfer | URLTransfer | PlaylistTransfer | LiveStreamTransfer;
export interface ITransfersResponse {
    transfers: Transfer[];
    total: number;
    cursor: string;
}
export {};
