/**
 * Copyright since 2007 PrestaShop SA and Contributors
 * PrestaShop is an International Registered Trademark & Property of PrestaShop SA
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Academic Free License 3.0 (AFL-3.0)
 * that is bundled with this package in the file LICENSE.md.
 * It is also available through the world-wide-web at this URL:
 * https://opensource.org/licenses/AFL-3.0
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@prestashop.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade PrestaShop to newer
 * versions in the future. If you wish to customize PrestaShop for your
 * needs please refer to https://devdocs.prestashop.com/ for more information.
 *
 * @author    PrestaShop SA and Contributors <contact@prestashop.com>
 * @copyright Since 2007 PrestaShop SA and Contributors
 * @license   https://opensource.org/licenses/AFL-3.0 Academic Free License 3.0 (AFL-3.0)
 */
import prestashop from 'prestashop';
import $ from 'jquery';
import 'jquery-toast-plugin';
import 'jquery-toast-plugin/dist/jquery.toast.min.css';

$(() => {
  prestashop.blockcart = prestashop.blockcart || {};
  const showModal = prestashop.blockcart.showModal
    || function (modal) {
      const $body = $('body');
      $body.append(modal);
      $('#blockcart-modal').modal();
      console.log('called');
      $body.one('click', '#blockcart-modal', (event) => {
        if (event.target.id === 'blockcart-modal') {
          $.modal.close();
        }
      });
    };
  prestashop.on('updateCart', (event) => {
    const refreshURL = $('.blockcart').data('refresh-url');
    let requestData = {};

    if (
      event
      && event.reason
      && typeof event.resp !== 'undefined'
      && !event.resp.hasError
    ) {
      requestData = {
        id_customization: event.reason.idCustomization,
        id_product_attribute: event.reason.idProductAttribute,
        id_product: event.reason.idProduct,
        action: event.reason.linkAction,
      };
    }
    if (event && event.resp && event.resp.hasError) {
      prestashop.emit('showErrorNextToAddtoCartButton', {
        errorMessage: event.resp.errors.join('<br/>'),
      });
    }
    $.post(refreshURL, requestData)
      .then((resp) => {
        $('.blockcart').replaceWith($(resp.preview).find('.blockcart'));
        if (resp.modal) {
          $.toast({
            heading: 'Added to Cart',
            text: 'You can checkout or continue shopping.',
            position: {
              top: '100px',
              right: '20px',
            },
            bgColor: '#ffffff',
            textColor: '#111827',
            loaderBg: '#172554',
            class: 'rounded-none border border-gray-200',
          });
        }
      })
      .fail((resp) => {
        prestashop.emit('handleError', {
          eventType: 'updateShoppingCart',
          resp,
        });
      });
  });
});
