import { configureStore } from "@reduxjs/toolkit";
import { userReducer } from "./reducers/user";

const savedCartItems = typeof window !== "undefined" && localStorage.getItem("cartItems")
  ? JSON.parse(localStorage.getItem("cartItems")!)
  : [];

const savedAddress = typeof window !== "undefined" && localStorage.getItem("selectedAddress")
  ? JSON.parse(localStorage.getItem("selectedAddress")!)
  : null;

const preloadedState = {
  user: {
    profile: {
      cartItems: savedCartItems,
      selectedAddress: savedAddress,  
      profileDetail: null,
      orderDetail: null,
      loading: false,
      success: false,
      error: null,
    },
  },
};

const store = configureStore({
  reducer: {
    user: userReducer,
  },
  preloadedState,
});

store.subscribe(() => {
  const state = store.getState();
  const cartItems = state.user?.profile?.cartItems;
  const selectedAddress = state.user?.profile?.selectedAddress;

  if (typeof window !== "undefined") {
    if (cartItems) {
      localStorage.setItem("cartItems", JSON.stringify(cartItems));
    }

    if (selectedAddress) {
      localStorage.setItem("selectedAddress", JSON.stringify(selectedAddress));
    } else {
      localStorage.removeItem("selectedAddress");
    }
  }
});

export type RootState = ReturnType<typeof store.getState>;
export type AppDispatch = typeof store.dispatch;

export default store;
