import { default as TUIRoomEngine } from '@tencentcloud/tuiroom-engine-js';

export interface StartOptions {
    roomName?: string;
    password?: string;
    isOpenCamera?: boolean;
    isOpenMicrophone?: boolean;
    defaultCameraId?: string;
    defaultMicrophoneId?: string;
    defaultSpeakerId?: string;
}
export interface JoinOptions {
    password?: string;
    isOpenCamera?: boolean;
    isOpenMicrophone?: boolean;
    defaultCameraId?: string;
    defaultMicrophoneId?: string;
    defaultSpeakerId?: string;
}
export declare enum RoomEvent {
    ROOM_START = "RoomStart",
    ROOM_JOIN = "RoomJoin",
    ROOM_LEAVE = "RoomLeave",
    ROOM_DISMISS = "RoomDestroy",
    ROOM_ERROR = "RoomError",
    KICKED_OUT = "KickedOut",
    KICKED_OFFLINE = "KickedOffline",
    USER_SIG_EXPIRED = "UserSigExpired",
    USER_LOGOUT = "UserLogout",
    LANGUAGE_CHANGED = "LanguageChanged",
    THEME_CHANGED = "ThemeChanged",
    CONFERENCE_INVITATION_ACCEPTED = "ConferenceInvitationAccepted"
}
export declare enum FeatureButton {
    SwitchTheme = "SwitchTheme",
    SwitchLayout = "LayoutControl",
    SwitchLanguage = "Language",
    FullScreen = "FullScreen",
    Invitation = "InviteControl",
    BasicBeauty = "BasicBeauty"
}
export type ThemeOption = 'LIGHT' | 'DARK';
export declare enum ComponentName {
    AIToolsButton = "AIToolsButton"
}
export interface ComponentConfig {
    componentName: ComponentName;
    visible: boolean;
}
export interface IConference {
    getRoomEngine(): {
        instance: TUIRoomEngine;
    } | null;
    on: (eventType: RoomEvent, callback: (data?: any) => void) => void;
    off: (eventType: RoomEvent, callback: (data?: any) => void) => void;
    login: (params: {
        sdkAppId: number;
        userId: string;
        userSig: string;
        tim?: any;
    }) => Promise<void>;
    logout: () => Promise<void>;
    start: ({ roomId, options }: {
        roomId: string;
        options?: StartOptions;
    }) => Promise<void>;
    join: ({ roomId, options }: {
        roomId: string;
        options?: JoinOptions;
    }) => Promise<void>;
    leave: () => Promise<void>;
    dismiss: () => Promise<void>;
    setSelfInfo: (options: {
        userName: string;
        avatarUrl: string;
    }) => Promise<void>;
    setComponentConfig: (config: ComponentConfig) => void;
    getComponentConfig: (name: ComponentName) => ComponentConfig | undefined;
}
