/home/bdqbpbxa/demo-subdomains/ping-proxies.goodface.com.ua/src/store/slices/GeneralSlice.js
import { createSlice, createSelector } from '@reduxjs/toolkit';
import { getGeneral } from 'api/General';
import { createRequest } from 'api/helpers';
import ROUTES from 'constants/routes';
import { selectDatacenterProxies, selectResidentialProxies, selectStaticResidentialProxies } from './PricingSlice';
import { selectFeatures } from './FeaturesSlice';

export const fetchGeneral = createRequest('fetchGeneral', getGeneral);

const generalSlice = createSlice({
    name: 'generalSlice',
    initialState: {
        general: {
            data: {
                attributes: null,
            },
        },
        isCookiesAgree: false,
        generalIsLoading: false,
    },
    reducers: {},
    extraReducers: builder => {
        builder.addCase(fetchGeneral.pending, state => {
            state.generalIsLoading = true;
        });
        builder.addCase(fetchGeneral.fulfilled, (state, action) => {
            state.generalIsLoading = false;
            state.general = action.payload;
        });
    },
});

export const selectGeneral = createSelector(
    [state => state.generalState.general],
    general => general.data.attributes || {},
);

export const selectSubscribe = createSelector([selectGeneral], general => general.post_subscribe || {});
export const selectHeader = createSelector([selectGeneral], general => general.header || {});
export const selectNav = createSelector([selectHeader], data => {
    return [
        {
            name: data.products,
            items: {
                datacenter_section: data.datacenter_section,
                residential_section: data.residential_section,
                datacenter_items: data.datacenter_items,
                residential_items: data.residential_items,
            }


        },
        {
            name: data.features,
            items: {
                our_features_sesction: data.our_features_sesction,
                locations_section: data.locations_section
            }
        },
        {
            name: data.company,
            items: {
                company_section: data.company_section,
                resources_section: data.resources_section,
                latest_news_section: data.latest_news_section,
                company_items: data.company_items,
                resources_items: data.resources_items,
            },
        },
        {
            name: data.pricing,
            link: ROUTES.pricing
        },
        {
            name: data.contacts,
            link: ROUTES.contacts
        },
    ]
});

export const selectBreadcrumbList = createSelector([selectHeader, selectFeatures], (headerData, featureData) => {
    const itemList = [
        ...(headerData.datacenter_items || []).filter(item => item.link && item.link !== "/"),
        ...(headerData.residential_items || []).filter(item => item.link && item.link !== "/"),
        ...(headerData.company_items || []).filter(item => item.link && item.link !== "/"),
        ...(headerData.resources_items || []).filter(item => item.link && item.link !== "/"),
        ...(ROUTES.pricing && ROUTES.pricing !== "/" ? [{ title: headerData.pricing, link: ROUTES.pricing }] : []),
        ...(ROUTES.contacts && ROUTES.contacts !== "/" ? [{ title: headerData.contacts, link: ROUTES.contacts }] : []),
        ...(featureData || []).filter(feature => feature.attributes.preview_title && feature.attributes.slug && feature.attributes.slug !== "/").map(feature => ({
            title: feature.attributes.preview_title,
            link: 'features/' + feature.attributes.slug
        }))
    ];

    return itemList.map(item => ({
        title: item.title,
        link: item.link
    }));
});



export const selectFooter = createSelector([selectGeneral], general => general.footer || {});
export const selectFZF = createSelector([selectGeneral], general => general.page_404 || {});
export const selectCookies = createSelector([selectGeneral], general => general.cookeis || {});
export const selectBanner = createSelector([selectGeneral], general => general.banner || {});
export const selectContactForm = createSelector([selectGeneral], general => general.contacts_form || {});
export const selectProductTable = createSelector([selectGeneral], general => general.compare_products || {});

export const selectProductCalc = createSelector([selectGeneral], general => general.product_pricing || {});

export const selectCurrentDatacenterProxies = createSelector([selectDatacenterProxies, selectProductCalc], (productData, general) => {
    const data = general.products?.find(item => item.unique_id === productData.product_id);
    return data
});
export const selectCurrentStaticResidentialProxies = createSelector([selectStaticResidentialProxies, selectProductCalc], (productData, general) => {
    const data = general.products?.find(item => item.unique_id === productData.product_id);
    return data
});
export const selectCurrentResidentialProxies = createSelector([selectResidentialProxies, selectProductCalc], (productData, general) => {
    const data = general.products?.find(item => item.unique_id === productData.product_id);
    return data
});


export const selectIsCookiesAgree = createSelector([selectGeneral], general => general.cookeis || {});
export const selectGeneralIsLoading = createSelector([state => state.generalState], data => data.generalIsLoading);

export default generalSlice.reducer;