import { Map as ImmutableMap, fromJS } from 'immutable'
import {
  CHAT_MESSAGES_SEND_SUCCESS,
  CHAT_MESSAGES_DELETE_REQUEST,
  CHAT_MESSAGES_PURGE_REQUEST,
} from '../actions/chat_messages'
import {
  CHAT_MESSAGES_IMPORT,
} from '../actions/importer'

const importChatMessage = (state, chatMessage) => state.set(chatMessage.id, fromJS(chatMessage))

const importChatMessages = (state, chatMessages) =>
  state.withMutations((mutable) => chatMessages.forEach((chatMessage) => importChatMessage(mutable, chatMessage)))

const deleteChatMessage = (state, id) => {
  return state.delete(id)
}

const initialState = ImmutableMap()

export default function chat_messages(state = initialState, action) {
  switch(action.type) {
  case CHAT_MESSAGES_IMPORT:
    return importChatMessages(state, action.chatMessages)
  case CHAT_MESSAGES_SEND_SUCCESS:
    return importChatMessage(state, action.chatMessage)
  case CHAT_MESSAGES_DELETE_REQUEST:
    return deleteChatMessage(state, action.chatMessageId)
  case CHAT_MESSAGES_PURGE_REQUEST:
    return state
  default:
    return state
  }
}