import { createSelector } from "reselect";

export const _selectState = state => state.user || {};

export const selectAuthenticationIsPending = createSelector(
  _selectState,
  state => state.authenticationIsPending
);

export const selectUserIsPending = createSelector(
  _selectState,
  state => state.userIsPending
);

export const selectUser = createSelector(_selectState, state => state.user);

export const selectEmailToVerify = createSelector(
  _selectState,
  state => state.emailToVerify
);

export const selectUserEmail = createSelector(
  selectUser,
  user => (user ? user.primary_email : null)
);

export const selectUserIsRewardApproved = createSelector(
  selectUser,
  user => user && user.is_reward_approved
);

export const selectEmailNewIsPending = createSelector(
  _selectState,
  state => state.emailNewIsPending
);

export const selectEmailNewErrorMessage = createSelector(
  _selectState,
  state => state.emailNewErrorMessage
);

export const selectEmailVerifyIsPending = createSelector(
  _selectState,
  state => state.emailVerifyIsPending
);

export const selectEmailVerifyErrorMessage = createSelector(
  _selectState,
  state => state.emailVerifyErrorMessage
);

export const selectIdentityVerifyIsPending = createSelector(
  _selectState,
  state => state.identityVerifyIsPending
);

export const selectIdentityVerifyErrorMessage = createSelector(
  _selectState,
  state => state.identityVerifyErrorMessage
);

export const selectUserIsVerificationCandidate = createSelector(
  selectUser,
  user => user && (!user.has_verified_email || !user.is_identity_verified)
);

export const selectAccessToken = createSelector(
  _selectState,
  state => state.accessToken
);

export const selectUserInviteStatusIsPending = createSelector(
  _selectState,
  state => state.inviteStatusIsPending
);

export const selectUserInvitesRemaining = createSelector(
  _selectState,
  state => state.invitesRemaining
);

export const selectUserInvitees = createSelector(
  _selectState,
  state => state.invitees
);

export const selectUserInviteStatusFailed = createSelector(
  selectUserInvitesRemaining,
  inviteStatus => selectUserInvitesRemaining === null
);

export const selectUserInviteNewIsPending = createSelector(
  _selectState,
  state => state.inviteNewIsPending
);

export const selectUserInviteNewErrorMessage = createSelector(
  _selectState,
  state => state.inviteNewErrorMessage
);