import { type Event } from '@skyway-sdk/common';
import type { SkyWayChannelImpl } from '../../../channel';
import type { SkyWayContext } from '../../../context';
import type { RemoteAudioStream } from '../../../media/stream/remote/audio';
import type { RemoteDataStream } from '../../../media/stream/remote/data';
import type { RemoteVideoStream } from '../../../media/stream/remote/video';
import { MemberImpl } from '../../../member';
import type { LocalPersonImpl } from '../../../member/localPerson';
import type { Person } from '../../../member/person';
import type { RemoteMemberImplInterface } from '../../../member/remoteMember';
import type { Subscription } from '../../../subscription';
import { P2PConnection } from './connection';
import type { PersonPlugin } from './plugin';
export declare type RemotePerson = RemoteMemberImplInterface & Person & {
    /**@description [japanese] この RemotePerson がPublicationをSubscribeしたとき */
    readonly onPublicationSubscribed: Event<{
        subscription: Subscription;
    }>;
    /**@description [japanese] この RemotePerson がPublicationをUnsubscribeしたとき */
    readonly onPublicationUnsubscribed: Event<{
        subscription: Subscription;
    }>;
    readonly onPublicationListChanged: Event<void>;
    readonly onSubscriptionListChanged: Event<void>;
    /**@description [japanese] この RemotePerson にPublicationをSubscribeさせる */
    subscribe: (publicationId: string) => Promise<{
        subscription: Subscription;
    }>;
    /**@description [japanese] この RemotePerson にPublicationをUnsubscribeさせる */
    unsubscribe: (subscriptionId: string) => Promise<void>;
};
/**@internal */
export declare class RemotePersonImpl extends MemberImpl implements RemotePerson {
    private args;
    readonly type = "person";
    readonly subtype = "person";
    readonly side = "remote";
    readonly plugin: PersonPlugin;
    private _connections;
    private _context;
    private _disposer;
    readonly onPublicationSubscribed: Event<{
        subscription: Subscription;
        stream?: RemoteDataStream | RemoteAudioStream | RemoteVideoStream | undefined;
    }>;
    readonly onPublicationUnsubscribed: Event<{
        subscription: Subscription;
    }>;
    readonly onPublicationListChanged: Event<void>;
    readonly onSubscriptionListChanged: Event<void>;
    constructor(args: {
        channel: SkyWayChannelImpl;
        name?: string;
        id: string;
        metadata?: string;
        plugin: PersonPlugin;
        context: SkyWayContext;
    });
    /**@private */
    _getConnection(localPersonId: string): P2PConnection;
    /**@private */
    _getOrCreateConnection(localPerson: LocalPersonImpl): P2PConnection;
    private _createConnection;
    subscribe: (publicationId: string) => Promise<{
        subscription: Subscription;
    }>;
    unsubscribe(subscriptionId: string): Promise<void>;
    _dispose(): void;
}
//# sourceMappingURL=member.d.ts.map