import {tolerant_selector} from './base'
import {get_missions_workplace_id} from 'selectors/mission_workplace'
import {
  create_hash, hash_each, map_hash, array_from_set, set_from_array, split_array,
} from 'common/utilities'

const get_raw_mission_users = (state) => state.missions.users
const get_raw_users = (state) => state.users.users

export const get_user_assigned_mission_ids = tolerant_selector(
  [get_raw_mission_users, get_raw_users],
  (mission_users, users) => {
    const user_assigned_mission_ids = create_hash(
      Object.keys(users),
      (user_id) => []
    )
    hash_each(mission_users, (mission_id, user_statuses) => {
      hash_each(user_statuses, (user_id, status) => {
        if (status == 'assigned') {
          if (!user_assigned_mission_ids[user_id]) {
            user_assigned_mission_ids[user_id] = []
          }
          user_assigned_mission_ids[user_id].push(mission_id)
        }
      })
    })
    return user_assigned_mission_ids
  }
)

export const get_user_workplaces_count = tolerant_selector(
  [get_user_assigned_mission_ids, get_missions_workplace_id],
  (user_assigned_mission_ids, missions_workplace_id) => map_hash(
    user_assigned_mission_ids,
    (mission_ids) => {
      const workplace_ids = mission_ids.map((mission_id) => missions_workplace_id[mission_id]).filter(Boolean)
      return map_hash(
        split_array(workplace_ids, (workplace_id) => workplace_id),
        (workplace_ids) => workplace_ids.length,
      )
    }
  )
)
