// ─── Brand Data Loader (browser-side) ──────────────────
// Fetches compiled brand JSON from core/brand/ for admin UI consumption.
// Exposes window.BrandData after load, and provides loadBrandData() for shell.

var BrandData = { voice: null, content: null, shows: null, meta: null, loaded: false, error: null };
window.BrandData = BrandData;

async function loadBrandData() {
  var cacheBuster = Date.now();
  var base = '/core/brand/';
  var files = ['voice.json', 'content.json', 'shows.json', 'meta.json'];
  var keys = ['voice', 'content', 'shows', 'meta'];

  try {
    var results = await Promise.all(files.map(function(f) {
      return fetch(base + f + '?v=' + cacheBuster).then(function(r) {
        if (!r.ok) throw new Error(f + ': ' + r.status);
        return r.json();
      });
    }));

    keys.forEach(function(k, i) { BrandData[k] = results[i]; });
    BrandData.loaded = true;
    BrandData.error = null;
    console.log('[brand] loaded. build:', BrandData.meta && BrandData.meta.buildTimestamp || 'unknown', 'hash:', BrandData.meta && BrandData.meta.buildHash || 'unknown');
  } catch (e) {
    console.warn('[brand] failed to load brand data, using fallback:', e.message);
    BrandData.error = e.message;
    BrandData.loaded = true;
  }

  return BrandData;
}

window.loadBrandData = loadBrandData;

// Helper: get brand build info for display
function getBrandBuildInfo() {
  if (!BrandData.meta) return 'brand data not loaded';
  var ts = BrandData.meta.buildTimestamp;
  var hash = BrandData.meta.buildHash;
  if (ts === 'fallback') return 'using fallback defaults';
  try {
    var d = new Date(ts);
    return d.toLocaleString() + ' (' + hash + ')';
  } catch (e) {
    return ts + ' (' + hash + ')';
  }
}

window.getBrandBuildInfo = getBrandBuildInfo;
