/**
 * 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 $ from "jquery";
import prestashop from "prestashop";
// eslint-disable-next-line
import "velocity-animate";
import updateSources from "./components/update-sources";
import ProductMinitature from "./components/product-miniature";



$(document).ready(() => {
  let pageFilter = false;

  $("#pagination-anchor.js-search-link").on('click', function() {
    pageFilter = true
  } )
  const move = (direction) => {
    const THUMB_MARGIN = 20;
    const $thumbnails = $(".js-qv-product-images");
    const thumbHeight =
      $(".js-qv-product-images li img").height() + THUMB_MARGIN;
    const currentPosition = $thumbnails.position().top;
    $thumbnails.velocity(
      {
        translateY:
          direction === "up"
            ? currentPosition + thumbHeight
            : currentPosition - thumbHeight,
      },
      () => {
        if ($thumbnails.position().top >= 0) {
          $(".arrow-up").css("opacity", ".2");
        } else if (
          $thumbnails.position().top + $thumbnails.height() <=
          $(".js-qv-mask").height()
        ) {
          $(".arrow-down").css("opacity", ".2");
        }
      },
    );
  };

  const productConfig = (qv) => {
    const MAX_THUMBS = 4;
    const $arrows = $(prestashop.themeSelectors.product.arrows);
    const $thumbnails = qv.find(".js-qv-product-images");
    $(prestashop.themeSelectors.product.thumb).on("click", (event) => {
      // Swap active classes on thumbnail
      if ($(prestashop.themeSelectors.product.thumb).hasClass("selected")) {
        $(prestashop.themeSelectors.product.thumb).removeClass("selected");
      }
      $(event.currentTarget).addClass("selected");

      // Get data from thumbnail and update cover src, alt and title
      $(prestashop.themeSelectors.product.cover).attr(
        "src",
        $(event.target).data("image-large-src"),
      );
      $(prestashop.themeSelectors.product.cover).attr(
        "alt",
        $(event.target).attr("alt"),
      );
      $(prestashop.themeSelectors.product.cover).attr(
        "title",
        $(event.target).attr("title"),
      );

      // Get data from thumbnail and update cover sources
      updateSources(
        $(prestashop.themeSelectors.product.cover),
        $(event.target).data("image-large-sources"),
      );
    });
    if ($thumbnails.find("li").length <= MAX_THUMBS) {
      $arrows.hide();
    } else {
      $arrows.on("click", (event) => {
        if (
          $(event.target).hasClass("arrow-up") &&
          $(".js-qv-product-images").position().top < 0
        ) {
          move("up");
          $(prestashop.themeSelectors.arrowDown).css("opacity", "1");
        } else if (
          $(event.target).hasClass("arrow-down") &&
          $thumbnails.position().top + $thumbnails.height() >
            $(".js-qv-mask").height()
        ) {
          move("down");
          $(prestashop.themeSelectors.arrowUp).css("opacity", "1");
        }
      });
    }
    qv.find(prestashop.selectors.quantityWanted).TouchSpin({
      verticalbuttons: true,
      min: 1,
      max: 1000000,
    });

    $(prestashop.themeSelectors.touchspin).off("touchstart.touchspin");
  };

  prestashop.on("clickQuickView", (elm) => {
    const data = {
      action: "quickview",
      id_product: elm.dataset.idProduct,
      id_product_attribute: elm.dataset.idProductAttribute,
    };
    $.post(prestashop.urls.pages.product, data, null, "json")
      .then((resp) => {
        $("body").append(resp.quickview_html);
        const productModal = $(
          `#quickview-modal-${resp.product.id}-${resp.product.id_product_attribute}`,
        );
        productModal.modal("show");
        productConfig(productModal);
        productModal.on("hidden.bs.modal", () => {
          productModal.remove();
        });
      })
      .fail((resp) => {
        prestashop.emit("handleError", {
          eventType: "clickQuickView",
          resp,
        });
      });
  });

  $("body").on(
    "click",
    prestashop.themeSelectors.listing.searchFilterToggler,
    () => {
      $(prestashop.themeSelectors.listing.searchFiltersWrapper).removeClass(
        "hidden-sm-down",
      );
      $(prestashop.themeSelectors.contentWrapper).addClass("hidden-sm-down");
      $(prestashop.themeSelectors.footer).addClass("hidden-sm-down");
    },
  );
  $(
    `${prestashop.themeSelectors.listing.searchFilterControls} ${prestashop.themeSelectors.clear}`,
  ).on("click", () => {
    $(prestashop.themeSelectors.listing.searchFiltersWrapper).addClass(
      "hidden-sm-down",
    );
    $(prestashop.themeSelectors.contentWrapper).removeClass("hidden-sm-down");
    $(prestashop.themeSelectors.footer).removeClass("hidden-sm-down");
  });
  $(`${prestashop.themeSelectors.listing.searchFilterControls} .ok`).on(
    "click",
    () => {
      $(prestashop.themeSelectors.listing.searchFiltersWrapper).addClass(
        "hidden-sm-down",
      );
      $(prestashop.themeSelectors.contentWrapper).removeClass("hidden-sm-down");
      $(prestashop.themeSelectors.footer).removeClass("hidden-sm-down");
    },
  );

  const parseSearchUrl = function (event) {
    if (event.target.dataset.searchUrl !== undefined) {
      return event.target.dataset.searchUrl;
    }

    if ($(event.target).parent()[0].dataset.searchUrl === undefined) {
      throw new Error("Can not parse search URL");
    }

    return $(event.target).parent()[0].dataset.searchUrl;
  };

  function updateProductListDOM(data) {
    $(prestashop.themeSelectors.listing.searchFilters).replaceWith(
      data.rendered_facets,
    );
    $(prestashop.themeSelectors.listing.activeSearchFilters).replaceWith(
      data.rendered_active_filters,
    );
    $(prestashop.themeSelectors.listing.listTop).replaceWith(
      data.rendered_products_top,
    );

    const renderedProducts = $(data.rendered_products);
    const productSelectors = $(prestashop.themeSelectors.listing.product);

    if (productSelectors.length > 0) {
      productSelectors
        .removeClass()
        .addClass(productSelectors.first().attr("class"));
    } else {
      productSelectors
        .removeClass()
        .addClass(renderedProducts.first().attr("class"));
    }

    $(prestashop.themeSelectors.listing.list).replaceWith(renderedProducts);

    $(prestashop.themeSelectors.listing.listBottom).replaceWith(
      data.rendered_products_bottom,
    );
    if (data.rendered_products_header) {
      $(prestashop.themeSelectors.listing.listHeader).replaceWith(
        data.rendered_products_header,
      );
    }

    $('#show-filters').on('click.offcanvas', () => {
      $('#product-list-top-filters').show();
    });
  
    $('#hide-filters').on('click.offcanvas', () => {
      $('#product-list-top-filters').hide();
      $('#overlay').hide(); 
    });

    $('#show-filters').click(function() {
      $('#overlay').show();
    });

    $("#pagination-anchor.js-search-link").on('click', function() {
      pageFilter = true
    } )

  
    function checkAndShowOverlay() {
      if ($('#product-list-top-filters').is(':visible')) { 
          $('#overlay').show();
      } else { 
          $('#overlay').hide();
      }
  }

    if ( !pageFilter ) {
      $('#product-list-top-filters').show(function() {
        checkAndShowOverlay();
      });
    } else {
      $('#product-list-top-filters').hide();
    }

    $('#overlay').on('click', function() {
      $('#product-list-top-filters').hide();
      $('#overlay').hide();  
     
  });
	   pageFilter = false

    $('.th-accordion').thaccordion();

    const productMinitature = new ProductMinitature();
    productMinitature.init();
  }

  

  $("body").on(
    "change",
    `${prestashop.themeSelectors.listing.searchFilters} input[data-search-url]`,
    (event) => {
      prestashop.emit("updateFacets", parseSearchUrl(event));
    },
  );

  $("body").on(
    "click",
    prestashop.themeSelectors.listing.searchFiltersClearAll,
    (event) => {
      prestashop.emit("updateFacets", parseSearchUrl(event));
    },
  );

  $("body").on(
    "click",
    prestashop.themeSelectors.listing.searchLink,
    (event) => {
      event.preventDefault();
      prestashop.emit("updateFacets", $(event.target).closest("a").get(0).href);
    },
  );

  window.addEventListener("popstate", (e) => {
    if (e.state && e.state.current_url) {
      window.location.href = e.state.current_url;
    }
  });

  $("body").on(
    "change",
    `${prestashop.themeSelectors.listing.searchFilters} select`,
    (event) => {
      const form = $(event.target).closest("form");
      prestashop.emit("updateFacets", `?${form.serialize()}`);
    },
  );

  prestashop.on("updateProductList", (data) => {
    updateProductListDOM(data);
    window.scrollTo(0, 0);
  });
});