import {
displayName,
escapeSearchHtml,
formatSearchPrice,
loadSearchCatalog,
searchCatalogProducts,
} from "/js/search-catalog.js?v=persianCopyRtl2";
import { initCardShadePickers } from "/js/buy.js?v=priceSort2";
import { refreshProductFilters } from "/js/filters.js?v=priceSort2";
import { loveYourEyesPillHtml } from "/js/love-your-eyes.js?v=lyeOff";
function shadeDots(p) {
const variants = p.colorVariants;
if (!variants || variants.length < 2) return "";
const shown = variants.slice(0, 5);
const extra = variants.length - shown.length;
return `
${shown
.map((v) => {
const active = v.slug === p.slug ? " is-active" : "";
const bg = v.heroImage
? `background-image:url('${escapeSearchHtml(v.heroImage)}')`
: "";
const href = `/products/${escapeSearchHtml(v.slug)}/`;
return ``;
})
.join("")}${
extra > 0
? `+${extra.toLocaleString("fa-IR")} عدد`
: ""
}
`;
}
function cardIsInStock(p) {
const variants = p.colorVariants;
if (variants && variants.length > 1) {
return variants.some((v) => Number(v.stock) > 0);
}
return Number(p.stock) > 0;
}
function stockBadge(p) {
if (cardIsInStock(p)) return "";
return `نا موجود`;
}
function filterAttrs(p) {
const updated = p.updatedAt ? new Date(p.updatedAt).getTime() : 0;
const discount =
p.compareAtPrice && p.compareAtPrice > p.price
? Math.round((1 - p.price / p.compareAtPrice) * 100)
: 0;
const prices = [Number(p.price) || 0];
for (const v of p.colorVariants || []) {
const n = Number(v.price);
if (Number.isFinite(n)) prices.push(n);
}
const min = Math.min(...prices);
const max = Math.max(...prices);
return [
`data-category="${escapeSearchHtml(p.category || "")}"`,
`data-category-fa="${escapeSearchHtml(p.categoryFa || "")}"`,
`data-price="${p.price}"`,
`data-price-min="${min}"`,
`data-price-max="${max}"`,
`data-name="${escapeSearchHtml(p.name)}"`,
`data-updated="${Number.isFinite(updated) ? updated : 0}"`,
`data-rating="${p.ratingAvg || 0}"`,
`data-reviews="${p.reviewCount || 0}"`,
`data-featured="${p.featured ? 1 : 0}"`,
`data-in-stock="${cardIsInStock(p) ? 1 : 0}"`,
`data-discount="${discount}"`,
].join(" ");
}
function productCardHtml(p) {
const title = displayName(p);
const href = `/products/${escapeSearchHtml(p.slug)}/`;
const discount =
p.compareAtPrice && p.compareAtPrice > p.price
? Math.round((1 - p.price / p.compareAtPrice) * 100)
: 0;
const badge =
discount >= 1 ? `−${discount}%` : "";
const priceHtml =
discount >= 1
? `
${formatSearchPrice(p.price)}
${formatSearchPrice(p.compareAtPrice)}
`
: `${formatSearchPrice(p.price)}
`;
return `
${badge}
${stockBadge(p)}
${
p.heroImage
? `
`
: ""
}
`;
}
const params = new URLSearchParams(location.search);
const q = (params.get("q") || "").trim();
const titleEl = document.querySelector("[data-search-title]");
const resultsEl = document.querySelector("[data-search-results]");
const emptyEl = document.querySelector("[data-search-empty]");
const countEl = document.querySelector("[data-listing-count]");
const resultPill = document.querySelector("[data-filters-result-count]");
if (titleEl && q) titleEl.textContent = `نتایج برای «${q}»`;
try {
const products = await loadSearchCatalog();
const hits = searchCatalogProducts(products, q);
if (!resultsEl) {
/* no-op */
} else if (!hits.length) {
if (emptyEl) emptyEl.hidden = false;
resultsEl.innerHTML = "";
if (countEl) countEl.textContent = "۰";
if (resultPill) resultPill.textContent = "۰";
} else {
if (emptyEl) emptyEl.hidden = true;
resultsEl.innerHTML = hits.map(productCardHtml).join("");
const n = hits.length.toLocaleString("fa-IR");
if (countEl) countEl.textContent = n;
if (resultPill) resultPill.textContent = n;
initCardShadePickers();
refreshProductFilters();
}
} catch {
if (emptyEl) {
emptyEl.hidden = false;
emptyEl.querySelector("p") &&
(emptyEl.querySelector("p").textContent = "بارگذاری نتایج ممکن نشد.");
}
}