// catalog.jsx — Firestore'dan ürünleri, config ve koleksiyonları çeker
const _db = firebase.firestore();

// ─── Products ────────────────────────────────────────────────────────────────
let _products = [];
let _productSubs = [];

_db.collection('products')
  .orderBy('createdAt', 'desc')
  .onSnapshot(snap => {
    _products = snap.docs.map(d => ({ ...d.data() }));
    window.KOJ_PRODUCTS = _products;
    _productSubs.forEach(fn => fn([..._products]));
  }, err => {
    console.warn('Firestore products hatası:', err);
  });

window.KOJ_PRODUCTS = _products;

window.KOJ_subscribeProducts = (fn) => {
  _productSubs.push(fn);
  fn([..._products]);
  return () => { _productSubs = _productSubs.filter(s => s !== fn); };
};

window.KOJ_getName = (p, lang) =>
  p['name' + lang.charAt(0).toUpperCase() + lang.slice(1)] || p.nameEn || '';

// ─── Site Config ─────────────────────────────────────────────────────────────
let _config = {};
let _configSubs = [];

_db.collection('site').doc('config')
  .onSnapshot(snap => {
    _config = snap.exists ? snap.data() : {};
    window.KOJ_CONFIG = _config;
    _configSubs.forEach(fn => fn({ ..._config }));
  }, err => {
    console.warn('Firestore config hatası:', err);
  });

window.KOJ_CONFIG = _config;

window.KOJ_subscribeConfig = (fn) => {
  _configSubs.push(fn);
  fn({ ..._config });
  return () => { _configSubs = _configSubs.filter(s => s !== fn); };
};

// ─── Collections ─────────────────────────────────────────────────────────────
let _collections = [];
let _collectionSubs = [];

_db.collection('collections')
  .orderBy('order', 'asc')
  .onSnapshot(snap => {
    _collections = snap.docs.map(d => ({ id: d.id, ...d.data() }));
    window.KOJ_COLLECTIONS = _collections;
    _collectionSubs.forEach(fn => fn([..._collections]));
  }, err => {
    console.warn('Firestore collections hatası:', err);
  });

window.KOJ_COLLECTIONS = _collections;

window.KOJ_subscribeCollections = (fn) => {
  _collectionSubs.push(fn);
  fn([..._collections]);
  return () => { _collectionSubs = _collectionSubs.filter(s => s !== fn); };
};
