import { createSelector } from "reselect";
import { selectUser } from "selectors/user";

const _selectState = state => state.rewards || {};

export const selectRewardsByType = createSelector(
  _selectState,
  state => state.rewardsByType || {}
);

export const selectRewards = createSelector(
  selectRewardsByType,
  byType => Object.values(byType) || []
);

export const selectIsRewardEligible = createSelector(
  selectUser,
  user => user.can_claim_rewards
);

export const selectFetchingRewards = createSelector(
  _selectState,
  state => !!state.fetching
);

export const selectHasClaimedReward = (state, props) => {
  const reward = selectRewardsByType(state)[props.reward_type];
  return reward && reward.transaction_id !== "";
};

export const makeSelectHasClaimedReward = () => {
  return createSelector(selectHasClaimedReward, claimed => claimed);
};

export const selectClaimsPendingByType = createSelector(
  _selectState,
  state => state.claimPendingByType
);

const selectIsClaimRewardPending = (state, props) => {
  return selectClaimsPendingByType(state, props)[props.reward_type];
};

export const makeSelectIsRewardClaimPending = () => {
  return createSelector(selectIsClaimRewardPending, isClaiming => isClaiming);
};

export const selectClaimErrorsByType = createSelector(
  _selectState,
  state => state.claimErrorsByType
);

const selectClaimRewardError = (state, props) => {
  return selectClaimErrorsByType(state, props)[props.reward_type];
};

export const makeSelectClaimRewardError = () => {
  return createSelector(selectClaimRewardError, errorMessage => errorMessage);
};

const selectRewardByType = (state, props) => {
  return selectRewardsByType(state)[props.reward_type];
};

export const makeSelectRewardByType = () => {
  return createSelector(selectRewardByType, reward => reward);
};