// WiseTokens — sample data, helpers, in-session store
const fmt = {
  money: (n) => '$' + Number(n).toLocaleString('en-US', { minimumFractionDigits: 2, maximumFractionDigits: 2 }),
  num: (n) => Number(n).toLocaleString('en-US'),
  compact: (n) => Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 }).format(n),
  pct: (n) => (n >= 0 ? '+' : '') + n.toFixed(1) + '%',
  token: (n) => Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 2 }).format(n),
  ms: (n) => n >= 1000 ? (n/1000).toFixed(2)+'s' : Math.round(n)+'ms',
  date: (d) => new Date(d).toLocaleDateString('en-US', { month: 'short', day: 'numeric' }),
  time: (d) => new Date(d).toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false }),
  datetime: (d) => new Date(d).toLocaleString('en-US', { month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit', hour12: false }),
};

// Providers & models. Pricing per 1M tokens (input / output), in USD
const MODELS = [
  // DeepSeek
  { id: 'deepseek-v3.1', name: 'DeepSeek V3.1', provider: 'DeepSeek', origin: 'CN', class: 'chat', ctx: 128000, in: 0.27, out: 1.10, sla: 99.97, latency: 380, popularity: 98, tags: ['reasoning', 'cheap'], desc: 'Flagship mixture-of-experts chat model. Great price/performance.' },
  { id: 'deepseek-r1', name: 'DeepSeek R1', provider: 'DeepSeek', origin: 'CN', class: 'reasoning', ctx: 128000, in: 0.55, out: 2.19, sla: 99.94, latency: 820, popularity: 94, tags: ['reasoning', 'math', 'code'], desc: 'Reasoning-tuned with chain-of-thought traces. Math & code.' },
  { id: 'deepseek-coder', name: 'DeepSeek Coder', provider: 'DeepSeek', origin: 'CN', class: 'code', ctx: 64000, in: 0.14, out: 0.28, sla: 99.98, latency: 290, popularity: 76, tags: ['code'], desc: 'Specialized for code completion and repo-aware tasks.' },
  // Qwen
  { id: 'qwen3-max', name: 'Qwen 3 Max', provider: 'Qwen', origin: 'CN', class: 'chat', ctx: 256000, in: 0.38, out: 1.52, sla: 99.96, latency: 420, popularity: 89, tags: ['long-ctx', 'multilingual'], desc: 'Alibaba flagship. Strong multilingual + 256K context.' },
  { id: 'qwen3-turbo', name: 'Qwen 3 Turbo', provider: 'Qwen', origin: 'CN', class: 'chat', ctx: 128000, in: 0.07, out: 0.21, sla: 99.98, latency: 240, popularity: 92, tags: ['cheap', 'fast'], desc: 'The cheapest general chat model on the platform.' },
  { id: 'qwen-vl-plus', name: 'Qwen VL Plus', provider: 'Qwen', origin: 'CN', class: 'vision', ctx: 32000, in: 0.42, out: 1.26, sla: 99.91, latency: 680, popularity: 61, tags: ['vision'], desc: 'Vision-language. OCR, charts, UI understanding.' },
  // GLM
  { id: 'glm-4.6', name: 'GLM 4.6', provider: 'GLM', origin: 'CN', class: 'chat', ctx: 128000, in: 0.50, out: 1.50, sla: 99.93, latency: 450, popularity: 72, tags: ['balanced'], desc: 'Zhipu flagship. Balanced general-purpose fallback.' },
  { id: 'glm-4-flash', name: 'GLM 4 Flash', provider: 'GLM', origin: 'CN', class: 'chat', ctx: 128000, in: 0.10, out: 0.10, sla: 99.99, latency: 180, popularity: 58, tags: ['fast', 'cheap'], desc: 'Ultra-fast lightweight chat. Good for high-QPS classifiers.' },
  // Bytedance / other
  { id: 'doubao-pro', name: 'Doubao Pro', provider: 'Doubao', origin: 'CN', class: 'chat', ctx: 128000, in: 0.32, out: 1.20, sla: 99.89, latency: 410, popularity: 44, tags: ['balanced'], desc: 'ByteDance model. Good Chinese + fair English.' },
  { id: 'seedance-1', name: 'SeeDance 1.0', provider: 'SeeDance', origin: 'CN', class: 'video', ctx: 8000, in: 2.40, out: 0, sla: 99.70, latency: 15000, popularity: 28, tags: ['video-gen'], desc: 'Text-to-video generation.' },
  // Upstream (for comparison)
  { id: 'gpt-4o', name: 'GPT-4o (upstream)', provider: 'OpenAI', origin: 'US', class: 'chat', ctx: 128000, in: 2.50, out: 10.00, sla: 99.95, latency: 560, popularity: 12, tags: ['upstream', 'reference'], desc: 'Reference upstream model. Shown for price comparison.' },
  { id: 'claude-sonnet-4', name: 'Claude Sonnet 4', provider: 'Anthropic', origin: 'US', class: 'chat', ctx: 200000, in: 3.00, out: 15.00, sla: 99.96, latency: 620, popularity: 8, tags: ['upstream', 'reference'], desc: 'Reference upstream model. Shown for price comparison.' },
];

const PROVIDER_COLORS = {
  DeepSeek: 'oklch(0.62 0.18 265)',
  Qwen: 'oklch(0.68 0.16 30)',
  GLM: 'oklch(0.68 0.14 150)',
  Doubao: 'oklch(0.74 0.14 85)',
  SeeDance: 'oklch(0.7 0.18 320)',
  OpenAI: 'oklch(0.55 0.02 150)',
  Anthropic: 'oklch(0.64 0.14 40)',
};

// API keys
const KEYS = [
  { id: 'k1', name: 'production', prefix: 'wt-live-2f8a', created: '2026-03-14', lastUsed: '2m ago', requests: 482103, scope: 'all models', rate: 600, status: 'active' },
  { id: 'k2', name: 'staging', prefix: 'wt-live-91c3', created: '2026-03-14', lastUsed: '4h ago', requests: 19804, scope: 'chat only', rate: 120, status: 'active' },
  { id: 'k3', name: 'local-dev', prefix: 'wt-live-4ab0', created: '2026-02-02', lastUsed: '3d ago', requests: 2411, scope: 'all models', rate: 60, status: 'active' },
  { id: 'k4', name: 'legacy-crawler', prefix: 'wt-live-ee17', created: '2025-12-01', lastUsed: '45d ago', requests: 981230, scope: 'chat only', rate: 60, status: 'revoked' },
];

// Recent requests
function makeRequests(n = 30) {
  const cnModels = MODELS.filter(mm => mm.origin === 'CN');
  const keys = ['production', 'staging', 'local-dev'];
  const out = [];
  const now = Date.now();
  for (let i = 0; i < n; i++) {
    const m = cnModels[Math.floor(Math.random() * cnModels.length)];
    if (!m) continue;
    const inTok = Math.floor(200 + Math.random() * 4800);
    const outTok = Math.floor(80 + Math.random() * 1600);
    const cost = (inTok/1e6)*m.in + (outTok/1e6)*m.out;
    const status = Math.random() < 0.96 ? 200 : (Math.random() < 0.7 ? 429 : 500);
    out.push({
      id: 'req_' + Math.random().toString(36).slice(2, 10),
      ts: now - i*1000*60*Math.random()*8,
      model: m.id,
      provider: m.provider,
      key: keys[Math.floor(Math.random()*keys.length)],
      inTok, outTok, cost,
      latency: Math.floor(m.latency * (0.7 + Math.random()*0.7)),
      status,
      stream: Math.random() < 0.5,
    });
  }
  return out.sort((a,b) => b.ts - a.ts);
}

// Usage history — 30 day synthetic series
function makeUsageSeries() {
  const days = 30;
  const out = [];
  const now = new Date();
  for (let i = days - 1; i >= 0; i--) {
    const d = new Date(now); d.setDate(d.getDate() - i);
    const base = 180000 + Math.sin(i*0.3)*40000 + (days-i)*9000 + Math.random()*60000;
    out.push({
      date: d,
      requests: Math.floor(800 + Math.sin(i*0.35)*180 + (days-i)*35 + Math.random()*150),
      tokens: Math.floor(base),
      cost: base / 1e6 * 0.45,
    });
  }
  return out;
}

const USAGE_SERIES = makeUsageSeries();
const RECENT = makeRequests(40);

// Invoices / top-ups
const INVOICES = [
  { id: 'in_AX81', date: '2026-04-02', method: 'Stripe • Visa ····4242', amount: 500, status: 'paid' },
  { id: 'in_AW02', date: '2026-03-18', method: 'USDT • TRC20', amount: 200, status: 'paid' },
  { id: 'in_AV40', date: '2026-03-01', method: 'Stripe • Visa ····4242', amount: 500, status: 'paid' },
  { id: 'in_AU13', date: '2026-02-11', method: 'PayPal', amount: 100, status: 'paid' },
  { id: 'in_AT09', date: '2026-02-02', method: 'Stripe • Visa ····4242', amount: 250, status: 'paid' },
];

// Referral / broker
const REFERRALS = [
  { email: 'a***@acme.ai', joined: '2026-04-10', spend: 1820.40, commission: 182.04, status: 'active' },
  { email: 'd***@studio.io', joined: '2026-03-28', spend: 940.10, commission: 94.01, status: 'active' },
  { email: 'm***@lab.dev', joined: '2026-03-18', spend: 410.80, commission: 41.08, status: 'active' },
  { email: 'r***@corp.br', joined: '2026-02-09', spend: 12.00, commission: 1.20, status: 'pending' },
];

// Tenants (for white-label view)
const TENANTS = [
  { id: 't_wt', name: 'WiseTokens (default)', domain: 'app.wisetokens.ai', users: 1, plan: 'Owner', spend: 8420.10, color: '--accent' },
  { id: 't_acme', name: 'Acme AI', domain: 'api.acme.ai', users: 14, plan: 'Scale', spend: 1820.40, color: 'oklch(0.62 0.18 265)' },
  { id: 't_studio', name: 'Studio.io', domain: 'llm.studio.io', users: 6, plan: 'Growth', spend: 940.10, color: 'oklch(0.68 0.14 150)' },
];

// User
const USER = {
  name: 'Alex Chen',
  email: 'alex@wisetokens.ai',
  org: 'WiseTokens',
  plan: 'Scale',
  balance: 428.77,
  referralCode: 'ALEX-WT-9F2K',
  joined: '2025-11-08',
  tier: 'Tier 3',
};

window.WT = {
  fmt, MODELS, PROVIDER_COLORS, KEYS, RECENT, USAGE_SERIES,
  INVOICES, REFERRALS, TENANTS, USER,
};
