jQuery(($) => {
  let shareLinkValue = ''
  const $wishlistShare = $('#wishlist-share')
  const $wishlistCount = $('header .wishlist-count')

  // eslint-disable-next-line no-undef
  const values = getWishlistValues()
  $wishlistCount.each(function () {
    $(this).text(values.length)
  })

  if ($wishlistShare.length) {
    const shareLink = function (callback, $button, target) {
      // eslint-disable-next-line no-console
      // console.log(callback)
      // eslint-disable-next-line no-console
      // console.log(target)
      // eslint-disable-next-line no-console
      // console.log($button)
      $button.addClass('loading')
      $.ajax({
        type: 'post',
        url: myAjax.ajaxurl,
        dataType: target ? 'arraybuffer' : 'html',
        data: {
          action: 'handle_wishlist_share_url',
          target,
        },
        success(link, status, xhr) {
          if (!link) {
            return
          }

          $button.removeClass('loading')
          callback(link, status, xhr)
        },
      })
    }

    $wishlistShare.find('button').click((e) => {
      e.preventDefault()
      // eslint-disable-next-line no-console
      console.log(shareLinkValue)
      if (!shareLinkValue) {
        shareLink((link) => {
          shareLinkValue = link
          $wishlistShare.toggleClass('opened')
        }, $wishlistShare.find('button'))
      } else {
        $wishlistShare.toggleClass('opened')
      }
    })

    const openNewOrder = function (boUrl) {
      const url = new URL(shareLinkValue)
      const matches = url.pathname.match(/list\/([^/]+)/)
      window.open(boUrl + matches[1], '_blank').focus()
    }
    $('.create-order').click(function (e) {
      e.preventDefault()
      const url = $(this).data('url')
      if (!shareLinkValue) {
        shareLink((link) => {
          shareLinkValue = link
          openNewOrder(url)
        }, $(this))
        return
      }
      openNewOrder(url)
    })

    $wishlistShare.find('li').click(function () {
      $wishlistShare.toggleClass('opened')
      const title = $('.wishlist-name-input').val()

      switch ($(this).data('value')) {
        case 'share_us':
          window.location.href = `${'mailto:sales@stockstories.com?'
          + 'subject=More%20information%20-%20'}${title
          }&body=I%20Selected%20These%20Items%20-%20Please%20send%20me%20more%20information%0D%0A%0D%0A${
            shareLinkValue}`
          break
        case 'copy':
          copyValueToClipboard(shareLinkValue)

          $wishlistShare.addClass('visible')
          setTimeout(() => {
            $wishlistShare.removeClass('visible')
          }, 1500)
          break
        case 'share_colleague':
          if (window.navigator.share) {
            window.navigator.share({
              url: shareLinkValue,
              title: 'I Selected These Items - Please have a look',
            })
          } else {
            window.location.href = `${'mailto:?'
            + 'subject='}${title
            }&body=I%20Selected%20These%20Items%20-%20Please%20have%20a%20look%0D%0A%0D%0A${
              shareLinkValue}`
          }
          break
        case 'excel':
          shareLink((response, status, xhr) => {
            // check for a filename
            let filename = ''
            const disposition = xhr.getResponseHeader('Content-Disposition')
            if (disposition && disposition.indexOf('attachment') !== -1) {
              const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/
              const matches = filenameRegex.exec(disposition)
              if (matches !== null && matches[1]) {
                filename = matches[1].replace(/['"]/g, '')
              }
            }

            const type = xhr.getResponseHeader('Content-Type')
            const blob = new Blob([response], { type })
            saveAs(blob, filename)
          }, $wishlistShare.find('button'), 'excel')
          break
        case 'pdf':
          // eslint-disable-next-line no-console
          // console.log('PDF')
          shareLink((response, status, xhr) => {
            // check for a filename
            let filename = ''
            const disposition = xhr.getResponseHeader('Content-Disposition')
            // eslint-disable-next-line no-console
            // console.log(disposition)
            if (disposition && disposition.indexOf('attachment') !== -1) {
              const filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/
              const matches = filenameRegex.exec(disposition)
              if (matches !== null && matches[1]) {
                filename = matches[1].replace(/['"]/g, '')
              }
            }
            //
            const type = xhr.getResponseHeader('Content-Type')
            const blob = new Blob([response], { type })
            saveAs(blob, filename)
          }, $wishlistShare.find('button'), 'pdf')
          break
      }
    })

    $(document).click((event) => {
      const $target = $(event.target)
      if (!$target.closest('#wishlist-share').length
        && $wishlistShare.is(':visible')) {
        $wishlistShare.removeClass('opened')
      }
    })

    $('#wishlist-sort-switch').on('click', () => {
      const wishlistOrder = $('#wishlist-sort-switch').hasClass('order-asc') ? 'Z-A' : 'A-Z'
      // eslint-disable-next-line no-undef
      const wishListValues = getWishlistValues()

      // eslint-disable-next-line no-undef
      Cookies.set('wishlist_order', wishlistOrder, { expires: (10 * 365) })
      // eslint-disable-next-line no-undef
      saveWishlistValues(wishListValues.reverse())
      // eslint-disable-next-line no-undef
      shareLink(() => {}, $(this))
      window.location.reload()
    })
  }

  $(document).on('click', '.wishlist-name-edit', function (e) {
    const $parent = $(this).parent()
    const $input = $parent.find('.wishlist-name-input')
    $parent.find('.wishlist-name-text').hide()
    $parent.find('.wishlist-name-edit').hide()
    $input.show().focus()
    const val = $input.val()
    $input.val('').val(val)
  })

  let lastName = $('.wishlist-name-input').val()
  const editName = function (name, callback) {
    $.ajax({
      type: 'post',
      url: myAjax.ajaxurl,
      data: {
        action: 'handle_wishlist_change_name',
        title: name,
        id: Cookies.get('wishlist_link_id'),
      },
      success() {
        lastName = $('.wishlist-name-input').val()
        callback()
      },
    })
  }

  const onSubmit = function (e) {
    e.preventDefault()

    const $parent = $(this).closest('.wishlist-name')
    const $input = $parent.find('.wishlist-name-input')

    if (lastName === $input.val()) {
      $input.hide()
      $parent.find('.wishlist-name-text').show().text($input.val())
      $parent.find('.wishlist-name-edit').show()
    }

    $input.parent().addClass('loading')
    editName($input.val(), () => {
      $input.parent().removeClass('loading')
      $input.hide()
      $parent.find('.wishlist-name-text').show().text($input.val())
      $parent.find('.wishlist-name-edit').show()
    })
  }

  $(document).on('blur', '.wishlist-name-input', onSubmit)

  $(document).on('submit', '.wishlist-name form', onSubmit)

  $(document).on('click', '.add-to-wishlist', function (e) {
    e.preventDefault()

    const newProduct = $(this).data('id').toString()
    const values = getWishlistValues()
    if (values.indexOf(newProduct) < 0) {
      values.unshift(newProduct)
      saveWishlistValues(values)
      $(this).addClass('added-to-wishlist')
      $(this).text('In Your List')
      $wishlistCount.text(values.length)
    }

    iWantThisProduct(newProduct)
  })

  $(document).on('click', '.wishlist-add-all', function (e) {
    e.preventDefault()

    // const values = getWishlistValues()
    const newProductsList = []
    $(this).closest('.wishlist').find('.new-arrivals-list li').each(function () {
      const newProduct = $(this).data('id')
      if (newProduct) {
        newProductsList.push(newProduct)
      }
    })
    // eslint-disable-next-line no-undef
    Cookies.set('wishlist_order', ($(this).data('sortOrder') === 'asc') ? 'A-Z' : 'Z-A', { expires: (10 * 365) })
    saveWishlistValues(newProductsList)
    $wishlistCount.text(newProductsList.length)

    const wishListName = $('.archive-head h1').text()
    editName(wishListName, () => {
      // const expire = new Date(Date.now() + 200000)
      // document.cookie = `wishlist_copied=1;expires=${expire.toUTCString()}`
      // // eslint-disable-next-line no-console
      // console.log(expire)
    })
    setTimeout(() => {
      window.location.href = '/list'
    }, 100)
  })

  $(document).on('click', '.wishlist-clear', (e) => {
    e.preventDefault()

    const result = confirm('Are you sure you want remove all items from your list?')

    if (result) {
      saveWishlistValues([])
      $('.wishlist.single').addClass('loading')
      // eslint-disable-next-line no-undef
      Cookies.remove('wishlist_order')
      editName('My List', () => {
        window.location.reload()
      })
    }
  })

  $(document).on('click', '.remove-from-wishlist', function (e) {
    e.preventDefault()

    const removeProduct = $(this).data('id').toString()
    let values = getWishlistValues()
    saveWishlistValues(values.filter((id) => id !== removeProduct))

    values = getWishlistValues()
    if (!values.length) {
      $('.wishlist.single').addClass('loading')
      editName('My List', () => {
        window.location.reload()
      })
    } else {
      // eslint-disable-next-line no-undef
      Cookies.remove('wishlist_order')
      window.location.reload()
    }
  })

  // const wishlistSortSwitch = ()

  // const wishlistCopied = document.cookie
  //   .split('; ')
  //   .find((row) => row.startsWith('wishlist_copied='))
  //   ?.split('=')[1]
  // // eslint-disable-next-line no-console
  // console.log(wishlistCopied)
  // if (wishlistCopied === 1) {
  //   const wishlistName = document.cookie
  //     .split('; ')
  //     .find((row) => row.startsWith('wishlist_name='))
  //     ?.split('=')[1]
  //   $('.wishlist-name-text').text(wishlistName)
  //   const expire = new Date(Date.now() - 100000)
  //   document.cookie = `wishlist_copied=0;expires=${expire.toUTCString()}`
  // window.location.reload()
  // }
})
