import { useSelector } from 'react-redux';

import { IReduxState } from '../app/types';
import { isJwtFeatureEnabled } from '../base/jwt/functions';
import { isLocalParticipantModerator } from '../base/participants/functions';
import { isInBreakoutRoom } from '../breakout-rooms/functions';

import { getLiveStreaming } from './components/LiveStream/functions';
import LiveStreamButton from './components/LiveStream/web/LiveStreamButton';
import RecordButton from './components/Recording/web/RecordButton';
import { getRecordButtonProps, isLiveStreamingButtonVisible } from './functions';


const recording = {
    key: 'recording',
    Content: RecordButton,
    group: 2
};

const livestreaming = {
    key: 'livestreaming',
    Content: LiveStreamButton,
    group: 2
};

/**
 * A hook that returns the recording button if it is enabled and undefined otherwise.
 *
 *  @returns {Object | undefined}
 */
export function useRecordingButton() {
    const recordingProps = useSelector(getRecordButtonProps);
    const toolbarButtons = useSelector((state: IReduxState) => state['features/toolbox'].toolbarButtons);

    if (toolbarButtons?.includes('recording') && recordingProps.visible) {
        return recording;
    }

}

/**
 * A hook that returns the livestreaming button if it is enabled and undefined otherwise.
 *
 *  @returns {Object | undefined}
 */
export function useLiveStreamingButton() {
    const toolbarButtons = useSelector((state: IReduxState) => state['features/toolbox'].toolbarButtons);
    const localParticipantIsModerator = useSelector(isLocalParticipantModerator);
    const liveStreaming = useSelector(getLiveStreaming);
    const liveStreamingAllowed = useSelector((state: IReduxState) =>
        isJwtFeatureEnabled(state, 'livestreaming', localParticipantIsModerator, false));
    const _isInBreakoutRoom = useSelector(isInBreakoutRoom);

    if (toolbarButtons?.includes('recording')
            && isLiveStreamingButtonVisible({
                liveStreamingAllowed,
                liveStreamingEnabled: liveStreaming?.enabled,
                isInBreakoutRoom: _isInBreakoutRoom
            })) {
        return livestreaming;
    }
}
