/home/bdqbpbxa/demo-subdomains/ping-proxies.goodface.com.ua/src/store/slices/PricingSlice.js
import { createSlice, createSelector } from '@reduxjs/toolkit';
import { getPricing, getProductsData } from 'api/Pricing';
import { createRequest } from 'api/helpers';

export const fetchPricing = createRequest('fetchPricing', getPricing, (_, { getState }) => {
    const { attributes } = getState().pricingState.pricing.data;
    return !attributes;
});

export const fetchProductsData = createRequest('fetchProductsData', getProductsData, (_, { getState }) => {
    const { pingProductsData } = getState().pricingState;
    return !pingProductsData;
});

const PricingSlice = createSlice({
    name: 'PricingSlice',
    initialState: {
        pricing: {
            data: {
                attributes: null,
            },
        },
        pricingIsLoading: false,
        pingProductsData: null,
        pingProductsIsLoading: false,
    },
    reducers: {},
    extraReducers: builder => {
        builder
            .addCase(fetchPricing.pending, state => {
                state.pricingIsLoading = true;
            })
            .addCase(fetchPricing.fulfilled, (state, action) => {
                state.pricingIsLoading = false;
                state.pricing = action.payload;
            });
        builder
            .addCase(fetchProductsData.pending, state => {
                state.pingProductsIsLoading = true;
            })
            .addCase(fetchProductsData.fulfilled, (state, action) => {
                state.pingProductsIsLoading = false;
                state.pingProductsData = action.payload.data;
            });
    },
});

export const selectPricing = createSelector([state => state.pricingState.pricing], pricing => pricing.data.attributes);

export const selectPricingTitle = createSelector([selectPricing], data => data?.title || '');
export const selectPricingDescription = createSelector([selectPricing], data => data?.description || '');
export const selectPricingCTA = createSelector([selectPricing], data => data?.cta || {});
export const selectPricingCompare = createSelector([selectPricing], data => data?.compare_products || {});
export const selectPricingCTAFooter = createSelector([selectPricing], data => data?.cta_footer || {});
export const selectPricingPayments = createSelector([selectPricing], data => data?.payments || {});
export const selectPricingFAQ = createSelector([selectPricing], data => data?.faq || {});

export const selectPricingIsLoading = createSelector([state => state.pricingState], data => data.pricingIsLoading);

export const selectPingProducts = createSelector(
    [state => state.pricingState.pingProductsData],
    data => data?.products,
);
export const selectPingProductsIsLoading = createSelector(
    [state => state.pricingState],
    data => data.pingProductsIsLoading,
);

export const selectDatacenterProxies = createSelector(
    [selectPingProducts],
    products => products?.find(product => product.product_type === 'datacenter' && product.country_id === 'us') || {},
);
export const selectStaticResidentialProxies = createSelector(
    [selectPingProducts],
    products => products?.find(product => product.product_type === 'isp' && product.country_id === 'us') || {},
);
export const selectResidentialProxies = createSelector(
    [selectPingProducts],
    products => products?.find(product => product.product_type === 'residential') || {},
);

export default PricingSlice.reducer;