import { FcrRemoteControlSessionParamsSchema } from '../schema';
export declare enum FcrRemoteControlState {
    /**
     * 远程控制请求已接收
     */
    REQUEST_RECEIVED = 0,
    /**
     * 远程控制请求已接受
     */
    REQUEST_ACCEPTED = 1,
    /**
     * 远程控制请求已拒绝
     */
    REQUEST_REJECTED = 2,
    /**
     * 远程远控连接已初始化
     */
    CONNECT_INITIALIZED = 3,
    /**
     * 远程远控连接已建立
     */
    CONNECT_ESTABLISHED = 4,
    /**
     * 远程控制会话已结束
     */
    SESSION_ENDED = 5
}
export type FcrRemoteControlSessionParams = FcrRemoteControlSessionParamsSchema;
export type FcrRemoteControlInfo = {
    sessionId: string;
    state: FcrRemoteControlState;
    controllerId: string;
    controlleeId: string;
};
export type FcrRemoteControlExtra = Omit<FcrRemoteControlInfo, 'state'> & {
    fromUserId: string;
    receiverId: string;
    cause?: Record<string, unknown>;
};
export interface FcrRemoteControl {
    /**
     * 获取远程控制状态
     */
    getRemoteControlState(): FcrRemoteControlState | null;
    /**
     * 开始远程控制请求
     * @param params FcrRemoteControlSessionParams
     */
    startRemoteControlRequest(params: FcrRemoteControlSessionParams): Promise<string | null>;
    /**
     * 接受远程控制请求（共享端调用）
     * @param sessionId
     */
    acceptRemoteControlRequest(sessionId: string, cause?: Record<string, unknown>): Promise<void>;
    /**
     * 拒绝远程控制请求（共享端调用）
     * @param sessionId
     */
    rejectRemoteControlRequest(sessionId: string, cause?: Record<string, unknown>): Promise<void>;
    /**
     * 更新远程控制连接状态
     * @param sessionId
     * @param state
     * @param cause
     */
    updateRemoteControlConnectionState(sessionId: string, state: FcrRemoteControlConnectionState, cause?: Record<string, unknown>): Promise<void>;
    /**
     * 停止远程控制请求或结束远程控制会话
     * @param sessionId
     */
    terminateRemoteControl(sessionId: string, cause?: Record<string, unknown>): Promise<void>;
    /**
     * 添加远程控制观察者
     * @param observer FcrRemoteObserver
     */
    addObserver(observer: FcrRemoteObserver): void;
    /**
     * 移除远程控制观察者
     * @param observer FcrRemoteObserver
     */
    removeObserver(observer: FcrRemoteObserver): void;
    /**
     * 销毁远程控制器，释放资源
     */
    release(): Promise<void>;
}
export interface FcrRemoteObserver {
    /**
     * 监听远程控制状态变化
     * @param state
     * @param extra
     */
    onRemoteControlStateChanged?: (state: FcrRemoteControlState, extra: FcrRemoteControlExtra) => void;
}
/**
 * The action of the remote control session.
 * 0: request
 * 1: accept
 * 2: reject
 * 3: end
 */
export type FcrRemoteControlSessionAction = 0 | 1 | 2 | 3;
/**
 * The action of the remote control session server response or request.
 * 0: receive
 * 1: accept
 */
export type FcrRemoteControlServerAction = 0 | 1;
export type FcrRemoteLocalControlSession = FcrRemoteControlSessionParams & {
    interval: number;
    nextTs: number;
    startTs: number;
    action: FcrRemoteControlServerAction;
};
export type FcrRemoteControlConnectionState = FcrRemoteControlState.CONNECT_INITIALIZED | FcrRemoteControlState.CONNECT_ESTABLISHED;
