import { Map as ImmutableMap, fromJS } from 'immutable';

import {
  SCHEDULED_STATUSES_FETCH_SUCCESS,
  SCHEDULED_STATUS_CANCEL_REQUEST,
  SCHEDULED_STATUS_CANCEL_SUCCESS,
} from 'soapbox/actions/scheduled_statuses';
import { STATUS_CREATE_SUCCESS } from 'soapbox/actions/statuses';

import { STATUS_IMPORT, STATUSES_IMPORT } from '../actions/importer';

const importStatus = (state, status) => {
  if (!status.scheduled_at) return state;
  return state.set(status.id, fromJS(status));
};

const importStatuses = (state, statuses) =>
  state.withMutations(mutable => statuses.forEach(status => importStatus(mutable, status)));

const deleteStatus = (state, id) => state.delete(id);

const initialState = ImmutableMap();

export default function scheduled_statuses(state = initialState, action) {
  switch(action.type) {
  case STATUS_IMPORT:
  case STATUS_CREATE_SUCCESS:
    return importStatus(state, action.status);
  case STATUSES_IMPORT:
  case SCHEDULED_STATUSES_FETCH_SUCCESS:
    return importStatuses(state, action.statuses);
  case SCHEDULED_STATUS_CANCEL_REQUEST:
  case SCHEDULED_STATUS_CANCEL_SUCCESS:
    return deleteStatus(state, action.id);
  default:
    return state;
  }
}