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

interface UiState {
  sidebarOpen: boolean
  darkMode: boolean
  currentPage: string
  loading: {
    [key: string]: boolean
  }
}

const initialState: UiState = {
  sidebarOpen: true,
  darkMode: false,
  currentPage: "/",
  loading: {},
}

export const uiSlice = createSlice({
  name: "ui",
  initialState,
  reducers: {
    toggleSidebar: (state) => {
      state.sidebarOpen = !state.sidebarOpen
    },
    setSidebarOpen: (state, action: PayloadAction<boolean>) => {
      state.sidebarOpen = action.payload
    },
    toggleDarkMode: (state) => {
      state.darkMode = !state.darkMode
    },
    setDarkMode: (state, action: PayloadAction<boolean>) => {
      state.darkMode = action.payload
    },
    setCurrentPage: (state, action: PayloadAction<string>) => {
      state.currentPage = action.payload
    },
    setLoading: (state, action: PayloadAction<{ key: string; isLoading: boolean }>) => {
      const { key, isLoading } = action.payload
      state.loading[key] = isLoading
    },
  },
})

export const { toggleSidebar, setSidebarOpen, toggleDarkMode, setDarkMode, setCurrentPage, setLoading } =
  uiSlice.actions

export default uiSlice.reducer

