import { createAsyncThunk, createSlice, PayloadAction } from "@reduxjs/toolkit";
import axiosInstanceClient from "@/utils/axiosClient";

interface CrudState {
  mainLoader: boolean;
  allCategoriesItems: any[];
  error: { status: number | null };
}

const initialState: CrudState = {
  mainLoader: true,
  allCategoriesItems: [],
  error: { status: null },
};

export const getAllCategories = createAsyncThunk(
  "categories/getAllCategories",
  async (_, { rejectWithValue }) => {
    try {
      const { data } = await axiosInstanceClient.get(
        "guest/categories?paginate=0",
      );
      return data?.data || [];
    } catch (error: any) {
      return rejectWithValue({ status: error.response?.status || 404 });
    }
  },
);

// Slice
const categoriesSlice = createSlice({
  name: "categories",
  initialState,
  reducers: {},
  extraReducers: (builder) => {
    builder
      .addCase(getAllCategories.pending, (state) => {
        state.mainLoader = true;
      })
      .addCase(getAllCategories.fulfilled, (state, action) => {
        state.mainLoader = false;
        state.allCategoriesItems = action.payload;
      })
      .addCase(getAllCategories.rejected, (state: any, action) => {
        state.mainLoader = false;
        state.error = action.payload;
      });
  },
});

export default categoriesSlice.reducer;
