/* ============================================================
   Төрмен — Catalog helpers (recent, filters, hints)
   ============================================================ */
const RECENT_KEY = 'tormen_recent_views';
const RECENT_MAX = 4;

const CATALOG_STORAGE_HINT = {
  ru: 'Охлаждённое, не заморозка · режем в день доставки · вакуумная упаковка',
  kz: 'Салқындатылған, мұздатылмаған · жеткізу күні кесеміз · вакуум қаптама',
};

const PERSON_FILTERS = [
  { id: null, ru: 'Все', kz: 'Барлығы' },
  { id: 3, ru: '3 персоны', kz: '3 адам' },
  { id: 5, ru: '5 персон', kz: '5 адам' },
  { id: 10, ru: '10 персон', kz: '10 адам' },
  { id: 15, ru: '15+', kz: '15+' },
];

function pushRecentView(productId){
  if(!productId) return;
  try{
    let list = JSON.parse(localStorage.getItem(RECENT_KEY) || '[]');
    list = list.filter(id=> id !== productId);
    list.unshift(productId);
    localStorage.setItem(RECENT_KEY, JSON.stringify(list.slice(0, RECENT_MAX)));
  }catch(_){}
}

function readRecentIds(){
  try{ return JSON.parse(localStorage.getItem(RECENT_KEY) || '[]'); }catch(_){ return []; }
}

function recentProducts(sets){
  const ids = readRecentIds();
  const byId = new Map((sets || []).map(s=> [s.id, s]));
  return ids.map(id=> byId.get(id)).filter(Boolean);
}

function normSearch(s){
  return String(s || '').toLowerCase().replace(/ё/g, 'е').trim();
}

function productSearchText(product, tx){
  const parts = [
    tx(product.name),
    tx(product.tagline),
    tx(product.desc),
    product.id,
  ];
  return normSearch(parts.join(' '));
}

function setMatchesPersons(set, filterId){
  if(filterId == null) return true;
  if(filterId === 15) return (set.variants || []).some(v=> (v.persons || 0) >= 15);
  return (set.variants || []).some(v=> v.persons === filterId);
}

function sectionLabelFor(set, sections, tx){
  const handles = window.itemShopSections?.(set) || [set.cat];
  const sec = (sections || []).find(s=> handles.includes(s.handle));
  if(!sec) return null;
  return tx({ ru: sec.name, kz: sec.name_kz || sec.name });
}

Object.assign(window, {
  pushRecentView,
  recentProducts,
  productSearchText,
  setMatchesPersons,
  sectionLabelFor,
  CATALOG_STORAGE_HINT,
  PERSON_FILTERS,
});