import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  generatedScore: {},
  riskGaugeData: {},
  generatedScoreTracker: {},
  isLoadingTrackerScore: false,
  isLoadingScore: true,
  isGenerateScoreCall: false,
  isPropUploaded : false,
  generateScorePayload: {}
};
export const generateScoreSlice = createSlice({
  name: 'generateScore',
  initialState,
  reducers: {
    setGenerateScore: (state, action) => {
      const { payload } = action;
      state.generatedScore = payload;
      state.isGenerateScoreCall = true;
    },
    removeStandaloneScore: state => {
      if (state.generatedScoreTracker.standalone) {
        const updatedOb: any = { ...state.generatedScoreTracker };
        delete updatedOb.standalone;
        state.generatedScoreTracker = updatedOb;
      }
    },
    removeAllExceptStandalone: (state, action) => {
      const scoreWithFinancials = action.payload;
      const toRemoveObjArr = scoreWithFinancials ? ['rgBenchmark']: ['standalone'];
      Object.keys(state.generatedScoreTracker).forEach(trackerKey => {
        if(
          typeof state.generatedScoreTracker[trackerKey] === 'object'
          && !toRemoveObjArr.includes(trackerKey)
        ){
          state.generatedScoreTracker[trackerKey] = null;
        }
      });
    },
    setIsGenerateScoreCall: (state, action) => {
      state.isGenerateScoreCall = action.payload;
    },
    setLoadingState: (state, action) => {
      const { payload } = action;
      if (typeof payload?.trackerScoreLoader === 'boolean') {
        state.isLoadingTrackerScore = payload?.trackerScoreLoader;
      }
      if (typeof payload?.scoreLoader === 'boolean') {
        state.isLoadingScore = payload?.scoreLoader;
      }
    },
    setGenerateScoreTracker: (state, action) => {
      const { payload } = action;
      state.generatedScoreTracker = payload;
      state.isLoadingTrackerScore = false;
    },
    setRiskGaugeData: (state, action) => {
      state.riskGaugeData = action.payload;
      state.isLoadingScore = false;
    },
    setGenerateScorePayload: (state, action) => {
      state.generateScorePayload = action.payload;
    },
    setPropUploaded: (state, action) => {
      state.isPropUploaded = action.payload;
     }
  }
});

export const {
  setGenerateScore,
  setGenerateScoreTracker,
  removeStandaloneScore,
  setLoadingState,
  setRiskGaugeData,
  setIsGenerateScoreCall,
  removeAllExceptStandalone,
  setGenerateScorePayload,
  setPropUploaded
} = generateScoreSlice.actions;

export default generateScoreSlice.reducer;
