import { ComponentType } from 'react';
import { LocalMediaStream, RoomInfo, VirtualBackgroundConfig, VirtualBackgroundType } from '@zocks-communications/client-sdk-js';
import { ErrorResponse, StyledComponent } from '../../common';
import { AudioControlButtonProps, VideoControlButtonProps } from '../../ControlButtons';
import { JoinOptions, VirtualBackgroundItem, ZocksAuthActions } from '../../../store';
import { MissingScopeAction } from '../../ScopedBlock';
export interface LocalMediaProps {
    localAudioStream?: LocalMediaStream;
    localVideoStream?: LocalMediaStream;
    currentVirtualBackground: VirtualBackgroundItem | null;
    availableVirtualBackgrounds: VirtualBackgroundItem[] | null;
    virtualBackgroundStream?: LocalMediaStream;
    currentAudioDeviceId: string | null;
    currentVideoDeviceId: string | null;
    toggleLocalAudioStream: () => void;
    toggleLocalVideoStream: () => void;
    changeVirtualBackground: (virtualBackgroundType: VirtualBackgroundType | null, deviceId?: string, config?: VirtualBackgroundConfig) => Promise<void>;
    stopLocalVirtualBackground: () => void;
    selectAudioDevice: (audioDevice: MediaDeviceInfo) => void;
    selectVideoDevice: (videoDevice: MediaDeviceInfo) => void;
    localMediaJoinOptions: Partial<JoinOptions>;
}
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 JoinPageRoomInputComponents {
    ErrorComponent?: ComponentType<JoinPageErrorComponentProps>;
}
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;
    components?: JoinPageRoomInputComponents;
}
export interface JoinPageRoomButtonComponents {
    ErrorComponent?: ComponentType<JoinPageErrorComponentProps>;
}
export interface JoinPageRoomButtonsProps extends StyledComponent {
    joinAction: (joinOptions: JoinOptions) => void;
    authActions?: ZocksAuthActions;
    createRoomAction?: () => Promise<RoomInfo>;
    onNewRoomCreated?: (roomInfo: RoomInfo) => void;
    baseJoinOptions: Partial<JoinOptions>;
    joinNewRoomButtonLabel?: string;
    createNewRoomForLaterButtonLabel?: string;
    disabled?: boolean;
    missingScopeAction?: MissingScopeAction;
    onJoinError?: (e: ErrorResponse | string) => void;
    components?: JoinPageRoomButtonComponents;
}
export interface JoinPageErrorComponentProps extends StyledComponent {
    message: string;
}
