import { ComponentType } from 'react';
import { LocalMediaStream, RoomInfo, VirtualBackgroundType } from '@zocks-communications/client-sdk-js';
import { StyledComponent } from '../../common';
import { AudioControlButtonProps, VideoControlButtonProps } from '../../ControlButtons';
import { JoinOptions } from '../../../store';
export interface LocalMediaProps {
    localAudioStream?: LocalMediaStream;
    localVideoStream?: LocalMediaStream;
    currentVirtualBackground: VirtualBackgroundType | null;
    virtualBackgroundStream?: LocalMediaStream;
    videoStreamIsLoading: boolean;
    currentVideoDeviceId: string | null;
    selectedAudioDeviceSettings?: MediaTrackSettings;
    selectedVideoDeviceSettings?: MediaTrackSettings;
    toggleLocalAudioStream: () => void;
    toggleLocalVideoStream: () => void;
    changeVirtualBackground: (virtualBackgroundType: VirtualBackgroundType | null, deviceId?: string) => Promise<void>;
    stopLocalVirtualBackground: () => void;
    selectAudioDevice: (audioDevice: MediaDeviceInfo) => void;
    selectVideoDevice: (videoDevice: MediaDeviceInfo) => void;
}
export interface JoinPageLocalStreamsComponents {
    AudioControlButton?: ComponentType<AudioControlButtonProps>;
    VideoControlButton?: ComponentType<VideoControlButtonProps>;
    DisabledVideoComponent?: ComponentType<StyledComponent>;
    ExtraComponent?: ComponentType<StyledComponent>;
}
export interface JoinPageLocalStreamsProps extends StyledComponent {
    localMedia: LocalMediaProps;
    baseJoinOptions: Partial<JoinOptions>;
    components?: JoinPageLocalStreamsComponents;
}
export type RoomJoinSelectOption = 'id' | 'name';
export interface JoinPageRoomInputProps extends StyledComponent {
    initialRoomJoinInputValue?: string;
    initialRoomJoinSelectValue?: RoomJoinSelectOption;
    joinAction: (joinOptions: JoinOptions) => void;
    baseJoinOptions: Partial<JoinOptions>;
    roomIdInputLabel?: string;
    roomIdInputDisabled?: boolean;
    roomIdPlaceholder?: string;
    joinButtonLabel?: string;
    hideInputSelect?: boolean;
}
export interface JoinPageRoomButtonsProps extends StyledComponent {
    joinAction: (joinOptions: JoinOptions) => void;
    createRoomAction?: () => Promise<RoomInfo>;
    onNewRoomCreated?: (roomInfo: RoomInfo) => void;
    baseJoinOptions: Partial<JoinOptions>;
    joinNewRoomButtonLabel?: string;
    createNewRoomForLaterButtonLabel?: string;
    disabled?: boolean;
}
