const participantsReducer = (state: any[], action: { type: string, payload: any}) => {
  switch (action.type) {
    case 'add':
      if (action.payload?.email === "bot-recorder@vroom.com") {
        return state
      }

      if (state?.length > 0) {
        const nIdx = state.findIndex((i: any) => i.id === action.payload.id)

        if (nIdx > -1) {
          state[nIdx] = {...state[nIdx], ...action.payload}

          return state
        }
      }

      return [...state, action.payload]
    case 'remove':
      return state.filter(i => i.id !== action.payload.id)
    case 'set_video_stream': {
      const nIdx = state.findIndex((i: any) => i.id === action.payload.id)

      if (action.payload.type === 'video') {
        if (nIdx > -1) {
          state[nIdx].videoMediaStream = action.payload.mediaStream
        } else {
          state[state.length] = {
            id: action.payload.id,
            hasVideo: true,
            videoMediaStream: action.payload.mediaStream
          }
        }
      }

      return state
    }
    case 'set_audio_stream': {
      const nIdx = state.findIndex((i: any) => i.id === action.payload.id)

      if (nIdx > -1 && action.payload.type === 'audio') {
        state[nIdx].audioMediaStream = action.payload.mediaStream
      }

      return state
    }
    default:
      return state
  }
}

export default participantsReducer
