// data.jsx — Tenant-aware mock data. All exported objects are live references
// whose properties are rewritten when the active tenant changes via applyTenantToData().
// Screens can keep using DEREK, NEXT_MOMENT, LIVE_GAME, etc.

// Seed with empty shells; applyTenantToData() fills them before first render.
const DEREK = {};
let WVU_VENUES = {};
let SPORTS = [];
let SPORT_BY_ID = {};
const NEXT_MOMENT = {};
const LIVE_GAME = {};
let CONTINUE = [];
let FOR_YOU = [];
let SOCIAL = [];
let NIL_ATHLETES = [];
let NIL_BY_ID = {};
const MERCH_FEATURED = { hero: {} };
let MERCH_ITEMS = [];
const LAST_ORDER = {};
const TICKET_OFFER = { mySeats: {}, upgrade: {}, parking: {} };
let RECENT_PURCHASES = [];
let REWARDS = [];
let TEAM_POPULARITY = [];

// Extra tenant-level copy pulled by screens
const TENANT_COPY = {
  heroWeather: '', heroTagline: '', rewardsTierName: '', rewardsNextTier: '',
  nilCollectiveName: '', weekSectionTitle: '', lotName: '', productName: '',
  wordmark: '', short: '',
};

function _clearObj(o) { for (const k of Object.keys(o)) delete o[k]; }
function _assignAll(o, src) { Object.assign(o, src); }

function applyTenantToData(tenant) {
  // User
  _clearObj(DEREK);        _assignAll(DEREK, tenant.user);

  // Venues / sports
  WVU_VENUES = tenant.venues;
  SPORTS = tenant.sports.slice();
  SPORT_BY_ID = Object.fromEntries(SPORTS.map(s => [s.id, s]));

  // Next moment / live
  _clearObj(NEXT_MOMENT);  _assignAll(NEXT_MOMENT, tenant.nextMoment);
  _clearObj(LIVE_GAME);    _assignAll(LIVE_GAME, tenant.liveGame);

  // Feeds
  CONTINUE = tenant.continueWatching.slice();
  FOR_YOU  = tenant.forYou.slice();
  SOCIAL   = tenant.social.slice();

  // NIL
  NIL_ATHLETES = tenant.nilAthletes.slice();
  NIL_BY_ID    = Object.fromEntries(NIL_ATHLETES.map(a => [a.id, a]));

  // Merch
  _clearObj(MERCH_FEATURED.hero); _assignAll(MERCH_FEATURED.hero, tenant.merchFeatured.hero);
  MERCH_ITEMS = tenant.merchItems.slice();
  _clearObj(LAST_ORDER);  _assignAll(LAST_ORDER, tenant.lastOrder);

  // Tickets
  _clearObj(TICKET_OFFER.mySeats); _assignAll(TICKET_OFFER.mySeats, tenant.ticketOffer.mySeats);
  _clearObj(TICKET_OFFER.upgrade); _assignAll(TICKET_OFFER.upgrade, tenant.ticketOffer.upgrade);
  _clearObj(TICKET_OFFER.parking); _assignAll(TICKET_OFFER.parking, tenant.ticketOffer.parking);

  RECENT_PURCHASES = tenant.recentPurchases.slice();
  REWARDS          = tenant.rewards.slice();
  TEAM_POPULARITY  = tenant.teamPopularity.slice();

  // Tenant-level copy
  _clearObj(TENANT_COPY);
  _assignAll(TENANT_COPY, {
    heroWeather: tenant.heroWeather,
    heroTagline: tenant.heroTagline,
    rewardsTierName: tenant.rewardsTierName,
    rewardsNextTier: tenant.rewardsNextTier,
    nilCollectiveName: tenant.nilCollectiveName,
    weekSectionTitle: tenant.weekSectionTitle,
    lotName: tenant.lotName,
    productName: tenant.productName,
    wordmark: tenant.wordmark,
    short: tenant.short,
  });

  // Re-expose arrays on window (non-object references need re-binding)
  Object.assign(window, {
    WVU_VENUES, SPORTS, SPORT_BY_ID,
    CONTINUE, FOR_YOU, SOCIAL,
    NIL_ATHLETES, NIL_BY_ID,
    MERCH_ITEMS, RECENT_PURCHASES, REWARDS, TEAM_POPULARITY,
  });
}

Object.assign(window, {
  DEREK, WVU_VENUES, SPORTS, SPORT_BY_ID,
  NEXT_MOMENT, LIVE_GAME,
  CONTINUE, FOR_YOU, SOCIAL,
  NIL_ATHLETES, NIL_BY_ID,
  MERCH_FEATURED, MERCH_ITEMS, LAST_ORDER,
  TICKET_OFFER, RECENT_PURCHASES,
  REWARDS, TEAM_POPULARITY,
  TENANT_COPY, applyTenantToData,
});
