import { createSlice } from '@reduxjs/toolkit';

const initialState = {
  companyMetaData: {},
  companyData: {},
  epdState: {},
  expectedPdData: {},
  companySelectedData: {},
  extractedData: {},
  isValid: null,
  enableValidation: null,
  models: {},
  rgModalOpen: false,
  isBackButton: false,
  retainValues: true,
  expectedPitMsScore: {},
  newCompanyName: '',
  createdCompanyId: null,
  companyInfoLoaded: false,
  hasStates: false,
  isLoadBtnDisabled: false
};

export const companyInformationSlice = createSlice({
  name: 'companyInformation',
  initialState,
  reducers: {
    enableValidation: (state, action) => {
      state.enableValidation = action.payload;
    },
    isValid: (state, action) => {
      state.isValid = action.payload;
    },
    setCompanyMetaData: (state, action) => {
      state.companyMetaData = action.payload;
    },
    setexpectedPdData: (state, action) => {
      state.expectedPdData = action.payload;
    },
    setExpectedPitMsScoreData: (state, action) => {
      state.expectedPitMsScore = action.payload;
    },
    setCompanyData: (state, action) => {
      const companyObj = {...action.payload};
      if(!action?.payload?.companyName){
        companyObj.companyName = state.companyData.companyName;
      }
      state.companyData = companyObj;
      state.companyInfoLoaded = true;
    },
    setExtractedData: (state, action) => {
      state.extractedData = action.payload;
    },
    setCompanySelectedData: (state, action) => {
      state.companySelectedData = action.payload;
    },
    setNewCompanyName: (state, action) => {
      const { newCompanyName, createdCompanyId } = action.payload;
      state.newCompanyName = newCompanyName;
      if(createdCompanyId) {
        state.createdCompanyId = createdCompanyId;
      }
    },
    updateModels: (state, action) => {
      if(typeof action.payload === 'object'){
        state.models = action.payload;
      } else {
        state.rgModalOpen = action.payload;
      }
    },
    isBackButton: (state, action) => {
      state.isBackButton = action.payload;
    },
    setEPDState: (state, action) => {
        state.epdState = action.payload;
    },
    resetEPDState: state => {
      state.epdState = initialState.epdState;
    },
    isCompanyInfoLoaded: (state, action) => {
      state.companyInfoLoaded = action.payload;
    },
    hasStatesOption: (state, action)=>{
      state.hasStates = action.payload;
    },
    setLoadButtonStatus: (state, action) => {
      state.isLoadBtnDisabled = action.payload;
    }
  }
});

export const { enableValidation, isValid, setCompanyMetaData, setExtractedData,
  setCompanyData, setNewCompanyName, setCompanySelectedData, updateModels, setexpectedPdData,
  setEPDState, isBackButton, resetEPDState, setExpectedPitMsScoreData, isCompanyInfoLoaded,
  hasStatesOption, setLoadButtonStatus }
= companyInformationSlice.actions;

export default companyInformationSlice.reducer;

