// Neurasea Exchange — market data model
// Currency: kWh (1 kWh = 1M tokens). Spot price = kWh per Mtok for a given model.
// Exports to window: EX_DATA, exSeries

// deterministic pseudo-random walk for charts/sparklines
function exSeries(seed, n, base, vol) {
  let s = seed, out = [], v = base;
  for (let i = 0; i < n; i++) {
    s = (s * 9301 + 49297) % 233280;
    const r = s / 233280;
    v = Math.max(base * 0.6, v + (r - 0.5) * vol);
    out.push(+v.toFixed(2));
  }
  return out;
}

const EX_DATA = {
  account: { name: 'Aria Chen', org: 'Northwind AI', balance: 2480, fiat: 3920, tier: 'Pro' },

  // spot market — one row per model. price in kWh/Mtok.
  spot: [
    { id: 'opus', model: 'Claude Opus 4.1', vendor: 'Anthropic', tier: 'Frontier',
      bg: '#e7ddd0', fg: '#5a3b22', price: 9.18, ref: 14.0, chg: -2.4, suppliers: 7,
      quality: 99.2, latency: 412, depth: 5.4 },
    { id: 'sonnet', model: 'Claude Sonnet 4.5', vendor: 'Anthropic', tier: 'Balanced',
      bg: '#e7ddd0', fg: '#5a3b22', price: 3.04, ref: 4.2, chg: -1.1, suppliers: 19,
      quality: 99.6, latency: 286, depth: 22.8 },
    { id: 'gpt5', model: 'GPT-5', vendor: 'OpenAI', tier: 'Frontier',
      bg: '#d6e7df', fg: '#1d5c45', price: 8.42, ref: 12.5, chg: 3.2, suppliers: 12,
      quality: 99.1, latency: 398, depth: 11.0 },
    { id: 'gpt5mini', model: 'GPT-5 mini', vendor: 'OpenAI', tier: 'Fast',
      bg: '#d6e7df', fg: '#1d5c45', price: 1.38, ref: 2.0, chg: -0.6, suppliers: 23,
      quality: 98.7, latency: 180, depth: 41.5 },
    { id: 'gem25', model: 'Gemini 2.5 Pro', vendor: 'Google', tier: 'Balanced',
      bg: '#dbe3f4', fg: '#2b4a8a', price: 2.61, ref: 3.5, chg: 1.8, suppliers: 9,
      quality: 99.0, latency: 312, depth: 14.2 },
    { id: 'gemflash', model: 'Gemini 2.5 Flash', vendor: 'Google', tier: 'Fast',
      bg: '#dbe3f4', fg: '#2b4a8a', price: 0.68, ref: 1.1, chg: -4.1, suppliers: 14,
      quality: 98.4, latency: 142, depth: 58.0 },
    { id: 'o4', model: 'o4-reasoning', vendor: 'OpenAI', tier: 'Reasoning',
      bg: '#d6e7df', fg: '#1d5c45', price: 7.10, ref: 9.8, chg: 0.4, suppliers: 4,
      quality: 98.9, latency: 980, depth: 3.1 },
    { id: 'grok', model: 'Grok 4', vendor: 'xAI', tier: 'Frontier',
      bg: '#e6e2dd', fg: '#2a2a2a', price: 6.74, ref: 9.0, chg: 2.0, suppliers: 6,
      quality: 98.5, latency: 430, depth: 7.6 },
  ],

  // futures — weekly subscription contracts (locked kWh/Mtok rate, prepaid 7 days)
  futures: [
    { id: 'f-sonnet', model: 'Claude Sonnet 4.5', vendor: 'Anthropic', bg: '#e7ddd0', fg: '#5a3b22',
      tier: 'Balanced', spotAvg: 3.18, lock: 2.55, weekly: 510, included: 200, save: 20, popular: true },
    { id: 'f-gpt5', model: 'GPT-5', vendor: 'OpenAI', bg: '#d6e7df', fg: '#1d5c45',
      tier: 'Frontier', spotAvg: 8.60, lock: 6.90, weekly: 690, included: 100, save: 20, popular: false },
    { id: 'f-opus', model: 'Claude Opus 4.1', vendor: 'Anthropic', bg: '#e7ddd0', fg: '#5a3b22',
      tier: 'Frontier', spotAvg: 9.40, lock: 7.30, weekly: 730, included: 100, save: 22, popular: false },
    { id: 'f-flash', model: 'Gemini 2.5 Flash', vendor: 'Google', bg: '#dbe3f4', fg: '#2b4a8a',
      tier: 'Fast', spotAvg: 0.72, lock: 0.55, weekly: 220, included: 400, save: 24, popular: false },
  ],

  // order book for the terminal (selected model). bids = buyers, asks = supplier offers.
  book: {
    asks: [
      { px: 9.30, sz: 1.2, n: 2 }, { px: 9.26, sz: 0.8, n: 1 }, { px: 9.24, sz: 2.4, n: 3 },
      { px: 9.21, sz: 1.6, n: 2 }, { px: 9.19, sz: 3.1, n: 4 },
    ],
    bids: [
      { px: 9.16, sz: 2.8, n: 3 }, { px: 9.14, sz: 1.4, n: 2 }, { px: 9.11, sz: 4.0, n: 5 },
      { px: 9.08, sz: 2.2, n: 3 }, { px: 9.04, sz: 5.5, n: 6 },
    ],
    last: 9.18,
  },

  // your open futures contracts (positions)
  positions: [
    { id: 'p1', model: 'Claude Sonnet 4.5', bg: '#e7ddd0', fg: '#5a3b22', lock: 2.55, spot: 3.04,
      used: 128, included: 200, expires: '4d 6h', save: 62 },
    { id: 'p2', model: 'GPT-5 mini', bg: '#d6e7df', fg: '#1d5c45', lock: 1.10, spot: 1.38,
      used: 340, included: 500, expires: '2d 18h', save: 95 },
  ],

  // recent fills (trade tape)
  tape: [
    { side: 'buy', model: 'GPT-5', px: 8.42, sz: 0.4, t: '12:04:31' },
    { side: 'buy', model: 'Sonnet 4.5', px: 3.04, sz: 1.1, t: '12:04:28' },
    { side: 'sell', model: 'Opus 4.1', px: 9.18, sz: 0.2, t: '12:04:22' },
    { side: 'buy', model: 'Gemini Flash', px: 0.68, sz: 3.0, t: '12:04:19' },
    { side: 'buy', model: 'Opus 4.1', px: 9.19, sz: 0.6, t: '12:04:11' },
    { side: 'sell', model: 'GPT-5', px: 8.40, sz: 0.9, t: '12:04:03' },
  ],

  series: {
    opus: exSeries(11, 48, 9.2, 0.9),
    index: exSeries(7, 48, 100, 4),
  },
};

Object.assign(window, { EX_DATA, exSeries });
