// // cartSlice.ts
// import { createSlice, PayloadAction, createEntityAdapter } from '@reduxjs/toolkit'

// interface CartItem {
//   id: string
//   name: string
//   price: number
//   quantity: number
//   image: string
// }

// const cartAdapter = createEntityAdapter<CartItem>({
//   selectId: item => item.id
// })

// const initialState = cartAdapter.getInitialState({
//   payment: {
//     total: 0,
//     shipping: 0,
//     discount: 0,
//     paid: 0,
//     due: 0,
//     method: 'cash'
//   }
// })

// const cartSlice = createSlice({
//   name: 'cart',
//   initialState,
//   reducers: {
//     addToCart: (state, action: PayloadAction<CartItem>) => {
//       const item = state.entities[action.payload.id]
//       if (item) {
//         item.quantity += action.payload.quantity
//       } else {
//         cartAdapter.addOne(state, action.payload)
//       }
//       state.payment.total += action.payload.price * action.payload.quantity
//     },
//     updateQuantity: (state, action: PayloadAction<{ id: string; quantity: number }>) => {
//       const item = state.entities[action.payload.id]
//       if (item) {
//         state.payment.total -= item.price * item.quantity
//         item.quantity = action.payload.quantity
//         state.payment.total += item.price * item.quantity
//       }
//     },
//     removeFromCart: (state, action: PayloadAction<string>) => {
//       const item = state.entities[action.payload]
//       if (item) {
//         state.payment.total -= item.price * item.quantity
//         cartAdapter.removeOne(state, action.payload)
//       }
//     },
//     clearCart: state => {
//       cartAdapter.removeAll(state)
//       state.payment.total = 0
//     }
//   }
// })

// export const { addToCart, removeFromCart, updateQuantity, clearCart } = cartSlice.actions
// export default cartSlice.reducer

// // 5️⃣ Export selectors
// export const {
//   selectAll: selectCartItems,
//   selectById: selectCartItemById,
//   selectIds: selectCartItemIds
// } = cartAdapter.getSelectors((state: any) => state.cart)


// sagar changes ////////////////
// import { createSlice, PayloadAction, createEntityAdapter } from '@reduxjs/toolkit'

// interface CartItem {
//   id: string
//   productUid: string
//   name: string
//   price: number
//   quantity: number
//   image: string
//   variation: any
// }

// const cartAdapter = createEntityAdapter<CartItem>({
//   selectId: item => item.id
// })

// const initialState = cartAdapter.getInitialState({
//   payment: {
//     total: 0,
//     shipping: 0,
//     discount: 0,
//     paid: 0,
//     due: 0,
//     method: 'cash'
//   }
// })

// const cartSlice = createSlice({
//   name: 'cart',
//   initialState,
//   reducers: {
//     addToCart: (state, action: PayloadAction<CartItem>) => {
//       const item = state.entities[action.payload.id]
//       if (item) {
//         item.quantity += action.payload.quantity
//       } else {
//         cartAdapter.addOne(state, action.payload)
//       }
//       // Recalculate total
//       const items = Object.values(state.entities)
//       state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
//     },
//     updateQuantity: (state, action: PayloadAction<{ id: string; quantity: number }>) => {
//       const item = state.entities[action.payload.id]
//       if (item) {
//         item.quantity = action.payload.quantity
//         const items = Object.values(state.entities)
//         state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
//       }
//     },
//     removeFromCart: (state, action: PayloadAction<string>) => {
//       const item = state.entities[action.payload]
//       if (item) {
//         cartAdapter.removeOne(state, action.payload)
//         const items = Object.values(state.entities)
//         state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
//       }
//     },
//     clearCart: state => {
//       cartAdapter.removeAll(state)
//       state.payment.total = 0
//     }
//   }
// })

// export const { addToCart, removeFromCart, updateQuantity, clearCart } = cartSlice.actions
// export default cartSlice.reducer

// export const {
//   selectAll: selectCartItems,
//   selectById: selectCartItemById,
//   selectIds: selectCartItemIds
// } = cartAdapter.getSelectors((state: any) => state.cartSlice)


// product issue solved 
// import { createSlice, PayloadAction, createEntityAdapter } from '@reduxjs/toolkit'

// interface CartItem {
//   id: string
//   productUid: string
//   name: string
//   price: number
//   quantity: number
//   image: string
//   variation: any
//   orderItemUid?: string
//   posUid?: string
//   orderUid?: string
//   stockQty?: number
//   productType?: string
//   isInventoryManaged?: boolean
//   selectedStaff?: string[]
// }

// const cartAdapter = createEntityAdapter<CartItem>({
//   selectId: item => item.id
// })

// const initialState = cartAdapter.getInitialState({
//   payment: {
//     total: 0,
//     shipping: 0,
//     discount: 0,
//     paid: 0,
//     due: 0,
//     method: 'cash'
//   }
// })

// const cartSlice = createSlice({
//   name: 'cart',
//   initialState,
//   reducers: {
//     addToCart: (state, action: PayloadAction<CartItem>) => {
//       const item = state.entities[action.payload.id]
//       if (item) {
//         item.quantity += action.payload.quantity
//         // Update stock if available
//         if (action.payload.stockQty !== undefined) {
//           item.stockQty = action.payload.stockQty
//         }
//       } else {
//         cartAdapter.addOne(state, action.payload)
//       }
//       // Recalculate total
//       const items = Object.values(state.entities)
//       state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
//     },
//     updateQuantity: (state, action: PayloadAction<{ id: string; quantity: number }>) => {
//       const item = state.entities[action.payload.id]
//       if (item) {
//         item.quantity = action.payload.quantity
//         const items = Object.values(state.entities)
//         state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
//       }
//     },
//     removeFromCart: (state, action: PayloadAction<string>) => {
//       const item = state.entities[action.payload]
//       if (item) {
//         cartAdapter.removeOne(state, action.payload)
//         const items = Object.values(state.entities)
//         state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
//       }
//     },
//     clearCart: state => {
//       cartAdapter.removeAll(state)
//       state.payment.total = 0
//     }
//   }
// })

// export const { addToCart, removeFromCart, updateQuantity, clearCart } = cartSlice.actions
// export default cartSlice.reducer

// export const {
//   selectAll: selectCartItems,
//   selectById: selectCartItemById,
//   selectIds: selectCartItemIds
// } = cartAdapter.getSelectors((state: any) => state.cartSlice)

// tyscript issue 
import { createSlice, PayloadAction, createEntityAdapter } from '@reduxjs/toolkit'

interface CartItem {
  id: string
  productUid: string
  name: string
  price: number
  quantity: number
  image: string
  variation: any
  orderItemUid?: string
  posUid?: string
  orderUid?: string
  stockQty?: number
  productType?: string
  isInventoryManaged?: boolean
  selectedStaff?: string[]
}

const cartAdapter = createEntityAdapter<CartItem>({
  selectId: item => item.id
})

const initialState = cartAdapter.getInitialState({
  payment: {
    total: 0,
    shipping: 0,
    discount: 0,
    paid: 0,
    due: 0,
    method: 'cash'
  }
})

const cartSlice = createSlice({
  name: 'cart',
  initialState,
  reducers: {
    addToCart: (state, action: PayloadAction<CartItem>) => {
      const item = state.entities[action.payload.id]
      if (item) {
        item.quantity += action.payload.quantity

        // Update stock if available
        if (action.payload.stockQty !== undefined) {
          item.stockQty = action.payload.stockQty
        }
      } else {
        cartAdapter.addOne(state, action.payload)
      }

      // Recalculate total - filter out undefined items
      const items = Object.values(state.entities).filter((item): item is CartItem => item !== undefined)
      state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
    },
    updateQuantity: (state, action: PayloadAction<{ id: string; quantity: number }>) => {
      const item = state.entities[action.payload.id]
      if (item) {
        item.quantity = action.payload.quantity

        // Recalculate total - filter out undefined items
        const items = Object.values(state.entities).filter((item): item is CartItem => item !== undefined)
        state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
      }
    },
    removeFromCart: (state, action: PayloadAction<string>) => {
      const item = state.entities[action.payload]
      if (item) {
        cartAdapter.removeOne(state, action.payload)

        // Recalculate total - filter out undefined items
        const items = Object.values(state.entities).filter((item): item is CartItem => item !== undefined)
        state.payment.total = items.reduce((sum, i) => sum + (i.price * i.quantity), 0)
      }
    },
    clearCart: state => {
      cartAdapter.removeAll(state)
      state.payment.total = 0
    }
  }
})

export const { addToCart, removeFromCart, updateQuantity, clearCart } = cartSlice.actions
export default cartSlice.reducer

export const {
  selectAll: selectCartItems,
  selectById: selectCartItemById,
  selectIds: selectCartItemIds
} = cartAdapter.getSelectors((state: any) => state.cartSlice)