import getCustomerWishlist from '../../operations/get-customer-wishlist'
import { parseWishlistItem } from '../../utils/parse-item'
import getCustomerId from '../../utils/get-customer-id'
import type { WishlistEndpoint } from '.'

// Return wishlist info
const addItem: WishlistEndpoint['handlers']['addItem'] = async ({
  res,
  body: { customerToken, item },
  config,
  commerce,
}) => {
  if (!item) {
    return res.status(400).json({
      data: null,
      errors: [{ message: 'Missing item' }],
    })
  }

  const customerId =
    customerToken && (await getCustomerId({ customerToken, config }))

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

  const { wishlist } = await commerce.getCustomerWishlist({
    variables: { customerId },
    config,
  })
  const options = {
    method: 'POST',
    body: JSON.stringify(
      wishlist
        ? {
            items: [parseWishlistItem(item)],
          }
        : {
            name: 'Wishlist',
            customer_id: customerId,
            items: [parseWishlistItem(item)],
            is_public: false,
          }
    ),
  }

  const { data } = wishlist
    ? await config.storeApiFetch(`/v3/wishlists/${wishlist.id}/items`, options)
    : await config.storeApiFetch('/v3/wishlists', options)

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

export default addItem
