/* ============================================================
   Static fixture data — drives the UI until Data Hub lands.
   Three report types × metric rosters × merchants × time series.

   Metric naming follows the legacy production reports:
     - `ops`         → Ordered Product Sales (not "Net Sales")
     - `buyBoxPct`   → Buy Box % (Retail only; replaces "BSR Share")
     - `spend`       → Ad Spend (no separate `adCost`)
     - `tacos`       → TACoS (Combined + Retail; Ad Spend / OPS)
     - `adSalesPct`  → Ad % of Tot. Sales
     - `unitSessPct` → Ord. Item Session %
     - NTB is NOT part of the 3 canonical report types today.
   ============================================================ */

// Merchants from Prod screenshots
const MERCHANTS = [
  { id: 'hydrapak-us', name: 'Hydrapak, LLC', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'stretch-labs-us', name: 'Stretch Labs', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'aop-us', name: 'American Outdoor Products', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'hydrocell-us', name: 'Hydro Cell', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'fuselenses-us', name: 'Fuse Lenses', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'titan-us', name: 'Titan Casket', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'yolo-us', name: 'YOLO BRICK ROAD', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'popi-us', name: 'Popi Co', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'function101-us', name: 'Function 101', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'hydrapak-ca', name: 'Hydrapak - CA', marketplace: 'Canada', marketShort: 'CA', flag: '🇨🇦', currency: 'CAD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'kiwa-us', name: 'KIWA', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'hydrapak-de', name: 'Hydrapak - DE Sporting Goods', marketplace: 'Germany (Pan-EU)', marketShort: 'DE', flag: '🇩🇪', currency: 'EUR', symbol: '€', platform: 'Amazon Seller' },
  { id: 'hydrapak-it', name: 'Hydrapak - IT Sporting Goods', marketplace: 'Italy (Pan-EU)', marketShort: 'IT', flag: '🇮🇹', currency: 'EUR', symbol: '€', platform: 'Amazon Seller' },
  { id: 'homeiq-us', name: 'Home IQ USA', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'jdm-uk', name: 'JDM Distribution UK LTD', marketplace: 'United Kingdom', marketShort: 'UK', flag: '🇬🇧', currency: 'GBP', symbol: '£', platform: 'Amazon Seller' },
  { id: 'hydrapak-fr', name: 'Hydrapak - FR Sporting Goods', marketplace: 'France', marketShort: 'FR', flag: '🇫🇷', currency: 'EUR', symbol: '€', platform: 'Amazon Seller' },
  { id: 'popi-ca', name: 'Popi Co', marketplace: 'Canada', marketShort: 'CA', flag: '🇨🇦', currency: 'CAD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'kokolu-us', name: 'KOKOLU', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'blunt-us', name: 'BLUNT USA', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Seller' },
  { id: 'aop-us-v', name: 'American Outdoor Products', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Vendor', isVendor: true },
  { id: 'hydrapak-us-v', name: 'Hydrapak, LLC', marketplace: 'United States', marketShort: 'US', flag: '🇺🇸', currency: 'USD', symbol: '$', platform: 'Amazon Vendor', isVendor: true },
];

// Dashboard rollup rows — cross-channel totals per merchant (MTD snapshot).
// Includes retail fields (ops, tacos, units, orders, sessions, pageViews) so
// the dashboard reflects the full Combined report picture, not ads alone.
const DASHBOARD_ROLLUP = [
  { merchantId: 'hydrapak-us',      ops: 2781376.19, units: 114841, orders: 93479, sessions: 547322, pageViews: 1026839, tacos:  3.42, spend: 95209.58, adSales: 514154.57, acos: 18.5, roas: 5.40, adOrders: 21232, impressions: 15676328, clicks: 106632, ctr: 0.68, cpc: 0.89, convR: 19.91, cpa: 4.49, aov: 24.22 },
  { merchantId: 'stretch-labs-us',  ops: 1038682.38, units:  32322, orders:  29502, sessions: 192435, pageViews:  356840, tacos:  5.85, spend: 60757.20, adSales: 251360.90, acos: 24.2, roas: 4.17, adOrders:  7766, impressions: 10857488, clicks:  29570, ctr: 0.27, cpc: 2.04, convR: 26.32, cpa: 7.76, aov: 32.17 },
  { merchantId: 'aop-us',           ops:  462519.28, units:  20288, orders:  16444, sessions: 131803, pageViews:  246520, tacos:  3.79, spend: 17550.96, adSales:  90241.26, acos: 19.5, roas: 5.14, adOrders:  3954, impressions:  3181834, clicks:  21207, ctr: 0.67, cpc: 0.83, convR: 18.64, cpa: 4.44, aov: 22.82 },
  { merchantId: 'hydrocell-us',     ops:  161282.08, units:   6944, orders:   6318, sessions:  84225, pageViews:  156442, tacos:  9.47, spend: 15287.39, adSales:  49630.78, acos: 30.8, roas: 3.25, adOrders:  2118, impressions:  4767099, clicks:  21390, ctr: 0.45, cpc: 0.72, convR:  9.91, cpa: 7.22, aov: 23.44 },
  { merchantId: 'fuselenses-us',    ops:   19946.33, units:    476, orders:    423, sessions:  23851, pageViews:   44229, tacos: 54.32, spend: 10835.11, adSales:  14686.47, acos: 73.6, roas: 1.36, adOrders:   151, impressions:  1463585, clicks:   7046, ctr: 0.48, cpc: 1.54, convR:  4.98, cpa: 70.87, aov: 41.84 },
  { merchantId: 'titan-us',         ops:   49024.36, units:     99, orders:     92, sessions:   8116, pageViews:   15340, tacos: 16.22, spend:  7952.68, adSales:  19741.00, acos: 40.3, roas: 2.48, adOrders:    40, impressions:   641291, clicks:   6090, ctr: 0.95, cpc: 1.31, convR:  0.66, cpa: 198.82, aov: 493.53 },
  { merchantId: 'yolo-us',          ops:   33428.14, units:    936, orders:    892, sessions:  28541, pageViews:   53004, tacos: 18.19, spend:  6079.58, adSales:  13143.28, acos: 46.3, roas: 2.16, adOrders:   368, impressions:  1608038, clicks:   7961, ctr: 0.50, cpc: 0.76, convR:  4.62, cpa: 16.52, aov: 35.72 },
  { merchantId: 'popi-us',          ops:   26380.73, units:    872, orders:    780, sessions:  22908, pageViews:   41556, tacos: 20.97, spend:  5532.20, adSales:   9160.85, acos: 60.4, roas: 1.65, adOrders:   340, impressions:  1077655, clicks:   5398, ctr: 0.50, cpc: 1.03, convR:  6.30, cpa: 16.27, aov: 26.90 },
  { merchantId: 'function101-us',   ops:   54229.46, units:   1587, orders:   1459, sessions:  11802, pageViews:   21881, tacos:  9.19, spend:  4982.56, adSales:  12725.56, acos: 39.2, roas: 2.55, adOrders:   367, impressions:   587100, clicks:   2811, ctr: 0.48, cpc: 1.77, convR: 13.06, cpa: 13.58, aov: 34.67 },
  { merchantId: 'hydrapak-ca',      ops:  131094.41, units:   3983, orders:   3740, sessions:  42719, pageViews:   80008, tacos:  2.17, spend:  2841.47, adSales:  24312.51, acos: 11.7, roas: 8.56, adOrders:   732, impressions:   769075, clicks:   4020, ctr: 0.64, cpc: 0.58, convR: 14.85, cpa:  3.88, aov: 33.21 },
  { merchantId: 'kiwa-us',          ops:    6314.22, units:    296, orders:    279, sessions:   4913, pageViews:    9108, tacos: 38.06, spend:  2403.08, adSales:   2754.43, acos: 87.2, roas: 1.15, adOrders:   125, impressions:   404136, clicks:   1975, ctr: 0.49, cpc: 1.22, convR:  6.33, cpa: 19.22, aov: 22.04 },
  { merchantId: 'hydrapak-de',      ops:   37786.70, units:   1734, orders:   1651, sessions:  26185, pageViews:   49052, tacos:  4.94, spend:  1866.55, adSales:   7010.06, acos: 26.7, roas: 3.75, adOrders:   320, impressions:   625446, clicks:   3989, ctr: 0.64, cpc: 0.47, convR:  8.02, cpa:  5.84, aov: 21.91 },
  { merchantId: 'hydrapak-it',      ops:   18280.53, units:    991, orders:    918, sessions:  15210, pageViews:   28480, tacos:  4.63, spend:   847.11, adSales:   4258.37, acos: 16.4, roas: 5.03, adOrders:   248, impressions:   269549, clicks:   2087, ctr: 0.77, cpc: 0.41, convR: 11.88, cpa:  3.42, aov: 17.17 },
  { merchantId: 'homeiq-us',        ops:    5120.17, units:    220, orders:    195, sessions:   4872, pageViews:    9109, tacos: 15.66, spend:   802.00, adSales:    801.52, acos: 95.6, roas: 1.05, adOrders:    37, impressions:   207049, clicks:    439, ctr: 0.21, cpc: 1.92, convR:  8.43, cpa: 21.68, aov: 21.82 },
  { merchantId: 'jdm-uk',           ops:   29142.39, units:     72, orders:     63, sessions:   2641, pageViews:    4896, tacos:  2.56, spend:   746.65, adSales:   5708.91, acos: 13.1, roas: 7.64, adOrders:    22, impressions:   102629, clicks:    297, ctr: 0.28, cpc: 1.25, convR:  3.60, cpa: 33.95, aov: 259.50 },
  { merchantId: 'hydrapak-fr',      ops:   13180.52, units:    566, orders:    520, sessions:   9842, pageViews:   18360, tacos:  4.54, spend:   598.47, adSales:   2517.65, acos: 23.8, roas: 4.21, adOrders:   105, impressions:   162424, clicks:   1020, ctr: 0.63, cpc: 0.59, convR: 10.29, cpa:  5.70, aov: 23.98 },
  { merchantId: 'popi-ca',          ops:     482.81, units:     11, orders:     10, sessions:    218, pageViews:     408, tacos:  9.03, spend:    43.61, adSales:    159.10, acos: 27.4, roas: 3.63, adOrders:     3, impressions:     5931, clicks:     35, ctr: 0.59, cpc: 1.25, convR:  8.57, cpa: 14.60, aov: 53.03 },
  { merchantId: 'kokolu-us',        ops: 0, units: 0, orders: 0, sessions: 0, pageViews: 0, tacos: 0, spend: 0, adSales: 0, acos: 0, roas: 0, adOrders: 0, impressions: 0, clicks: 0, ctr: 0, cpc: 0, convR: 0, cpa: 0, aov: 0 },
  { merchantId: 'blunt-us',         ops: 0, units: 0, orders: 0, sessions: 0, pageViews: 0, tacos: 0, spend: 0, adSales: 0, acos: 0, roas: 0, adOrders: 0, impressions: 0, clicks: 0, ctr: 0, cpc: 0, convR: 0, cpa: 0, aov: 0 },
];

const DEFAULT_MERCHANT = MERCHANTS[0];

/* ---------- Metric display labels (production canonical) ---------- */
const METRIC_LABELS = {
  // Sales
  ops:            'Ordered Product Sales',
  adSales:        'Ad Sales',
  adSalesPct:     'Ad % of Tot. Sales',
  // Ad investment
  spend:          'Ad Spend',
  acos:           'ACoS',
  tacos:          'TACoS',
  // Ad return
  cpa:            'CPA',
  aov:            'AOV',
  roas:           'ROAS',
  // Traffic + efficiency
  impressions:    'Impressions',
  clicks:         'Clicks',
  ctr:            'CTR',
  cpc:            'CPC',
  adConvR:        'Ad ConvR',
  convR:          'ConvR',
  unitSessPct:    'Ord. Item Sess.%',
  // Orders
  orders:         'Orders',
  adOrders:       'Ad Orders',
  // Retail-only sales/units
  totOrdItems:    'Tot. Ord. Items',
  aovByOrdItem:   'AOV by Ord. Item',
  unitsOrdered:   'Units Ordered',
  asp:            'ASP',
  unitsPerOrdItem:'Units per Ord. Item',
  units:          'Units',
  // Retail traffic
  sessions:       'Sessions',
  pageViews:      'Page Views',
  // Retail coverage
  buyBoxPct:      'Buy Box %',
  avgOfrCount:    'Avg. Ofr. Count',
  // Misc rollup only
  asins:          'ASINs',
  campaigns:      'Campaigns',
};

// ---------- Report type rosters (RC-RPT3-*-002/005) ---------- //

// Combined (11) — 4 groups
const COMBINED_SCORECARDS = [
  'ops','adSales','adSalesPct',         // Sales Mix
  'spend','acos','tacos',               // Advertising Investment
  'cpa','aov','roas',                   // Advertising Return
  'adConvR','unitSessPct',              // Efficiency
];

// Retail (11) — 4 groups
const RETAIL_SCORECARDS = [
  'ops','totOrdItems','aovByOrdItem',   // Sales
  'unitsOrdered','asp','unitsPerOrdItem', // Units
  'sessions','pageViews','unitSessPct', // Traffic
  'buyBoxPct','avgOfrCount',            // Coverage
];

// SP Ads (10) — 4 groups
const SPADS_SCORECARDS = [
  'spend','adSales','acos',             // Performance
  'impressions','clicks','ctr',         // Awareness
  'adOrders','cpa','aov',               // Acquisitions
  'cpc','convR',                        // Efficiency
];

// Report type definitions
const REPORT_TYPES = {
  retail: {
    id: 'retail',
    name: 'Retail Performance',
    platform: 'Amazon Seller',
    scorecards: RETAIL_SCORECARDS,
    // Full Retail metric roster available for the compare chart (P3)
    compareRoster: [
      'ops','totOrdItems','aovByOrdItem',
      'unitsOrdered','asp','unitsPerOrdItem',
      'sessions','pageViews','unitSessPct',
      'buyBoxPct','avgOfrCount',
    ],
    // Trend matrix (P3) rows — 11
    trendMatrixRows: [
      'ops','totOrdItems','aovByOrdItem',
      'unitsOrdered','asp','unitsPerOrdItem',
      'sessions','pageViews','unitSessPct',
      'buyBoxPct','avgOfrCount',
    ],
    viewByDims: ['Category','Sub-Category','ASIN','Brand','Parent ASIN','SKU'],
    defaultViewBy: ['Category'],
    // 11 columns per legacy screenshot
    itemColumns: ['asin','sku','name','ops','unitsOrdered','asp','sessions','pageViews','unitSessPct','buyBoxPct','avgOfrCount'],
    chartPanels: [
      { id: 'sales',    title: 'Sales',    metrics: ['ops','totOrdItems','aovByOrdItem'] },
      { id: 'units',    title: 'Units',    metrics: ['unitsOrdered','asp','unitsPerOrdItem'] },
      { id: 'traffic',  title: 'Traffic',  metrics: ['sessions','pageViews','unitSessPct'] },
      { id: 'coverage', title: 'Coverage', metrics: ['buyBoxPct','avgOfrCount'] },
    ],
  },
  spads: {
    id: 'spads',
    name: 'Sponsored Ads Performance',
    platform: 'Amazon Ads',
    scorecards: SPADS_SCORECARDS,
    compareRoster: [
      'spend','adSales','acos',
      'impressions','clicks','ctr',
      'adOrders','cpa','aov',
      'cpc','convR',
    ],
    trendMatrixRows: [
      'spend','adSales','acos',
      'impressions','clicks','ctr',
      'cpa','aov','adOrders',
      'cpc','convR',
    ],
    viewByDims: ['Campaign','Campaign Type','Ad Group','Portfolio','Targeting','Keyword'],
    defaultViewBy: ['Campaign Type'],
    // 12 columns per legacy screenshot
    itemColumns: ['campaign','spend','adSales','acos','impressions','clicks','ctr','adOrders','cpa','aov','cpc','convR'],
    chartPanels: [
      { id: 'perf',  title: 'Performance',  metrics: ['spend','adSales','acos'] },
      { id: 'reach', title: 'Awareness',    metrics: ['impressions','clicks','ctr'] },
      { id: 'acq',   title: 'Acquisitions', metrics: ['cpa','aov','adOrders'] },
      { id: 'eff',   title: 'Efficiency',   metrics: ['cpc','convR'] },
    ],
    campaignScope: ['All','SP','SB','SD'],
  },
  combined: {
    id: 'combined',
    name: 'Retail & Sponsored Ads Performance',
    platform: 'Amazon Seller · Ads',
    scorecards: COMBINED_SCORECARDS,
    /* RC-RPT3-RSA-005 — RSA Seller compare roster = 14 metrics */
    compareRoster: [
      'ops','adSales','adSalesPct',
      'spend','acos','tacos',
      'cpa','aov','roas',
      'adConvR','unitSessPct',
      'orders','adOrders','units',
    ],
    trendMatrixRows: [
      'ops','adSales','adSalesPct',
      'spend','acos','tacos',
      'cpa','aov','roas',
      'adConvR','unitSessPct',
      'orders','adOrders','units',
    ],
    viewByDims: ['Category','Campaign Type','ASIN','Brand','Targeting'],
    defaultViewBy: ['Category'],
    /* RC-RPT3-RSA-004 — RSA Seller item breakdown = 14 columns */
    itemColumns: ['asin','sku','name','ops','adSales','adSalesPct','spend','acos','tacos','cpa','aov','roas','adConvR','unitSessPct'],
    chartPanels: [
      { id: 'salesmix', title: 'Sales Mix',              metrics: ['adSales','ops','adSalesPct'] },
      { id: 'invest',   title: 'Advertising Investment', metrics: ['spend','acos','tacos'] },
      { id: 'return',   title: 'Advertising Return',     metrics: ['cpa','aov','roas'] },
      { id: 'efficiency', title: 'Efficiency',           metrics: ['adConvR','unitSessPct'] },
    ],
    /* RC-RPT3-RSA-007 — Vendor-specific variants applied when merchant.isVendor.
       Mfg has a 13-col breakdown + 19-metric compare roster (sourcing ledger).
       Sourcing has a 13-col breakdown + 17-metric compare roster (procurement view). */
    vendorVariants: {
      mfg: {
        label: 'Mfg',
        itemColumns: ['asin','sku','name','ops','adSales','adSalesPct','spend','acos','tacos','cpa','aov','roas','unitSessPct'], // 13
        compareRoster: [
          'ops','adSales','adSalesPct',
          'spend','acos','tacos',
          'cpa','aov','roas',
          'adConvR','unitSessPct',
          'orders','adOrders','units',
          'impressions','clicks','ctr','cpc','convR',
        ], // 19 (Vendor Mfg sees the full funnel — incl. upstream ads metrics)
      },
      sourcing: {
        label: 'Sourcing',
        itemColumns: ['asin','sku','name','ops','adSales','adSalesPct','spend','acos','tacos','cpa','aov','roas','orders'], // 13
        compareRoster: [
          'ops','adSales','adSalesPct',
          'spend','acos','tacos',
          'cpa','aov','roas',
          'unitSessPct',
          'orders','adOrders','units',
          'impressions','clicks','ctr','cpc',
        ], // 17 (Sourcing: no adConvR/convR — pulls procurement feed, not attribution)
      },
    },
  },
};

// Baseline values per metric for the hero merchant.
const BASELINES = {
  // Sales
  ops:            233969.68,
  adSales:         85440.00,
  adSalesPct:         36.5,
  // Ad investment
  spend:           53990.00,
  acos:               18.8,
  tacos:              13.9,
  // Returns
  cpa:                30.36,
  aov:                35.35,
  roas:                4.37,
  // Traffic / efficiency
  impressions:   42912815,
  clicks:          108632,
  ctr:                 9.3,
  cpc:                 3.30,
  adConvR:             5.87,
  convR:              17.09,
  unitSessPct:         9.51,
  // Orders
  orders:           6614,
  adOrders:         1540,
  // Retail sales/units
  totOrdItems:      8128,
  aovByOrdItem:       28.78,
  unitsOrdered:     8128,
  asp:                28.78,
  unitsPerOrdItem:     1.00,
  units:            8128,
  // Retail traffic
  sessions:        85512,
  pageViews:      161270,
  // Retail coverage
  buyBoxPct:          96.7,
  avgOfrCount:         3.4,
};

// Deterministic per-metric pseudo-random time series. Seeded by metric id.
function hashSeed(s) { let h = 2166136261; for (let i = 0; i < s.length; i++) { h ^= s.charCodeAt(i); h = Math.imul(h, 16777619); } return h >>> 0; }
function mulberry32(a) { return function () { a |= 0; a = a + 0x6D2B79F5 | 0; let t = Math.imul(a ^ a >>> 15, 1 | a); t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t; return ((t ^ t >>> 14) >>> 0) / 4294967296; }; }

function series(metricId, n = 30, volatility = 0.25) {
  const base = BASELINES[metricId] ?? 1000;
  const rng = mulberry32(hashSeed(metricId));
  const arr = [];
  let prev = base;
  for (let i = 0; i < n; i++) {
    const wave = Math.sin((i / n) * Math.PI * 2 * 1.5) * 0.15;
    const noise = (rng() - 0.5) * volatility;
    const mult = 1 + wave + noise;
    prev = base * mult;
    arr.push(Math.max(0, prev));
  }
  return arr;
}

function priorPeriodSeries(metricId, n = 30) {
  const s = series(metricId + '_prior', n, 0.2);
  const base = BASELINES[metricId] ?? 1000;
  const target = base * 0.88;
  const avg = s.reduce((a, b) => a + b, 0) / s.length;
  const k = target / avg;
  return s.map(v => v * k);
}

// Item breakdown fixtures (Retail / Combined)
const ASIN_FIXTURES = [
  { asin: 'B08N5WRWNW', sku: 'HP-STOW-1L',    name: 'Hydrapak Stow 1L Flexible Water Bottle' },
  { asin: 'B07FZ8S74R', sku: 'HP-SFLSK-500',  name: 'Hydrapak SoftFlask 500ml Reservoir' },
  { asin: 'B09M7GVBJR', sku: 'HP-SEEKR-3L',   name: 'Hydrapak Seeker+ 3L Water Storage' },
  { asin: 'B01CJ4F4UG', sku: 'HP-EXPED-8L',   name: 'Hydrapak Expedition 8L Water Storage' },
  { asin: 'B00EOE0WKQ', sku: 'HP-SHIFT-3L',   name: 'Hydrapak Shape-Shift 3L Hydration Reservoir' },
  { asin: 'B07BHDS6GP', sku: 'HP-VELIT-15',   name: 'Hydrapak Velocity IT Insulated 1.5L' },
  { asin: 'B0CHWYRCX2', sku: 'HP-FLUX-15',    name: 'Hydrapak Flux 1.5L Collapsible Bottle' },
  { asin: 'B09WRQYX8P', sku: 'HP-UFLSK-600',  name: 'Hydrapak UltraFlask SpeedCup 600ml' },
  { asin: 'B08Y5H7R3G', sku: 'HP-FORCE-2L',   name: 'Hydrapak Force 2L Reservoir' },
  { asin: 'B07JK3WFH2', sku: 'HP-PNP-KIT',    name: 'Hydrapak Plug-N-Play Adapter Kit' },
];

// SP Ads campaign fixtures (for SPADS item breakdown)
const CAMPAIGN_FIXTURES = [
  { campaign: 'SP | Auto | Hydration Core',       type: 'SP' },
  { campaign: 'SP | Manual KW | Trail Running',   type: 'SP' },
  { campaign: 'SP | Manual KW | Branded Defense', type: 'SP' },
  { campaign: 'SB | Video | Core Flasks',         type: 'SB' },
  { campaign: 'SB | Store Spotlight | Hydration', type: 'SB' },
  { campaign: 'SD | Retarget | Category Viewers', type: 'SD' },
  { campaign: 'SD | Contextual | Competitors',    type: 'SD' },
  { campaign: 'SP | Manual PT | Category',        type: 'SP' },
  { campaign: 'SP | Auto | Reservoirs',           type: 'SP' },
  { campaign: 'SB | HSA | Brand Terms',           type: 'SB' },
];

Object.assign(window, {
  MERCHANTS, DEFAULT_MERCHANT, DASHBOARD_ROLLUP,
  REPORT_TYPES, METRIC_LABELS, BASELINES,
  series, priorPeriodSeries, ASIN_FIXTURES, CAMPAIGN_FIXTURES,
});
