import getCustomerId from '../../utils/get-customer-id'
import type { WishlistEndpoint } from '.'
import { normalizeWishlistItem } from '../../../lib/normalize'
import removeItemFromWishlistMutation from '../../mutations/removeItemFromWishlist-mutation'

// Return wishlist info
const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({
  res,
  body: { customerToken, itemId },
  config,
  commerce,
}) => {
  const token = customerToken ? Buffer.from(customerToken, 'base64').toString('ascii'): null;
  const accessToken = token ? JSON.parse(token).accessToken : null;
  let result: { data?: any } = {}
  let wishlist: any

  const customerId = customerToken && (await getCustomerId({ customerToken, config }))
  const wishlistName= config.defaultWishlistName
  const wishlistResponse = await commerce.getCustomerWishlist({
    variables: { customerId, wishlistName },
    config,
  })
  wishlist= wishlistResponse?.wishlist 
  
  if (!wishlist || !itemId) {
    return res.status(400).json({
      data: null,
      errors: [{ message: 'Invalid request' }],
    })
  }
  const removedItem = wishlist?.items?.find(
    (item:any) => {
      return item.product.productCode === itemId;
    }
  );

  const removeItemFromWishlistResponse = await config.fetch(
    removeItemFromWishlistMutation,
    {
      variables: {
        wishlistId: wishlist?.id,
        wishlistItemId: removedItem?.id
      },
    },
    { headers: { 'x-vol-user-claims': accessToken } }
  )

  if(removeItemFromWishlistResponse?.data?.deleteWishlistItem){
    const wishlistResponse= await commerce.getCustomerWishlist({
      variables: { customerId, wishlistName },
      config,
    })
    wishlist= wishlistResponse?.wishlist
  }
  result = { data: {...wishlist, items: wishlist?.items?.map((item:any) => normalizeWishlistItem(item, config))} }
  res.status(200).json({ data: result?.data })
}

export default removeItem