// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
import { getIdentifierKind } from '@azure/communication-common';
import { fromFlatCommunicationIdentifier, memoizeFnAll } from "../../../acs-ui-common/src";
import { toFlatCommunicationIdentifier } from "../../../acs-ui-common/src";
import memoizeOne from 'memoize-one';
const convertRemoteParticipantToParticipantListParticipant = (userId, displayName, state, isMuted, isScreenSharing, isSpeaking, raisedHand, localUserCanRemoveOthers, reaction, spotlight, mediaAccess) => {
    const identifier = fromFlatCommunicationIdentifier(userId);
    return {
        userId,
        displayName,
        state,
        isMuted,
        isScreenSharing,
        isSpeaking,
        raisedHand,
        // ACS users can not remove Teams users.
        // Removing unknown types of users is undefined.
        isRemovable: (getIdentifierKind(identifier).kind === 'communicationUser' || getIdentifierKind(identifier).kind === 'phoneNumber') && localUserCanRemoveOthers,
        reaction,
        spotlight,
        mediaAccess
    };
};
/**
 * @private
 */
export const memoizedConvertAllremoteParticipants = memoizeFnAll((userId, displayName, state, isMuted, isScreenSharing, isSpeaking, raisedHand, localUserCanRemoveOthers, reaction, spotlight, mediaAccess) => {
    return convertRemoteParticipantToParticipantListParticipant(userId, displayName, state, isMuted, isScreenSharing, isSpeaking, raisedHand, localUserCanRemoveOthers, reaction, spotlight, mediaAccess);
});
/**
 * @private
 */
export const memoizedConvertToVideoTileReaction = memoizeOne((reactionState) => {
    return reactionState && reactionState.reactionMessage ? {
        reactionType: reactionState.reactionMessage.reactionType,
        receivedOn: reactionState.receivedOn
    } : undefined;
});
/**
 * @private
 */
export const memoizedSpotlight = memoizeOne((spotlightedParticipants, userId) => {
    const spotlightOrder = spotlightedParticipants === null || spotlightedParticipants === void 0 ? void 0 : spotlightedParticipants.find(spotlightedParticipant => toFlatCommunicationIdentifier(spotlightedParticipant.identifier) === userId);
    return spotlightOrder ? {
        spotlightedOrderPosition: spotlightOrder.order
    } : undefined;
});
//# sourceMappingURL=participantListSelectorUtils.js.map