text: // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
  // See LICENSE.txt for license information.
  
  import {createSelector} from 'reselect';
  
  import {getCurrentChannelId, getUnreadsInCurrentTeam} from 'mattermost-redux/selectors/entities/channels';
  import {getCurrentTeamId, getTeamMemberships} from 'mattermost-redux/selectors/entities/teams';
  
  const emptyDraft = {
      draft: '',
      files: [],
  };
  
  function getChannelDrafts(state) {
      return state.views.channel.drafts;
  }
  
  function getThreadDrafts(state) {
      return state.views.thread.drafts;
  }
  
  export const getCurrentChannelDraft = createSelector(
      getChannelDrafts,
      getCurrentChannelId,
      (drafts, currentChannelId) => {
          return drafts[currentChannelId] || emptyDraft;
      }
  );
  
  export function getDraftForChannel(state, channelId) {
      const drafts = getChannelDrafts(state);
      return drafts[channelId] || emptyDraft;
  }
  
  export const getThreadDraft = createSelector(
      getThreadDrafts,
      (state, rootId) => rootId,
      (drafts, rootId) => {
          return drafts[rootId] || emptyDraft;
      }
  );
  
  export function getProfileImageUri(state) {
      return state.views.user.profileImageUri;
  }
  
  export const getBadgeCount = createSelector(
      getCurrentTeamId,
      getTeamMemberships,
      getUnreadsInCurrentTeam,
      (currentTeamId, myTeamMembers, {mentionCount, messageCount}) => {
          let mentions = mentionCount;
          let messages = messageCount;
  
          const members = Object.values(myTeamMembers).filter((m) => m.team_id !== currentTeamId);
          members.forEach((m) => {
              mentions += (m.mention_count || 0);
              messages += (m.msg_count || 0);
          });
  
          let badgeCount = 0;
          if (mentions) {
              badgeCount = mentions;
          } else if (messages) {
              badgeCount = -1;
          }
  
          return badgeCount;
      }
  );
  