import type { Wishlist } from '../../../types/wishlist'
import getCustomerWishlist from '../../operations/get-customer-wishlist'
import getCustomerId from './utils/get-customer-id'
import type { WishlistEndpoint } from '.'

// Return wishlist info
const removeItem: WishlistEndpoint['handlers']['removeItem'] = async ({
  res,
  body: { customerToken, itemId },
  config,
  commerce,
}) => {
  const customerId =
    customerToken && (await getCustomerId({ customerToken, config }))
  const { wishlist } =
    (customerId &&
      (await commerce.getCustomerWishlist({
        variables: { customerId },
        config,
      }))) ||
    {}

  if (!wishlist || !itemId) {
    return res.status(400).json({
      data: null,
      errors: [{ message: 'Invalid request' }],
    })
  }

  const result = await config.storeApiFetch<{ data: Wishlist } | null>(
    `/v3/wishlists/${wishlist.id}/items/${itemId}`,
    { method: 'DELETE' }
  )
  const data = result?.data ?? null

  res.status(200).json({ data })
}

export default removeItem