import { createSlice, PayloadAction } from '@reduxjs/toolkit';
import { blockReferences, websiteSetup } from '@/constants/setup/website-setup';
import { filter, find, isEmpty } from 'lodash';
import { sliceNames } from '@/src/constants/redux/redux';

export interface BasicDetailsStateProps {
    shipmentSettings: any;
    defualtSettings: any;
    websiteSettings: any,
    deliverySlots: any;
    checkout: any;
    productDetailsPageData: any;
    marketingAnalytics: any
    socialMediaValues: any;
    basicDetailsSettings: any;
    navigationMenu: any;
    catalog: any;
    newsLetterContent: any;
    lastFetched: string | null;
}

const initialState: BasicDetailsStateProps = {
    shipmentSettings: null,
    websiteSettings: null,
    defualtSettings: null,
    deliverySlots: null,
    checkout: null,
    productDetailsPageData: null,
    socialMediaValues: null,
    basicDetailsSettings: null,
    marketingAnalytics: null,
    navigationMenu: null,
    catalog: null,
    newsLetterContent: null,
    lastFetched: null,
};

const basicDetailsSlice = createSlice({
    name: sliceNames.basicDetails,
    initialState,
    reducers: {
        setBasicDetails(state, action: PayloadAction<{ data: any; timestamp: string }>) {
            const pageData: any = action.payload.data;
            state.lastFetched = action.payload.timestamp;
            const shipmentSettings = find(pageData, (data: any) => (data.blockReference === blockReferences.shipmentSettings))?.blockValues;
            const defualtSettings = find(pageData, (data: any) => (data.blockReference === blockReferences.defualtSettings))?.blockValues;
            const deliverySlots = find(pageData, (data: any) => (data.blockReference === blockReferences.deliverySlots))?.blockValues;
            const checkout = find(pageData, (data: any) => (data.blockReference === blockReferences.checkout))?.blockValues;
            const productDetails = find(pageData, (data: any) => (data.blockReference === blockReferences.productDetails))?.blockValues;

            const marketingAnalytics = find(pageData, (data: any) => (data.blockReference === blockReferences.marketingScripts))?.blockValues;

            const socialMediaValues = find(pageData, (data: any) => (data.blockReference === blockReferences.socialMedia))?.blockValues;
            const basicDetailsSettings = find(pageData, (data: any) => (data.blockReference === blockReferences.basicDetailsSettings))?.blockValues;

            const navigationMenu = filter(pageData, (data: any) =>
                data.block === websiteSetup.menu &&
                (data.blockReference === blockReferences.desktopMenu ||
                    data.blockReference === blockReferences.footerMenu)
            );

            const catalog = find(pageData, (data: any) => (data.blockReference === blockReferences.catalog))?.blockValues;
            const newsLetterContent = find(pageData, (data: any) => (data.blockReference === blockReferences.socialMedia))?.blockValues

            const websiteSettings = find(pageData, (data: any) => (data.blockReference === blockReferences.websiteSettings))?.blockValues

            if (!isEmpty(shipmentSettings)) {
                state.shipmentSettings = shipmentSettings;
            }
            if (!isEmpty(marketingAnalytics)) {
                state.marketingAnalytics = marketingAnalytics;
            }
            if (!isEmpty(websiteSettings)) {
                state.websiteSettings = websiteSettings;
            }
            if (!isEmpty(defualtSettings)) {
                state.defualtSettings = defualtSettings;
            }
            if (!isEmpty(deliverySlots)) {
                state.deliverySlots = deliverySlots;
            }
            if (!isEmpty(checkout)) {
                state.checkout = checkout;
            }
            if (!isEmpty(socialMediaValues)) {
                state.socialMediaValues = socialMediaValues;
            }
            if (!isEmpty(basicDetailsSettings)) {
                state.basicDetailsSettings = basicDetailsSettings;
            }

            if (!isEmpty(catalog)) {
                state.catalog = catalog;
            }
            if (!isEmpty(productDetails)) {
                state.productDetailsPageData = productDetails;
            }

            if (!isEmpty(navigationMenu)) {
                state.navigationMenu = navigationMenu;
            }
            if (!isEmpty(newsLetterContent)) {
                state.newsLetterContent = newsLetterContent;
            }
        },
    },
});

export const { setBasicDetails } = basicDetailsSlice.actions;
export default basicDetailsSlice.reducer;
