import { createSlice } from "@reduxjs/toolkit";

const initialState: any = {
  currentSidebarTab: false,
  isBookMarkedList: [],
  isFavoriteList: [],
  savedCampaigns: {},
  notificationDetailState: null,
  AddedInfluencer: [],
};

const userDetailSidebarSlice = createSlice({
  name: "User Sidebar Details",
  initialState: initialState,
  reducers: {
    setCurrentSidebarTab: (state, actions) => {
      state.currentSidebarTab = actions.payload;
    },
    setIsBookMarkedList: (state, actions) => {
      state.isBookMarkedList = actions.payload;
    },
    setIsFavoriteList: (state, actions) => {
      state.isFavoriteList = actions.payload;
    },
    setNotificationDetailState: (state, actions) => {
      state.notificationDetailState = actions.payload;
    },
    toggleSavedCampaign: (state, action) => {
      const { campaignId, value } = action.payload;
      state.savedCampaigns[campaignId] = value;
    },
    setInfluencerToCampaign: (state, action) => {
      const { influencerId, isAddedToCampaign } = action.payload;

      // Update the added influencer list
      const influencerIndex = state.AddedInfluencer.findIndex(
        (influencer) => influencer.id === influencerId
      );

      if (influencerIndex >= 0) {
        state.AddedInfluencer[influencerIndex].isCampaignAdded =
          isAddedToCampaign;
      } else {
        state.AddedInfluencer.push({
          id: influencerId,
          isCampaignAdded: isAddedToCampaign,
        });
      }

      // Update the button text in the main listing by mapping through the influencer list and updating it
      const updatedInfluencerList = state.AddedInfluencer.map((influencer) => {
        return {
          ...influencer,
          buttonText: influencer.isCampaignAdded
            ? "Added to Campaign"
            : "Add to Campaign",
        };
      });

      state.AddedInfluencer = updatedInfluencerList;
    },
  },
});

export const {
  setCurrentSidebarTab,
  setIsBookMarkedList,
  setIsFavoriteList,
  setNotificationDetailState,
  toggleSavedCampaign,
  setInfluencerToCampaign,
} = userDetailSidebarSlice.actions;

export default userDetailSidebarSlice.reducer;
