/* eslint-disable no-param-reassign,import/prefer-default-export */
import { createSlice } from '@reduxjs/toolkit';

import { RequestStatus } from './constants';

const blocksSlice = createSlice({
  name: 'courseBlocks',
  initialState: {
    status: RequestStatus.IN_PROGRESS,
    topics: {
      // Maps topic id to the discussion course path and link
    },
    // List of chapter blocks in the course. Rest of the structure can be derived from children of topics
    chapters: [],
    // Mapping of block keys to block data
    blocks: {},
  },
  reducers: {
    fetchCourseBlocksRequest: (state) => {
      state.status = RequestStatus.IN_PROGRESS;
    },
    fetchCourseBlocksSuccess: (state, { payload }) => {
      state.status = RequestStatus.SUCCESSFUL;
      Object.assign(state, payload);
    },
    fetchCourseBlocksFailed: (state) => {
      state.status = RequestStatus.FAILED;
    },
    fetchCourseBlocksDenied: (state) => {
      state.status = RequestStatus.DENIED;
    },
  },
});

export const {
  fetchCourseBlocksRequest,
  fetchCourseBlocksSuccess,
  fetchCourseBlocksFailed,
  fetchCourseBlocksDenied,
} = blocksSlice.actions;

export const blocksReducer = blocksSlice.reducer;