
export interface CacheLimit {
    pc: number;
    mobile: number;
}

export interface SignalConfig {
    main: string;
    backup: string;
}

export enum LogLevel {
    Warn = 'warn',
    Error = 'error',
    None = 'none',
}

export enum TrackerZone {
    Europe = 'eu',
    HongKong = 'hk',
    USA = 'us',
    CN = 'cn',
}

export interface P2pConfig {
    logLevel?: LogLevel | boolean;
    signalConfig?: string | SignalConfig;
    announce?: string;
    trackerZone?: TrackerZone;
    memoryCacheLimit?: CacheLimit;
    diskCacheLimit?: CacheLimit;
    useDiskCache?: boolean;
    p2pEnabled?: boolean;
    dcDownloadTimeout?: number;
    webRTCConfig?: any;
    useHttpRange?: boolean;
    httpLoadTime?: number;
    startFromSegmentOffset?: number;
    ICEPreflight?: boolean;
    prefetchOnly?: boolean;
    tag?: string;
    token?: string;
    appName?: string;
    appId?: string;
    showSlogan?: boolean;
    trickleICE?: boolean;
    geoIpPreflight?: boolean;
    getStats?: (totalP2PDownloaded: number, totalP2PUploaded: number, totalHTTPDownloaded: number, p2pDownloadSpeed: number)=>void;
    getPeerId?: (peerId: string)=>void;
    getPeersInfo?: (peers: string[])=>void;
    channelId?: ((mpdUrl: string)=>string) | string;
    segmentId?: (url: string, range: string)=>string;
    validateSegment?: (segId: string, buffer: ArrayBufferLike)=>boolean;
}

export declare class P2pEngineTheo {
    static isSupported(): boolean;
    static readonly version: string;
    static readonly protocolVersion: string;
    public readonly version: string;
    constructor(player: any, p2pConfig?: P2pConfig);
    disableP2P(): void;
    destroy(): void;
    enableP2P(): void;
    on(name: string, func: (...args)=>void): P2pEngineTheo;
    once(name: string, func: (...args)=>void): P2pEngineTheo;
    off(name: string, func: (...args)=>void): P2pEngineTheo;
}

export default P2pEngineTheo;
