import { createSlice, createAsyncThunk, type PayloadAction } from "@reduxjs/toolkit"

// Define a type for the business vertical
export interface BusinessVertical {
  id: number
  name: string
  teamMembersCount: number
}

// Define the state type
interface BusinessVerticalsState {
  items: BusinessVertical[]
  status: "idle" | "loading" | "succeeded" | "failed"
  error: string | null
  selectedVertical: BusinessVertical | null
  filters: {
    search: string
  }
}

// Initial state
const initialState: BusinessVerticalsState = {
  items: [],
  status: "idle",
  error: null,
  selectedVertical: null,
  filters: {
    search: "",
  },
}

// Sample data for initial development
const sampleBusinessVerticals: BusinessVertical[] = [
  { id: 1, name: "Transport", teamMembersCount: 24 },
  { id: 2, name: "Furnished Homes", teamMembersCount: 18 },
  { id: 3, name: "Visa", teamMembersCount: 12 },
]

// Async thunks for API calls
export const fetchBusinessVerticals = createAsyncThunk(
  "businessVerticals/fetchBusinessVerticals",
  async (_, { rejectWithValue }) => {
    try {
      // In a real app, this would be an API call
      await new Promise((resolve) => setTimeout(resolve, 1000))
      return sampleBusinessVerticals
    } catch (error) {
      return rejectWithValue("Failed to fetch business verticals")
    }
  },
)

// Create the slice
const businessVerticalsSlice = createSlice({
  name: "businessVerticals",
  initialState,
  reducers: {
    setSelectedVertical: (state, action: PayloadAction<BusinessVertical | null>) => {
      state.selectedVertical = action.payload
    },
    updateFilters: (state, action: PayloadAction<Partial<BusinessVerticalsState["filters"]>>) => {
      state.filters = { ...state.filters, ...action.payload }
    },
    resetFilters: (state) => {
      state.filters = initialState.filters
    },
  },
  extraReducers: (builder) => {
    builder
      .addCase(fetchBusinessVerticals.pending, (state) => {
        state.status = "loading"
      })
      .addCase(fetchBusinessVerticals.fulfilled, (state, action) => {
        state.status = "succeeded"
        state.items = action.payload
      })
      .addCase(fetchBusinessVerticals.rejected, (state, action) => {
        state.status = "failed"
        state.error = action.payload as string
      })
  },
})

export const { setSelectedVertical, updateFilters, resetFilters } = businessVerticalsSlice.actions

export default businessVerticalsSlice.reducer

