/* eslint-disable no-unused-vars */
/* eslint-disable no-use-before-define */
// Lưu trữ hàm fetch gốc của trình duyệt
const { fetch: originalFetch } = window;

// Hàm lấy thông tin sản phẩm từ Shopee
/**
 *
 */
function getShopeeProductInfo() {
  let retryCount = 0;
  const maxRetries = 50;
  const interval = setInterval(() => {
    retryCount++;

    // Lấy dữ liệu từ thẻ script chứa thông tin sản phẩm
    const scriptTag = document.querySelector("script[type='text/mfe-initial-data']");
    const jsonData = scriptTag?.innerHTML;

    if (jsonData) {
      clearInterval(interval);
      const parsedData = JSON.parse(jsonData);

      // Lấy item_id và shopId từ dữ liệu
      const shopId = parsedData?.initialState?.PDP_BFF_DATA?.shopId;
      const itemId = parsedData?.initialState?.PDP_BFF_DATA?.item_id;

      if (itemId && shopId) {
        const productData = parsedData?.initialState?.DOMAIN_PDP?.cachedMap?.[`${shopId}/${itemId}`];

        if (productData?.item_id && !productData?.removed_fields?.itemid) {
          // Lưu thông tin vào sessionStorage
          sessionStorage.setItem(
            `shipxanh-product-info-${shopId}-${itemId}`,
            JSON.stringify(productData),
          );

          // Lưu vào DOM
          saveInfoToElementID(productData, `shipxanh-product-info-${shopId}-${itemId}`);
        }
      }
    }

    if (retryCount > maxRetries) clearInterval(interval);
  }, 100);
}

// Hàm lưu thông tin sản phẩm vào DOM
/**
 *
 * @param data
 * @param elementId
 */
function saveInfoToElementID(data, elementId) {
  const div = document.createElement('div');
  div.id = elementId;
  div.style.display = 'none';
  div.innerHTML = stripHtml(JSON.stringify(data));
  document.body.appendChild(div);
}

// Hàm loại bỏ thẻ HTML khỏi chuỗi
/**
 *
 * @param html
 */
function stripHtml(html) {
  return html
    ? html.replace(/<\/p>/g, '</p>\n').replace(/<\/li>/g, '</li>\n')
      .replace(/<\/?[^>]+>/gi, '').replace(/\n\s*\n/g, '\n\n')
    : '';
}

// Ghi đè fetch để theo dõi dữ liệu Shopee
if (location.host.includes('shopee')) {
  window.fetch = async (...args) => {
    const [url, options] = args;
    const response = await originalFetch(url, options);
    const parsedUrl = new URL(url);

    response.json = async () => {
      const jsonResponse = await response.clone().json();

      try {
        if (url.includes('/api/v4/search/search_items') || url.includes('/api/v4/shop/search_items')) {
          const items = jsonResponse?.items?.map((item) => item.item_basic);
          if (items) saveInfoToElementID(items, 'shipxanh-product-list');
        }

        if (url.includes('/api/v4/recommend/recommend')) {
          if (parsedUrl.search.includes('top_products_landing_page')) {
            const topProducts = [];
            jsonResponse?.data?.sections?.forEach((section) => {
              section?.data?.top_product?.list?.forEach((product) => {
                if (!topProducts.some((p) => p.itemid === product.itemid)) {
                  topProducts.push(product);
                }
              });
            });
            if (topProducts.length) saveInfoToElementID(topProducts, 'shipxanh-product-list');
          } else {
            const recommendedItems = jsonResponse?.data?.sections?.[0]?.data?.items;
            if (recommendedItems) saveInfoToElementID(recommendedItems, 'shipxanh-product-list');
          }
        }

        if (url.includes('/api/v4/pdp/get_pc')) {
          const { item_id, shop_id } = jsonResponse.data.item;
          if (item_id && shop_id) {
            sessionStorage.setItem(`shipxanh-product-info-${item_id}-${shop_id}`, JSON.stringify(jsonResponse.data));
          }
        }
      } catch (error) {
        console.error(error);
      }
      return jsonResponse;
    };
    return response;
  };
}
