import {tolerant_selector} from 'selectors/base'
import store from 'common/store'
import {action_update_recruiter, recruiter_full_name} from 'common/recruiters'
import {map_hash, array_from_hash} from 'common/utilities'
import {remove_team} from 'actions/recruiters'

const get_raw_teams = (state) => state.recruiters.teams
const get_raw_recruiters = (state) => state.recruiters.recruiters

export const get_recruiters = tolerant_selector(
  [get_raw_recruiters, get_raw_teams],
  (recruiters, teams) => map_hash(recruiters, (recruiter) => ({
    ...recruiter,
    full_name: recruiter_full_name(recruiter),
    team: recruiter.team_id ? teams[recruiter.team_id] || {} : null,
    update(new_recruiter) {
      action_update_recruiter({id: recruiter.id, ...new_recruiter})
      if (array_from_hash(recruiters).filter(({id, team_id}) => id != recruiter.id && team_id == recruiter.team_id).length == 0) {
        store.dispatch(remove_team(recruiter.team_id))
      }
    },
  }))
)

export const get_teams = get_raw_teams
